Mendapatkan informasi MAC Address ESP Penerima
//Mendapatkan MAC Address 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(){
}
ESP Pengirim Data
#include <esp_now.h>
#include <WiFi.h>
// Ganti dengan MAC penerima
uint8_t broadcastAddress[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
// ID harus unik
const int id = 1;
// struktur untuk pengiriman data harus sama dengan struktur pada penerima
typedef struct struct_message {
int id;
int x;
int y;
} struct_message;
struct_message myData;
// callback saat data dikirim
void OnDataSent(const uint8_t *mac_addr, esp_now_send_status_t status) {
Serial.print("\r\nStatus pengiriman sebelumnya:\t");
Serial.println(status == ESP_NOW_SEND_SUCCESS ? "Sukses" : "Gagal");
}
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;
}
// registrasi ke penerima dan cek status paket
esp_now_register_send_cb(OnDataSent);
// Registrasi peer
esp_now_peer_info_t peerInfo;
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
// Menambahkan diri peer
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Gagal menambahkan diri ke peer");
return;
}
}
void loop() {
// Nilai untuk dikirim
myData.id = 1;
myData.x = random(0,50);
myData.y = random(0,50);
// Kirim pesan
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &myData, sizeof(myData));
if (result == ESP_OK) {
Serial.println("Terkirim dengan sukses");
}
else {
Serial.println("Gagal mengirim data");
}
delay(10000);
}
ESP Penerima data
#include <esp_now.h>
#include <WiFi.h>
// struktur untuk pengiriman data harus sama dengan struktur pada penerima
typedef struct struct_message {
int id;
int x;
int y;
}struct_message;
struct_message myData;
// Membuat struktur untuk tiap board
struct_message board1;
struct_message board2;
struct_message board3;
struct_message boardsStruct[3] = {board1, board2, board3};
// callback saat data diterima
void OnDataRecv(const uint8_t * mac_addr, const uint8_t *incomingData, int len) {
char macStr[18];
Serial.print("Paket diterima dari: ");
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.println(macStr);
memcpy(&myData, incomingData, sizeof(myData));
Serial.printf("Board ID %u: %u bytes\n", myData.id, len);
// Update the structures with the new incoming data
boardsStruct[myData.id-1].x = myData.x;
boardsStruct[myData.id-1].y = myData.y;
Serial.printf("x value: %d \n", boardsStruct[myData.id-1].x);
Serial.printf("y value: %d \n", boardsStruct[myData.id-1].y);
Serial.println();
}
void setup() {
Serial.begin(115200);
WiFi.mode(WIFI_STA);
//Init ESP-NOW
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
//daftrakan callback
esp_now_register_recv_cb(OnDataRecv);
}
void loop() {
// Mengakses data dari setiap board
/*
int board1X = boardsStruct[0].x;
int board1Y = boardsStruct[0].y;
int board2X = boardsStruct[1].x;
int board2Y = boardsStruct[1].y;
int board3X = boardsStruct[2].x;
int board3Y = boardsStruct[2].y;
*/
delay(1000);
}
Sumber: https://randomnerdtutorials.com/esp-now-many-to-one-esp32/