Esp8266如何使用esp-now协议,最简单的程序如何编写
时间: 2023-06-18 11:07:51 浏览: 720
ESP-NOW是ESP8266的一种通信协议,可以实现两个或多个ESP8266设备之间的直接通信,无需连接到Wi-Fi路由器。下面是ESP8266使用ESP-NOW协议的最简单程序:
```c
#include <ESP8266WiFi.h>
#include <espnow.h>
// 定义ESP-NOW的接收回调函数
void OnDataRecv(uint8_t *mac_addr, uint8_t *data, uint8_t len) {
Serial.print("Received data from: ");
for (int i = 0; i < 6; i++) {
Serial.print(mac_addr[i], HEX);
if (i < 5) Serial.print(":");
}
Serial.print(" | Data: ");
for (int i = 0; i < len; i++) {
Serial.print((char)data[i]);
}
Serial.println();
}
void setup() {
Serial.begin(115200);
// 初始化ESP-NOW
if (esp_now_init() != 0) {
Serial.println("ESP-NOW initialization failed");
return;
}
// 注册ESP-NOW的接收回调函数
esp_now_set_self_role(ESP_NOW_ROLE_COMBO);
esp_now_register_recv_cb(OnDataRecv);
// 添加要通信的设备的MAC地址
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_COMBO, 1, NULL, 0);
Serial.println("ESP-NOW initialized");
}
void loop() {
// 发送数据
uint8_t data[] = "Hello, ESP8266!";
esp_now_send(broadcastAddress, data, sizeof(data));
delay(1000);
}
```
在这个程序中,首先需要包含ESP8266WiFi和espnow库。然后,在`setup()`函数中,初始化ESP-NOW并注册接收回调函数。这个程序中只添加了一个设备的MAC地址,即广播地址,可以与所有可用的ESP8266设备进行通信。在`loop()`函数中,向其他设备发送数据。当其他设备发送数据时,`OnDataRecv()`函数会被调用,并输出接收到的数据。
需要注意的是,要使用ESP-NOW协议,所有设备都需要使用ESP8266,并且它们之间不能有物理障碍物。
阅读全文