arduino esp now
时间: 2025-04-07 12:00:37 浏览: 29
### 使用 ESP-NOW 和 Arduino 实现无线通信
ESP-NOW 是一种轻量级的通信协议,适用于低功耗设备之间的数据传输。它允许两个或多个设备之间通过 Wi-Fi 芯片进行点对点通信,而无需连接到任何接入点 (AP) 或路由器。这种特性使其非常适合用于物联网项目中的传感器网络或其他简单的无线通信场景。
以下是关于如何使用 ESP-NOW 协议与 Arduino 进行无线通信的具体说明:
#### 1. 硬件准备
为了实现基于 ESP-NOW 的无线通信,通常需要两块支持 ESP8266 或 ESP32 的开发板作为发送端和接收端。这些芯片内置了对 ESP-NOW 的硬件支持[^3]。
#### 2. 安装必要的库文件
对于 Arduino IDE 开发环境而言,需安装 `WiFi` 库以及可能涉及的一些额外驱动程序来启用 ESP-NOW 功能。如果目标平台为 ESP32,则可以直接利用官方提供的核心库完成配置;而对于 ESP8266 用户来说,部分功能可能需要手动移植或者寻找社区贡献版本的支持[^2]。
#### 3. 配置代码示例
下面提供了一个基本的例子展示如何设置一对节点间的数据交换过程:
##### 发送方代码:
```cpp
#include <esp_now.h>
#include <WiFi.h>
// 替换为你自己的MAC地址
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
String message = "Hello from Sender";
void setup() {
Serial.begin(115200);
// 初始化Wi-Fi模块而不加入任何网络
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK){
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册回调函数处理发送状态反馈
esp_now_register_send_cb(onDataSent);
// 添加远程设备并指定其MAC地址
esp_now_add_peer(broadcastAddress, ESP_NOW_ENCRYPT, NULL);
}
void loop(){
esp_err_t result = esp_now_send(broadcastAddress,(uint8_t *)message.c_str(),message.length()+1);
delay(2000);
}
void onDataSent(const uint8_t *mac_addr, esp_now_send_status_t status){
char macStr[18];
snprintf(macStr,sizeof(macStr),"%02x:%02x:%02x:%02x:%02x:%02x",
mac_addr[0],mac_addr[1],mac_addr[2],
mac_addr[3],mac_addr[4],mac_addr[5]);
Serial.print("Last Packet Send Status: ");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
}
```
##### 接收方代码:
```cpp
#include <esp_now.h>
#include <WiFi.h>
void onDataReceived(const uint8_t * mac, const uint8_t *incomingData, int len) {
char data[len+1];
memcpy(data,incomingData,len);
data[len]='\0';
Serial.printf("Bytes received: %d\n",len);
Serial.println(data);
}
void setup() {
Serial.begin(115200);
// 设置工作模式仅为STA
WiFi.mode(WIFI_STA);
if (esp_now_init()!=ESP_OK){
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册接收到数据后的回调函数
esp_now_register_recv_cb(onDataReceived);
}
void loop(){}
```
以上代码展示了最基础的形式下如何建立双向通讯链路。
#### 注意事项
- **兼容性问题**:不同型号间的互操作可能会遇到一些挑战,比如某些特定固件版本可能存在差异。
- **安全性考量**:虽然上述例子未加密消息内容,但在实际应用中建议开启AES加密选项以保护隐私信息的安全传递。
阅读全文
相关推荐


















