【物联网初探】- 07 - ESP32 利用 wifi 进行 UDP 通信(Arduino IDE)
文章目录
- 1. 硬件、接线、环境配置
- 2. ESP32 下的 wifi 基本功能 (arduino)
- 3. ESP32 下 UDP 通信
- 3.1 TCP / UDP 的极简释义
- 3.2 ESP32 UDP 通信小例子
- 3.2.1 准备工具
- 3.2.2 通信流程
- 3.3 UDP 简单测试
1. 硬件、接线、环境配置
- 【物联网初探】- 01 - ESP32 开发环境搭建 (Arduino IDE)
- 【物联网初探】- 02 - ESP32 利用 SPI 联通 TFT 彩屏 (Arduino IDE)
- 【物联网初探】- 03 - ESP32 结合 TFT_eSPI 库标定 TFT 触摸屏 (Arduino IDE)
- 【物联网初探】- 04 - ESP32 结合 LVGL 库开发环境搭建 (Arduino IDE)
- 【物联网初探】- 05 - ESP32 上 LVGL 库的多个例程测试 (Arduino IDE)
- 【物联网初探】- 06 - ESP32 利用 wifi 进行 TCP 通信(Arduino IDE)
2. ESP32 下的 wifi 基本功能 (arduino)
- ESP32如何创建热点及连接 wifi 请参见上述文章 06 中的介绍。
3. ESP32 下 UDP 通信
3.1 TCP / UDP 的极简释义
-
TCP(Transmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。 -
UDP(User Data Protocol,用户数据报协议)是一个非连接的协议,传输数据之前源端和终端不建立连。 - 简单解释,TCP必须客户端和服务端连接上才能收发数据,UDP则是数据都扔在网上,谁用谁收,谁有谁发。
3.2 ESP32 UDP 通信小例子
3.2.1 准备工具
- 与 06 篇的TCP通信一致,仍使用 NetAssistant - github ,任意能够进行UDP通信的工具都可以,利用 python 也可以,下面以
NetAssistant为例。
3.2.2 通信流程
- 当服务端和客户端在同一网络下,与TCP类似,基本流程为:
- 实例化一个 UDP 对象
Udp,ESP32 连接 wifi 。 -
Udp.beginPacket(IP, Port)利用该函数配置远端接受UDP数据的 IP 和 端口号。 -
Udp.print(string);利用该函数将待发送字符串数据写入缓存。 -
Udp.endPacket();发送数据到远端 UDP 端口。
- 下面的例子给出了利用 UDP 从 ESP32 上发送至其他 IP 和端口:
#include <WiFi.h>
const char *ssid = "***";
const char *password = "***";
WiFiUDP Udp;
IPAddress remote_IP(192, 168, 1, 22);// 自定义远程监 IP 地址
unsigned int remoteUdpPort = 6060; // 自定义远程监听端口
int cnt = 0; //测试数据
void setup()
{
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.setSleep(false); //关闭STA模式下wifi休眠,提高响应速度
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED)
{
delay(200);
Serial.print(".");
}
Serial.print("Connected, IP Address: ");
Serial.println(WiFi.localIP());
}
void loop()
{
Udp.beginPacket(remote_IP, remoteUdpPort);//配置远端ip地址和端口
String str_cnt(cnt);
Udp.print(str_cnt);//把数据写入发送缓冲区
Udp.endPacket();//发送数据
cnt++;
delay(500);
}- 本例子中没有写 ESP32 接收 UDP 数据的例子,这样的例子网络上有很多,可以参考已有的博客ESP32使用UDP通信。
3.3 UDP 简单测试
- 准备好网络测试工具,设置好监听端口,这里台式机的局域网 IP 是 192.168.31.133,端口自定义,这两个参数需要在 ESP32 中设置好,这里也发现一个小问题,就是 Wifi.h 这个库中没有合适函数来进行不指定端口的 UDP 通信,也就是说,要利用这个基本的库从 ESP32 往其他机器发数据,必须明确其他机器的 IP ,而端口是自定义的,但是其他机器上编写接受 UDP 数据函数时,需要和 ESP32 保持一致的端口号。
- 下面是网络调试助手和 Arduino 串口的测试截图。

















