ESP32 UDP通信

一、介绍UDP通信

UDP:无需建立连接就可以发数据。

HTTP:需要双方建立连接才能发数据。

详细介绍链接:

https://blog.csdn.net/qq_39300332/article/details/79139229

二、测试UDP通信

先举个例子,什么是UDP通信呢?

我们习惯使用“ping”命令来测试两台主机之间TCP/IP通信是否正常,其实“ping”命令的原理就是向对方主机发送UDP数据包,然后对方主机确认收到数据包,如果数据包是否到达的消息及时反馈回来,那么网络就是通的。

我们在使用esp32开发板测试一下UDP通信。

1、下载网络调试助手NetAssist。图标长这样(哈哈哈,感觉长得好奇怪):

 首先我们点开它看一下,记住IP地址和端口号,一会要用它。注意:之后ESP32连接的网络和电脑使用的网络在同一WiFi下。

 2、直接上代码测试下。

#include <WiFi.h>
#include <WiFiUdp.h> //引用以使用UDP

const char *ssid = "***";
const char *password = "***";

WiFiUDP Udp;                      //创建UDP对象
unsigned int localUdpPort = 8080; //本地端口号

void setup()
{
  Serial.begin(115200);
  Serial.println();

  WiFi.mode(WIFI_STA);
  WiFi.begin(ssid, password);
  while (!WiFi.isConnected())
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println("Connected");
  Serial.print("IP Address:");
  Serial.println(WiFi.localIP());

  Udp.begin(localUdpPort); //启用UDP监听以接收数据
}

void loop()
{
  int packetSize = Udp.parsePacket(); //获取当前队首数据包长度
  if (packetSize)                     //如果有数据可用
  {
    char buf[packetSize];
    Udp.read(buf, packetSize); //读取当前包数据
    Serial.print("message: ");
    Serial.println(buf);
    Serial.print("From IP: ");
    Serial.println(Udp.remoteIP());
    Serial.print("From Port: ");
    Serial.println(Udp.remotePort());

  }
}

以上代码的例子是esp32作为UDP接收数据的。

我们打开网络调试助手和串口助手。

首先在串口助手上看下esp32的IP地址。

然后打开网络调试助手,如下,框出的区域为目标主机,也就是esp32的IP和端口:

 端口号我们在程序里设置的是8080.

 然后随便发送数据,测试一下。看一下esp这边的串口接收。

 以上,esp32可以收到数据,但是后面又多了乱码,通信是不可靠的。

猜你喜欢

转载自blog.csdn.net/weixin_58125062/article/details/129844656