
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/