|
發(fā)射程序
#include <ESP8266WiFi.h>
#include <espnow.h>
//接收方MAC地址 根據(jù)自己的板子修改
uint8_t broadcastAddress[] = {0x34, 0xAB, 0x95, 0x24, 0xA1, 0x76};
//發(fā)送數(shù)據(jù)的結(jié)構(gòu)體
typedef struct struct_message {
char a[32];
int b;
float c;
String d;
bool e;
} struct_message;
//創(chuàng)建一個新的類型變量
struct_message myData;
//這是一個回調(diào)函數(shù),將在發(fā)送消息時執(zhí)行。
//在這種情況下,無論是否成功發(fā)送該消息,都會簡單地打印出來
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() {
//初始化串行監(jiān)視器以進行調(diào)試
Serial.begin(115200);
//將設(shè)備設(shè)置為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);
//設(shè)置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);
//先前創(chuàng)建的功能。
esp_now_register_send_cb(OnDataSent);
//與另一個ESP-NOW設(shè)備配對以發(fā)送數(shù)據(jù)
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
//配置要發(fā)送的值
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;
//發(fā)送消息
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);
}
|
|