espnow 接收端 发送端 控制led
时间: 2023-08-28 20:04:41 浏览: 146
以下是一个示例代码,其中包含一个ESP-NOW发送端和一个接收端,控制LED灯亮和灭:
发送端代码:
```
#include <esp_now.h>
#include <WiFi.h>
// 定义接收端的MAC地址
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// 定义发送数据的结构体
typedef struct struct_message {
int ledState;
} struct_message;
// 初始化发送数据结构体
struct_message myData;
void setup() {
// 初始化串口
Serial.begin(115200);
// 初始化ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册发送端
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}
void loop() {
// 设置发送数据
myData.ledState = digitalRead(LED_BUILTIN);
// 发送数据
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(struct_message));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
// 等待1秒
delay(1000);
}
```
接收端代码:
```
#include <esp_now.h>
#include <WiFi.h>
// 定义接收数据的结构体
typedef struct struct_message {
int ledState;
} struct_message;
// 初始化接收数据结构体
struct_message receivedData;
// 定义LED灯引脚
const int ledPin = LED_BUILTIN;
void setup() {
// 初始化串口
Serial.begin(115200);
// 初始化ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// 注册接收端
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
// 设置LED灯引脚为输出
pinMode(ledPin, OUTPUT);
}
void loop() {
// 等待接收数据
uint8_t macAddress[6];
while (esp_now_recv(macAddress, (uint8_t *) &receivedData, sizeof(struct_message)) == ESP_OK) {
// 控制LED灯
digitalWrite(ledPin, receivedData.ledState);
}
}
```
在这个示例中,发送端每秒发送一次LED灯的状态,接收端接收到数据后控制LED灯的亮和灭。可以通过修改发送端的代码来改变LED灯的状态,例如:
```
myData.ledState = !digitalRead(LED_BUILTIN); // 取反当前LED灯的状态
```
阅读全文