STM32和C#之间通过ESP8266进行通信

时间:2019-04-10 06:38:50

标签: c# stm32 esp8266

我现在正尝试使用ESP8266(在STA模式下)将STM32F429连接到C#桌面应用程序。我希望ESP8266作为客户端,而C#作为服务器。但是ESP8266仍然无法在同一LAN中找到我的PC。

  • 现在我已经成功使用AT命令将ESP8266连接到我的Router AP。然后我使用XAMPP在地址为192.168.1.11:80的PC上打开一个门,然后使用以下命令(AT + CIPSTART = \“ TCP \”,\“ 192.168.1.11 \”,80“)成功连接ESP8266(返回OK到我的STM32F429)。 然后,我想用我的C#代码替换XAMPP,以打开TCP服务器。但是我做不到!

  • 关于C#代码,我已经成功建立了两个C#程序之间的连接(IP地址为192.168.1.11:80,与上面提到的相同),但是当我尝试使用ESP8266时连接到相同的IP和端口,则失败。

我怀疑在LAN的某些端口上打开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连接到使用C#在PC上构建的TcpListener。
  • 我的电脑在收到命令时做了什么: myListener = new TcpListener(ip,80);

  • 我正在做的项目是通过ESP8266将Stm32F429和OV7725获得的图像数据传输到PC。我知道Usart这样做太慢了,但是现在我只是在尝试建立连接。你们有什么建议可以给我吗?

2 个答案:

答案 0 :(得分:0)

首先,请确保您的PC上没有其他应用程序在监听端口80。如果是,则必须对其进行更改。

第二,尝试将TCPListener的IP设置为本地主机“ 127.0.0.1”。通过连接到PC的IP,您将可以访问此服务器。

答案 1 :(得分:0)

我已经在命令窗口中检查了使用的IP,如下所示:

Command Window for checking IP usage

我仍然保持ESP8266尝试访问的IP地址为192.168.1.11:1900,这是我的PC在LAN中的虚拟IP,如下所示:

Address ESP8266 try to access

并更改IP C#会尝试在以下位置创建TCPListener:

C# code

这是您的意思吗?谢谢。