#include <esp_now.h>
#include <WiFi.h>
constexpr byte MAC_OCTETS {6};
constexpr int CHANNEL {1};
//ESP C8:F0:9E:4D:32:1C //Master1
uint8_t receiver_mac[][MAC_OCTETS] = {
{0xC8, 0xF0, 0x9E, 0x4F, 0x99, 0x54}, //Slave1
{0x40, 0x22, 0xd8, 0x3d, 0x46, 0x00} //Slave2
};
// Create a struct for the data to send
struct DataStruct {
int randomNumber;
};
DataStruct myData;
void printMAC(const uint8_t* macAddr) {
for (int i = 0; i < MAC_OCTETS; ++i) {
char value = *(macAddr + i);
if (value < 0x10) { Serial.print(0); }
Serial.print(value, HEX);
if (i < (MAC_OCTETS-1)) { Serial.print(":"); }
}
}
// Callback function when data is sent
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
if (status == ESP_NOW_SEND_SUCCESS) {
Serial.println("Jetzt in Callback sent");
Serial.println("Erfolgreich gesendet an ");
printMAC(mac_addr);
} else {
Serial.println("Error sending the data to: ");
printMAC(mac_addr);
}
Serial.println();
}
// Callback function when data is received
void OnDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len) {
memcpy(&myData, data, sizeof(myData));
Serial.println("");
Serial.println("Jetzt in Callback received");
Serial.print("Empfangene Daten: ");
Serial.println(myData.randomNumber);
Serial.print("Letzte Daten empfangen von: ");
printMAC(mac_addr);
Serial.println();
Serial.print("Letzte Daten empfangen: ");
Serial.println(*data);
Serial.println("");
}
// config AP SSID
void configDeviceAP() {
const char *SSID = "Slave";
bool result = WiFi.softAP(SSID, "Data", CHANNEL, 0);
if (!result) {
Serial.println("AP Config failed.");
} else {
Serial.println("AP Config Success. Broadcasting with AP: " + String(SSID));
Serial.print("AP CHANNEL "); Serial.println(WiFi.channel());
}
}
// Register peer
esp_now_peer_info_t peerInfo;
void setup() {
Serial.begin(115200);
// Init ESP-NOW
WiFi.mode(WIFI_AP_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
// Once ESPNow is successfully Init, we will register for Send CB to track the status
esp_now_register_send_cb(OnDataSent);
// Registration for a callback function that WILL be called when data is received
esp_now_register_recv_cb(OnDataRecv);
// Register peer
/*esp_now_peer_info_t peerInfo;*/
memcpy(peerInfo.peer_addr, receiver_mac, MAC_OCTETS);
peerInfo.channel = CHANNEL;
peerInfo.encrypt = false;
// Add peer
if (esp_now_add_peer(&peerInfo) != ESP_OK) {
Serial.println("Failed to add peer");
return;
}
}
void loop() {
Serial.println();
for (byte i = 0; i < 2; ++i) {
Serial.print("Neue Loop: i = ");
Serial.println(i);
// Generate a random number between 1 and 100
myData.randomNumber = random(1, 101);
esp_err_t result = esp_now_send(receiver_mac[i], (uint8_t *)&myData, sizeof(myData));
if (result == ESP_OK) {
Serial.print("Gesendete Daten*: ");
Serial.println(myData.randomNumber);
} else {
Serial.print("Nicht erfolgreich Senden data an: ");
printMAC(receiver_mac[i]);
Serial.println();
}
delay(1000);
}
delay(10000);
}