🛠 Communication inter-cartes avec ESP-NOW

Arduino Nano ESP32 · avance · Schéma : IMG-nano-esp32-avance-3-nanoesp32-esp-now.svg — Deux Nano ESP32 échangeant des trames ESP-NOW en direct, sans routeur intermédiaire.

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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels