|
发射程序
#include <ESP8266WiFi.h>
#include <espnow.h>
//接收方MAC地址 根据自己的板子修改
uint8_t broadcastAddress[] = {0x34, 0xAB, 0x95, 0x24, 0xA1, 0x76};
//发送数据的结构体
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;
//创建一个新的类型变量
struct_message myData;
//这是一个回调函数,将在发送消息时执行。
//在这种情况下,无论是否成功发送该消息,都会简单地打印出来
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
Serial.print("Last Packet Send Status: ");
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
void setup() {
//初始化串行监视器以进行调试
Serial.begin(115200);
//将设备设置为Wi-Fi站点
WiFi.mode(WIFI_STA);
//立即初始化ESP
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
pinMode(14,INPUT);
pinMode(12,INPUT);
pinMode(13,INPUT);
pinMode(16,INPUT);
pinMode(5,INPUT);
pinMode(4,INPUT);
//设置ESP8266角色 ESP_NOW_ROLE_CONTROLLER, ESP_NOW_ROLE_SLAVE,
//ESP_NOW_ROLE_COMBO, ESP_NOW_ROLE_MAX。
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER);
//先前创建的功能。
esp_now_register_send_cb(OnDataSent);
//与另一个ESP-NOW设备配对以发送数据
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
//配置要发送的值
if(digitalRead(4)==HIGH) myData.b = 1;
if(digitalRead(5)==HIGH) myData.b = 2;
if(digitalRead(12)==HIGH) myData.b = 3;
if(digitalRead(13)==HIGH) myData.b = 4;
if(digitalRead(14)==HIGH) myData.b = 5;
if(digitalRead(16)==HIGH) myData.b = 6;
//发送消息
esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
//延时两秒
delay(2000);
}
接收程序
#include <ESP8266WiFi.h>
#include <espnow.h>
int k;
typedef struct struct_message {
char a[32];
int b;
} struct_message;
struct_message myData;
void OnDataRecv(uint8_t * mac, uint8_t *incomingData, uint8_t len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Int: ");
Serial.println(myData.b);
k=myData.b;
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
pinMode(0,OUTPUT);
digitalWrite(0, HIGH);
pinMode(2,OUTPUT);
digitalWrite(2, HIGH);
pinMode(3,OUTPUT);
digitalWrite(3, HIGH);
esp_now_set_self_role(ESP_NOW_ROLE_SLAVE);
esp_now_register_recv_cb(OnDataRecv);
}
void loop(){
if(k==1) digitalWrite(3, LOW);
if(k==2) digitalWrite(3, HIGH);
if(k==3) digitalWrite(2, LOW);
if(k==4) digitalWrite(2, HIGH);
if(k==5) digitalWrite(0, LOW);
if(k==6) digitalWrite(0, HIGH);
}
|
|