Erreur EspNOW - Recepteur

Je ne comprends pas le problème ici, merci à ceux qui prendront le temps de me répondre/me donner une solution

// Inclure les librairies
#include <esp_now.h>
#include <WiFi.h>

float maValeurRecue;

void quand_donnees_Recues(const uint8_t *mac, const uint8_t *data_reception, int taille) {
  memcpy(&maValeurRecue, data_reception, sizeof(maValeurRecue));
  Serial.print("Bytes received: ");
  Serial.println(taille);
  Serial.print("valeur reçue: ");
  Serial.println(maValeurRecue);
  Serial.println();
}
 
void setup() {
  Serial.begin(1200);
  WiFi.mode(WIFI_STA);
  if (esp_now_init() != ESP_OK) {
    Serial.println("Erreur d'initialisation ESP-NOW");
    return;
  }

  // Une erreur s'affiche ici
  esp_now_register_recv_cb(quand_donnees_Recues);
  
}
 
void loop() {
  
}
Compilation error: invalid conversion from 'void ()(const uint8_t, const uint8_t*, int)' {aka 'void ()(const unsigned char, const unsigned char*, int)'} to 'esp_now_recv_cb_t' {aka 'void ()(const esp_now_recv_info, const unsigned char*, int)'} [-fpermissive]

Depuis une mise à jour de la librairie ESP-NOW (début 2024), on doit maintenant utiliser esp_now_recv_info_t * comme premier paramètre.

Essayes ça:

void quand_donnees_Recues(const esp_now_recv_info_t *recvInfo, const uint8_t *data_reception, int taille) {
  memcpy(&maValeurRecue, data_reception, sizeof(maValeurRecue));

  // Récupère l'adresse MAC à partir de recvInfo
  char macStr[18];
  snprintf(macStr, sizeof(macStr), "%02X:%02X:%02X:%02X:%02X:%02X",
           recvInfo->src_addr[0], recvInfo->src_addr[1], recvInfo->src_addr[2],
           recvInfo->src_addr[3], recvInfo->src_addr[4], recvInfo->src_addr[5]);

  Serial.print("Données reçues de : ");
  Serial.println(macStr);
  Serial.print("Bytes reçus : ");
  Serial.println(taille);
  Serial.print("Valeur reçue : ");
  Serial.println(maValeurRecue);
  Serial.println();
}
1 Like

Merci ça à marcher !
Tous les tutos que je trouvais utilisaient l'ancienne version @axelmaux

​La modification de la signature de la fonction de rappel esp_now_register_recv_cb() a été introduite avec la version 3.x du ESP32 Arduino Core, publiée en novembre 2023. Cette mise à jour aligne l'API Arduino sur l'ESP-IDF (le framework officiel d'Espressif), en remplaçant le paramètre const uint8_t *mac_addr par un pointeur vers une structure esp_now_recv_info_t.

Détails de la mise à jour

  • Ancienne signature (jusqu'à la version 2.x) :
void onDataRecv(const uint8_t *mac_addr, const uint8_t *data, int data_len);

  • Nouvelle signature (à partir de la version 3.x) :
void onDataRecv(const esp_now_recv_info_t *recvInfo, const uint8_t *data, int data_len);

Cette modification permet d'accéder à des informations supplémentaires, telles que l'adresse MAC source (recvInfo->src_addr) et d'autres métadonnées.

1 Like

@akyles_arduino de rien :slight_smile: j'ai eu le même soucis il y a pas longtemps.