【物联网初探】- 07 - ESP32 利用 wifi 进行 UDP 通信(Arduino IDE)

【物联网初探】- 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 的极简释义
  • 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 
    
    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 串口的测试截图。

【物联网初探】- 07 - ESP32 利用 wifi 进行 UDP 通信(Arduino IDE)_第1张图片

你可能感兴趣的:(嵌入式学习记录,物联网,esp32,arduino)