【物联网初探】- 07 - ESP32 利用 wifi 进行 UDP 通信(Arduino IDE)
文章目录
1. 硬件、接线、环境配置
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 对象
-
下面的例子给出了利用 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 串口的测试截图。