Связь между STM32 и C # через ESP8266 - PullRequest
0 голосов
/ 10 апреля 2019

Я сейчас пытаюсь подключить STM32F429 к настольному приложению C # с ESP8266 (в режиме STA).Я хочу, чтобы ESP8266 был клиентом, а C # - сервером.Однако ESP8266 по-прежнему не может найти мой ПК в той же локальной сети.

  • Теперь мне удалось использовать команду AT для подключения ESP8266 к моей точке доступа маршрутизатора.И я использовал XAMPP для открытия шлюза на моем ПК с адресом 192.168.1.11:80, а затем с помощью следующей команды (AT + CIPSTART = \ "TCP \", \ "192.168.1.11 \", 80 ") для успешного подключенияESP8266 к нему (он вернул OK на мой STM32F429). Затем я хочу заменить XAMPP на мой код C #, чтобы открыть TCP-сервер. Но я не смог этого сделать!

  • Что касаетсяКод C #, я успешно установил соединение между двумя программами C # (IP-адрес 192.168.1.11:80 совпадает с упомянутым выше). Но когда я попытался использовать ESP8266 для подключения к одному IP-адресу и порту,это не удалось.

Я подозревал, что у меня могут быть некоторые неправильные представления об открытии прослушивателя TCP для определенного порта в моей локальной сети ... Я не знаю ...

Ниже приведен мой код C # (код STM32 - это просто базовый код Usart, который я не буду здесь представлять).


// Code for Server
namespace Tcp_Server
{
    public partial class Form1 : Form
    {

        private TcpListener myListener;
        private TcpClient newClient;
        public BinaryReader br;
        public BinaryWriter bw;

        public Form1()
        {
            InitializeComponent();
            Thread myThread = new Thread(ServerA);
            myThread.Start();

        }

        private void ServerA()
        {
            IPAddress SvrIP = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address); // Get the virtual IP of my PC.

            this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, ip.ToString() });
            myListener = new TcpListener(ip, 80); //construct a Tcp Listener.
            myListener.Start(); //Tcp Listener start
            newClient = myListener.AcceptTcpClient();// Searching for a client...

            this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, "Connect Successfully" });

            while (true)
            {
                try
                {
                    NetworkStream clientStream = newClient.GetStream();
                    br = new BinaryReader(clientStream);
                    string receive = null;
                    receive = br.ReadString();//读取
                    this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, receive });
                }
                catch
                {
                    MessageBox.Show("Receving failed...");
                }
            }
        }

// Code for client
namespace Client
{
    public partial class Form1 : Form
    {

        private TcpClient client;
        public BinaryReader br;
        public BinaryWriter bw;

        public Form1()
        {
            InitializeComponent();
            Thread myThread = new Thread(ClientA);
            myThread.Start();
        }

        private void ClientA()
        {
            IPAddress ip = new IPAddress(Dns.GetHostByName(Dns.GetHostName()).AddressList[0].Address); // Get the virtual IP of my PC.
            client = new TcpClient(ip.ToString(), 80);
            this.Invoke(new AddToTextbox_dg(AddToTextbox), new object[] { tb_ServerStatus, "Connect to Server Successfully!" });
            while (true)
            {
                try
                {
                    NetworkStream clientStream = client.GetStream();
                    br = new BinaryReader(clientStream);
                    string receive = null;
                    receive = br.ReadString();
                }
                catch
                {
                    MessageBox.Show("Receving failed...");
                }
            }
        }

        private void AddToTextbox(TextBox txt, String s)

        {

            txt.Text += s;

        }
        private delegate void AddToTextbox_dg(TextBox txt, String s);

        private void btn_send_Click(object sender, EventArgs e)
        {
            NetworkStream clientStream = client.GetStream();
            bw = new BinaryWriter(clientStream);
            bw.Write(message.Text);

        }
    }
}

Может кто-нибудь помочь мне сэта проблема?

  • Интересно, почему я не могу подключить ESP8266 к TcpListener Я построил на своем ПК с C #.
  • Что мой ПК делал при получении команды: myListener = new TcpListener (ip, 80);

  • Этот проект, который я делаю, собирается передать данные изображения, полученные с помощью Stm32F429 и OV7725, на мой компьютер через ESP8266.Я знаю, что Усарт будет слишком медленным, чтобы сделать это, но сейчас я просто пытаюсь установить связь.Ребята, можете ли вы предложить мне что-нибудь по этому поводу?

Ответы [ 2 ]

0 голосов
/ 10 апреля 2019

Я проверил используемый IP в командном окне, как показано ниже:

Окно команд для проверки использования IP

И у меня остается IP-адрес, к которому ESP8266 будет пытаться получить доступ, равный 192.168.1.11:1900, который является виртуальным IP-адресом моего ПК в локальной сети, как показано ниже:

Адрес ESP8266 попытаться получить доступ

А при изменении IP C # попытается создать TCPListener на:

C # код

Это то, что вы имеете в виду? Спасибо.

0 голосов
/ 10 апреля 2019

Во-первых, убедитесь, что никакое другое приложение на вашем компьютере не прослушивает порт 80. Если это так, вы должны изменить его.

Во-вторых, попробуйте установить ip для TCPListener на локальный хост "127.0.0.1».вы сможете подключиться к этому серверу, подключившись к ip вашего ПК.

...