Hello everyone,
I have recently started with the ESP NOW communication and I want to establish a many one communication using esp8266 to turn on leds that are hooked on to the receiver.
There are 2 transmitters.
Can you please help me with the code.
Transmitter code
#include <ESP8266WiFi.h>
#include <espnow.h>
#define btn1 D1
#define btn2 D2
#define btn3 D5
#define btn4 D6
bool btn1State = false;
bool btn2State = false;
bool btn3State = false;
bool btn4State = false;
// REPLACE WITH RECEIVER MAC Address
uint8_t broadcastAddress[] = {0xBC, 0xDD, 0xC2, 0x3E, 0xFB, 0x51};
// Structure to declare variable
typedef struct myStruct {
bool a;
bool b;
bool c;
bool d;
} myStruct;
// Create a myStruct object called structObj
myStruct structObj;
// Callback when data is sent
void OnDataSent(uint8_t *mac_addr, uint8_t sendStatus) {
if (sendStatus == 0){
Serial.println("Delivery success");
}
else{
Serial.println("Delivery fail");
}
}
Receiver code
void setup() {
// Init Serial Monitor
Serial.begin(115200);
pinMode(btn1, INPUT_PULLUP);
pinMode(btn2, INPUT_PULLUP);
pinMode(btn3, INPUT_PULLUP);
pinMode(btn4, INPUT_PULLUP);
// Set device as a Wi-Fi Station
WiFi.mode(WIFI_STA);
// Init ESP-NOW
if (esp_now_init() != 0) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_set_self_role(ESP_NOW_ROLE_CONTROLLER); //set role
esp_now_register_send_cb(OnDataSent); //set callback
// Register peer
esp_now_add_peer(broadcastAddress, ESP_NOW_ROLE_SLAVE, 1, NULL, 0);
}
void loop() {
delay(100);
if (digitalRead(btn1) == LOW) {
btn1State = true;
}
else{
btn1State = false;
}
if (digitalRead(btn2) == LOW) {
btn2State = true;
}
else{
btn2State = false;
}
if (digitalRead(btn3) == LOW) {
btn3State = true;
}
else{
btn3State = false;
}
if (digitalRead(btn4) == LOW) {
btn4State = true;
}
else{
btn4State = false;
}
// Set values to send
structObj.a = btn1State;
structObj.b = btn2State;
structObj.c = btn3State;
structObj.d = btn4State;
// Send message via ESP-NOW
esp_now_send(broadcastAddress, (uint8_t *) &structObj, sizeof(structObj));
}