当前位置:实例文章 » 其他实例» [文章][Arduino] ESP32开发 - UDP收发数据

[Arduino] ESP32开发 - UDP收发数据

发布人:shili8 发布时间:2024-12-26 16:09 阅读次数:0

**ESP32开发 - UDP收发数据**

在物联网时代,UDP(User Datagram Protocol)协议成为一种常见的通信协议。它允许设备之间直接发送和接收数据,而不需要建立连接或确认收到数据。这篇文章将教你如何使用Arduino IDE和ESP32开发板实现UDP收发数据。

**硬件准备**

* ESP32开发板(例如ESP-WROVER-KIT)
* Arduino IDE* USB线**软件准备**

* 下载并安装Arduino IDE(版本1.8.x或以上)
* 在Arduino IDE中创建一个新项目,选择ESP32为目标板**UDP收发数据的基本原理**

UDP协议是一种无连接的传输层协议。它不需要建立连接,也不确认收到数据。每个数据包都是独立的,可以在任何时候发送和接收。

下图展示了UDP收发数据的基本流程:

1. **设备A**(发送端)准备好要发送的数据。
2. **设备B**(接收端)监听指定的UDP端口,等待数据包到达。
3. **设备A**将数据包通过网络发送给**设备B**。
4. **设备B**接收并处理数据包。

**ESP32实现UDP收发数据**

下面是使用Arduino IDE和ESP32开发板实现UDP收发数据的示例代码:

### UDP发送端(Sender)

cpp#include 
#include 

// ESP-NOW相关设置const char* ssid = "你的WIFI名称";
const char* password = "你的WIFI密码";

// UDP相关设置const int udpPort =1234; // 指定UDP端口void setup() {
 Serial.begin(115200);
 WiFi.mode(WIFI_STA); // 设备模式为STA(Station)
 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
 delay(1000);
 Serial.println("Connecting to WiFi...");
 }

 Serial.println("Connected to WiFi");
 Serial.println("ESP-NOW初始化完成");

 // ESP-NOW初始化 esp_now_init();
 esp_now_register_recv_cb(esp_now_recv_cb); // 注册接收回调函数}

void loop() {
 String data = "Hello, UDP!";
 send_udp_data(data);
 delay(1000);
}

// 发送UDP数据包void send_udp_data(String data) {
 WiFiUDP udp;
 int packetSize = data.length();
 char packet[packetSize +1];
 data.toCharArray(packet, packetSize +1);

 if (udp.beginPacket(udpPort)) { // 开始发送数据包 udp.write(packet, packetSize);
 udp.endPacket(); // 结束发送数据包 } else {
 Serial.println("Error sending UDP packet");
 }
}

// ESP-NOW接收回调函数void esp_now_recv_cb(const uint8_t* mac, const uint8_t* data, int len) {
 String receivedData = "";
 for (int i =0; i < len; i++) {
 receivedData += char(data[i]);
 }
 Serial.println("Received UDP packet: " + receivedData);
}


### UDP接收端(Receiver)

cpp#include 
#include 

// ESP-NOW相关设置const char* ssid = "你的WIFI名称";
const char* password = "你的WIFI密码";

// UDP相关设置const int udpPort =1234; // 指定UDP端口void setup() {
 Serial.begin(115200);
 WiFi.mode(WIFI_STA); // 设备模式为STA(Station)
 WiFi.begin(ssid, password);

 while (WiFi.status() != WL_CONNECTED) {
 delay(1000);
 Serial.println("Connecting to WiFi...");
 }

 Serial.println("Connected to WiFi");
 Serial.println("ESP-NOW初始化完成");

 // ESP-NOW初始化 esp_now_init();
 esp_now_register_recv_cb(esp_now_recv_cb); // 注册接收回调函数}

void loop() {
 WiFiUDP udp;
 int packetSize =0;

 if (udp.parsePacket(packetSize)) { // 开始接收数据包 String receivedData = "";
 while (udp.available()) {
 char c = udp.read();
 receivedData += c;
 }
 Serial.println("Received UDP packet: " + receivedData);
 udp.stop(); // 结束接收数据包 } else {
 Serial.println("Error receiving UDP packet");
 }

 delay(1000);
}

// ESP-NOW接收回调函数void esp_now_recv_cb(const uint8_t* mac, const uint8_t* data, int len) {
 String receivedData = "";
 for (int i =0; i < len; i++) {
 receivedData += char(data[i]);
 }
 Serial.println("Received UDP packet: " + receivedData);
}


**注意事项**

1. **ESP32开发板的硬件版本**:请确保使用的是支持ESP-NOW功能的硬件版本。
2. **WIFI名称和密码**:请填写正确的WIFI名称和密码,以便设备能够连接到网络。
3. **UDP端口**:请指定一个可用的UDP端口号,以便数据包能够发送和接收。

**总结**

本文介绍了如何使用Arduino IDE和ESP32开发板实现UDP收发数据。通过阅读这篇文章,你应该能够理解基本原理、硬件准备、软件准备以及示例代码的内容。希望你能成功地完成实验并掌握相关知识!

相关标签:
其他信息

其他资源

Top