🛠 Communication inter-cartes avec ESP-NOW
Objetivos
Hacer que dos Nano ESP32 se comuniquen mediante ESP-NOW: radio punto a punto sin router ni emparejamiento, tramas de hasta 250 bytes. Un transmisor difunde un contador, un receptor lo muestra: la base de una red de sensores autónoma.
Material
- 2 × Arduino Nano ESP32 + 2 cables USB-C
- Las dos tarjetas en el mismo canal Wi-Fi (canal 0 = canal actual)
Código completo
// É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);
}
Verificación esperada
El monitor serie del receptor muestra « hello #0 », « hello #1 »… cada segundo, sin ningún router. El intercambio es directo entre las dos tarjetas, con un alcance muy superior al de un punto de acceso lejano.
Errores frecuentes
- Olvidar WiFi.mode(WIFI_STA), o conectarse a un AP en otro canal: las tramas no se envían.
- Payload superior a 250 bytes: esp_now_send falla silenciosamente.
- No registrar la función de callback de recepción: el transmisor envía, el receptor no muestra nada.
- Mezcla de cores: el paquete « Arduino ESP32 Boards » documenta ESP-NOW; con el core de Espressif, las firmas de las funciones de callback difieren.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
connexion-wifi.inoArduinopoint-acces.inoArduinoble-capteur.inoArduinoneoled-rgb.inoArduinoadc-12bits.inoArduinopreferences.inoArduino