
Mencari alamat MAC penerima
#ifdef ESP32
#include <WiFi.h>
#else
#include <ESP8266WiFi.h>
#endif
void setup(){
Serial.begin(115200);
Serial.println();
Serial.print("ESP Board MAC Address: ");
Serial.println(WiFi.macAddress());
}
void loop(){
}

Pengirim Data
#include <esp_now.h>
#include <WiFi.h>
// Ganti dengan MAC address penerima
uint8_t broadcastAddress1[] = {0x3C, 0x71, 0xBF, 0xC3, 0xBF, 0xB0};
uint8_t broadcastAddress2[] = {0x24, 0x0A, 0xC4, 0xAE, 0xAE, 0x44};
uint8_t broadcastAddress3[] = {0x80, 0x7D, 0x3A, 0x58, 0xB4, 0xB0};
typedef struct test_struct {
int x;
int y;
} test_struct;
test_struct test1;
test_struct test2;
test_struct test3;
// callback saat pengiriman data
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
char macStr[18];
Serial.print("Ditujukan : ");
// Copies the sender mac address to a string
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
mac_addr[0], mac_addr[1], mac_addr[2], mac_addr[3], mac_addr[4], mac_addr[5]);
Serial.print(macStr);
Serial.print(" status:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Sukses" : "Gagal");
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
if (esp_now_init() != ESP_OK) {
Serial.println("Gagal inisialisasi ESP-NOW");
return;
}
esp_now_register_send_cb(OnDataSent);
// pendaftaran peer
esp_now_peer_info_t peerInfo;
peerInfo.channel = 0;
peerInfo.encrypt = false;
// peer pertama
memcpy(peerInfo.peer_addr, broadcastAddress1, 6);
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal menambahkan peer");
return;
}
// peer kedua
memcpy(peerInfo.peer_addr, broadcastAddress2, 6);
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal menambahkan peer");
return;
}
/// peer ketiga
memcpy(peerInfo.peer_addr, broadcastAddress3, 6);
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal menambahkan peer");
return;
}
}
void loop() {
//masukkan data padda struktur
test1.x = random(0,20);
test1.y = random(0,20);
test2.x = random(0,20);
test2.y = random(0,20);
test3.x = random(0,20);
test3.y = random(0,20);
//kirim paket data test1 ke semua board
esp_err_t result = esp_now_send(0, (uint8_t *) &test1, sizeof(test_struct));
if (result == ESP_OK) {
Serial.println("Terkirim ke semua board");
}
else {
Serial.println("Gagal mengirim");
}
//kirim paket data test1,test2, test3 ke maing-masing board
result = esp_now_send(broadcastAddress1, (uint8_t *) &test1, sizeof(test_struct));
if (result == ESP_OK) {
Serial.println("Terkirim ke board 1");
}
else {
Serial.println("Gagal mengirim board 1");
}
result = esp_now_send(broadcastAddress2, (uint8_t *) &test2, sizeof(test_struct));
if (result == ESP_OK) {
Serial.println("Terkirim ke board 2");
}
else {
Serial.println("Gagal mengirim board 2");
}
result = esp_now_send(broadcastAddress3, (uint8_t *) &test3, sizeof(test_struct));
if (result == ESP_OK) {
Serial.println("Terkirim ke board 3");
}
else {
Serial.println("Gagal mengirim board 3");
}
delay(2000);
}
Penerima Data
#include <esp_now.h>
#include <WiFi.h>
typedef struct test_struct {
int x;
int y;
} test_struct;
test_struct myData;
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
memcpy(&myData, incomingData, sizeof(myData));
Serial.print("Bytes diterima: ");
Serial.println(len);
Serial.print("x: ");
Serial.println(myData.x);
Serial.print("y: ");
Serial.println(myData.y);
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
//Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Gagal inisialisasi ESP-NOW");
return;
}
//daftarkan callback
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
}
sumber: https://randomnerdtutorials.com/esp-now-one-to-many-esp32-esp8266/