ESP-NOW on 8266 with many to one setup

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));

}

Format your code and put it in a code block...

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));
}

what happens ? does the receiver receive any information? do the relays operate?

the transmitter can use the multicast address

uint8_t broadcastAddress[] = {0xFF, 0xFF,0xFF,0xFF,0xFF,0xFF};

When messages are sent to this MAC address all ESP-NOW devices in range receive this message.

what is the distance between nodes? you may require ESP_MESH?

if your transmitter is transmitting to multiple receivers your structure would require a nodeID element to identify the target

if you have two transmitters you will require some protocol to decide which has priority and can transit at any instant otherwise you may get collisions

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.