能给一段ESP32和esp8266的ESPNOW程序
时间: 2023-06-08 10:08:58 浏览: 292
当然可以!以下是一个简单的ESPNOW通信程序,适用于ESP32和ESP8266:
ESP8266作为发送器:
```
#include <ESP8266WiFi.h>
#include <ESP8266WiFiMulti.h>
#include <espnow.h>
#include <WiFiClient.h>
#include <Wire.h>
ESP8266WiFiMulti WiFiMulti;
// 收到数据时的回调函数
void OnDataRecv(uint8_t * mac_addr, uint8_t *incomingData, uint8_t len) {
Serial.print("从MAC地址为:");
for (int i = 0; i < 6; i++) {
Serial.print(mac_addr[i], HEX);
if (i != 5) Serial.print(":");
}
Serial.print("的接收器收到消息:");
Serial.println((char *)incomingData);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFiMulti.addAP("SSID", "PASSWORD");
// 等待连接WiFi
while (WiFiMulti.run() != WL_CONNECTED) {
delay(100);
}
// 初始化esp-now并注册回调函数
if (esp_now_init() == 0) {
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
esp_now_register_recv_cb(OnDataRecv);
} else {
Serial.println("Error Initializing ESP-NOW");
return;
}
// 添加接收器(esp32)的MAC地址
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, {0x11, 0x22, 0x33, 0x44, 0x55, 0x66}, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
Serial.println("Connected and Peers added");
}
void loop() {
// 发送数据到接收器
esp_now_send({0x11, 0x22, 0x33, 0x44, 0x55, 0x66}, "Hello from ESP8266", 18);
delay(5000);
}
```
ESP32作为接收器:
```
#include <WiFi.h>
#include <esp_now.h>
#include <Wire.h>
// 收到数据时的回调函数
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *incomingData, int len) {
Serial.print("从MAC地址为:");
for (int i = 0; i < 6; i++) {
Serial.print(mac_addr[i], HEX);
if (i != 5) Serial.print(":");
}
Serial.print("的发送器收到消息:");
Serial.println((char *)incomingData);
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
WiFi.begin("SSID", "PASSWORD");
// 等待连接WiFi
while (WiFi.status() != WL_CONNECTED) {
delay(100);
}
// 初始化esp-now并注册回调函数
if (esp_now_init() == 0) {
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
} else {
Serial.println("Error Initializing ESP-NOW");
return;
}
Serial.println("Connected and waiting for data");
}
void loop() {
// do nothing
}
```
以上是简单的ESP8266和ESP32之间的通信程序,可以根据自己的需求进行更改和扩展。
阅读全文