// Include Libraries
#include <esp_now.h>
#include <WiFi.h>
#define DATA_PIN 32
#define RED_LED 21
#define GREEN_LED 18
#define BLUE_LED 19
// MAC Address of responder - edit as required
uint8_t broadcastAddress[] = {0xcc, 0xdb, 0xa7, 0x56, 0x6c, 0x08};
// Define a data structure
typedef struct struct_message {
int doorStatus;
} struct_message;
// Create a structured object
struct_message myData;
// Peer info
esp_now_peer_info_t peerInfo;
// Callback function called when data is sent
//void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nLast Packet Send Status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Delivery Success" : "Delivery Fail");
Serial.print(" Status =========== ");
Serial.print(ESP_NOW_SEND_SUCCESS);
}
void setup() {
Serial.begin(115200);
// Set ESP32 as a Wi-Fi Station
WiFi.begin();
WiFi.mode(WIFI_STA);
// Initilize ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Register the send callback
esp_now_register_send_cb(OnDataSent);
// Register peer
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
digitalWrite(RED_LED,HIGH);
return;
}
pinMode(DATA_PIN, INPUT);
pinMode(BLUE_LED, OUTPUT);
pinMode(GREEN_LED, OUTPUT);
pinMode(RED_LED, OUTPUT);
digitalWrite(RED_LED,LOW);
digitalWrite(GREEN_LED,LOW);
digitalWrite(BLUE_LED,LOW);
}
void loop() {
int dStatus = digitalRead(DATA_PIN);
if (dStatus == HIGH) {
Serial.print("Send success = ");
Serial.println(ESP_NOW_SEND_SUCCESS);
Serial.print("dStatus = ");
Serial.print(dStatus);
Serial.print(" ");
Serial.println("DOWN!!");
digitalWrite(RED_LED,LOW);
digitalWrite(GREEN_LED,HIGH);
digitalWrite(BLUE_LED,LOW);
} else {
Serial.print("dStatus = ");
Serial.print(dStatus);
Serial.print(" ");
Serial.println("UP!.");
digitalWrite(RED_LED,HIGH);
digitalWrite(GREEN_LED,LOW);
digitalWrite(BLUE_LED,LOW);
}
myData.doorStatus = dStatus; // to send to the responder
// Send message via ESP-NOW
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Sending confirmed");
digitalWrite(GREEN_LED,HIGH);
}
else {
Serial.println("Sending error");
digitalWrite(BLUE_LED,LOW);
}
delay(2000);
}