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

本文介绍了ESP32使用Arduino IDE环境下通过WiFi实现UDP通信的方法。包括硬件配置、软件编程和测试过程,对比TCP协议,UDP提供了一种更为简便的数据传输方式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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

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 串口的测试截图。

在这里插入图片描述

评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值