【物联网初探】- 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. 硬件、接线、环境配置

2. ESP32 下的 wifi 基本功能 (arduino)

  • ESP32如何创建热点及连接 wifi 请参见上述文章 06 中的介绍。

3. ESP32 下 UDP 通信

3.1 TCP / UDP 的极简释义
  • TCPTransmission Control Protocol,传输控制协议)是面向连接的协议,在收发数据前,必须和对方建立可靠的连接。
  • UDPUser 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 串口的测试截图。

ESP32信号转发 esp32 wifi传输数据_arduino