🛠 Communication inter-cartes avec ESP-NOW
Objectifs
Faire communiquer deux Nano ESP32 en ESP-NOW : radio pair-à-pair sans routeur ni appairage, trames jusqu'à 250 octets. Un émetteur diffuse un compteur, un récepteur l'affiche — la base d'un réseau de capteurs autonomes.
Matériel
- 2 × Arduino Nano ESP32 + 2 câbles USB-C
- Les deux cartes sur le même canal Wi-Fi (canal 0 = canal courant)
Code complet
// Émetteur (diffusion). Côté récepteur, décommenter la callback et son
// enregistrement dans setup.
#include <WiFi.h>
#include <esp_now.h>
uint8_t broadcast[] = {0xFF, 0xFF, 0xFF, 0xFF, 0xFF, 0xFF};
uint32_t n = 0;
// void onRecu(const uint8_t* src, esp_now_recv_info_t* info,
// const uint8_t* data, int8_t len) {
// Serial.printf("reçu %.*s\n", len, data);
// }
void setup {
Serial.begin(115200);
WiFi.mode(WIFI_STA); // ESP-NOW exige STA, sans connexion AP
if (esp_now_init != ESP_OK) { Serial.println("ESP-NOW KO"); while (1); }
// Récepteur : esp_now_register_recv_cb(onRecu);
esp_now_peer_info_t peer = {};
memcpy(peer.peer_addr, broadcast, 6);
peer.channel = 0; // 0 = canal courant
peer.encrypt = false;
esp_now_add_peer(&peer);
}
void loop {
char msg[32];
int len = snprintf(msg, sizeof msg, "hello #%lu", (unsigned long)n++);
esp_now_send(broadcast, (uint8_t*)msg, len);
Serial.println(msg);
delay(1000);
}
Vérification attendue
Le moniteur série du récepteur affiche « hello #0 », « hello #1 »… chaque seconde, sans aucun routeur. L'échange est direct entre les deux cartes, portée largement supérieure à celle d'un point d'accès lointain.
Erreurs fréquentes
- WiFi.mode(WIFI_STA) oublié, ou connexion à un AP sur un autre canal : les trames ne partent pas.
- Payload supérieur à 250 octets : esp_now_send échoue silencieusement.
- Callback de réception non enregistrée : l'émetteur envoie, le récepteur n'affiche rien.
- Melange des cores : le package « Arduino ESP32 Boards » documente ESP-NOW ; avec le core Espressif, les signatures de callback diffèrent.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino