Esp8266如何实现两个设备esp-now最简单的通信
时间: 2024-05-01 08:23:30 浏览: 186
ESP8266可以通过ESP-NOW协议实现两个设备之间的最简单通信。
下面是ESP8266两个设备之间通过ESP-NOW协议进行通信的最简单示例:
1. 设置模式
```cpp
#include <ESP8266WiFi.h>
#include <espnow.h>
void setup() {
WiFi.mode(WIFI_STA); //设置为STA模式
WiFi.disconnect(); //断开WiFi连接
if (esp_now_init() != 0) { //初始化esp-now
Serial.println("Error initializing ESP-NOW");
return;
}
}
```
2. 设置回调函数
```cpp
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int len) {
Serial.print("Received data from: ");
Serial.write(mac_addr, 6);
Serial.print("data: ");
Serial.write(data, len);
Serial.println();
}
void setup() {
// ...省略WiFi和ESP-NOW初始化代码
esp_now_set_self_role(ESP_NOW_ROLE_COMBO); //设置为Combo角色
esp_now_register_recv_cb(OnDataRecv); //注册回调函数
}
```
3. 发送数据
```cpp
void SendData(uint8_t *macAddr, const uint8_t *data, int len) {
esp_now_send(macAddr, data, len); //发送数据
}
void loop() {
uint8_t macAddr[] = {0x12, 0x34, 0x56, 0x78, 0x9A, 0xBC}; //目标设备MAC地址
uint8_t data[] = {'H', 'e', 'l', 'l', 'o', '!', '\0'}; //要发送的数据
SendData(macAddr, data, sizeof(data)); //发送数据
delay(1000); //延时1秒
}
```
4. 接收数据
```cpp
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int len) {
Serial.print("Received data from: ");
Serial.write(mac_addr, 6);
Serial.print("data: ");
Serial.write(data, len);
Serial.println();
}
void loop() {
delay(100); //延时100毫秒,等待接收数据
}
```
以上就是ESP8266两个设备之间通过ESP-NOW协议进行通信的最简单示例。需要注意的是,ESP-NOW协议在使用过程中需要使用Combo角色,并且需要设置回调函数来接收数据。
阅读全文