il me semble (simple impression, je n'utilise pas) que le protocole ESPNow d'ESpressif établt des liaisons entre ESP définis par leurs adresses MAC connues et constantes, adresses qui servent à identifier les 'partenaires'
Postez le code de réception. On parle dans le vide là car on ne sait pas ce que vous faites
Le callback appelé lors d’un message espNow vous donne déjà un tableau et sa taille pour le payload - il suffit de faire un memcpy() dans votre tableau destination
voici une partie du code, le reste n'a rien a voir avec le problème.
Donc le but est que l'adresse Mac reçue de l'autre appareil (via mac0-mac5) soit utilisée automatiquement pour remplacer la broadcastaddress.
uint8_t broadcastAddress[] = {0x11, 0x22, 0x33, 0x44, 0x55, 0x66};
typedef struct struct_message {
int a;
int b;
int c;
int d;
int e;
int f;
int g;
int h;
int i;
int j;
int k;
int l;
int m;
int n;
int o;
int p;
} struct_message;
// a envoyer
struct_message afstandsbediening;
// recues
struct_message pool;
esp_now_peer_info_t peerInfo;
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");
if (status ==0){
success = "Delivery Success :)";
}
else{
success = "Delivery Fail :(";
}
}
void OnDataRecv(const uint8_t * mac, const uint8_t *incomingData, int len) {
char macStr[18];
snprintf(macStr, sizeof(macStr), "%02x:%02x:%02x:%02x:%02x:%02x",
mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
Serial.print("Last Packet Recv from: "); Serial.println(macStr);
Serial.print("Last Packet Recv Data: "); Serial.println(*incomingData);
Serial.println("");
lucht = pool.a;
water = pool.b;
ph = pool.c;
rx = pool.d;
error = pool.e;
modus = pool.f;
leds = pool.g;
rolluik = pool.h;
solar = pool.i;
snelheid = pool.j;
mac0=mac[0];
mac1=mac[1];
mac2=mac[2];
mac3=mac[3];
mac4=mac[4];
mac5=mac[5];
}
void setup() {
WiFi.mode(WIFI_STA);
Serial.begin(115200);
esp_wifi_set_mac(WIFI_IF_STA, &newMACAddress[0]);
if (esp_now_init() != ESP_OK) {
Serial.println("Error initializing ESP-NOW");
return;
}
esp_now_register_send_cb(OnDataSent);
memcpy(peerInfo.peer_addr, broadcastAddress, 6);
peerInfo.channel = 0;
peerInfo.encrypt = false;
if (esp_now_add_peer(&peerInfo) != ESP_OK){
Serial.println("Failed to add peer");
return;
}
esp_now_register_recv_cb(OnDataRecv);
void loop() {
afstandsbediening.a = modus;
afstandsbediening.b = leds;
afstandsbediening.j = snelheid;
esp_err_t result = esp_now_send(broadcastAddress, (uint8_t *) &afstandsbediening, sizeof(afstandsbediening));
if (result == ESP_OK) {
Serial.println("Sent with success");
}
else {
Serial.println("Error sending the data");
}
}
Que le nombre s'affiche en décimal, en héxadécimal ou en binaire cela reste le même nombre c'est juste une représentation à l'affichage. En interne le CPU ne gère de toutes les façons que du binaire.
Si tu veux afficher les valeurs en hexadécimal, remplace
selon moi il suffirait de rentrer 6 int dans
uint8_t broadcastAddress = {0x11, 0X22, 0x33, 0x44, 0x55, 0x66};
afin d'éviter de devoir les entrer en manuel et surtout de devoir les changer a chaque appareil.
du style
int a;
int b;
int c;
int d;
int e;
int f;
uint8_t broadcastAddress = {a, b, c, d, e, f};