Introduction à ESP-NOW
publication: 27 décembre 2025 / mis à jour 27 décembre 2025
ESP-NOW est un protocole de communication sans connexion développé par Espressif qui propose des fonctionnalités courtes de transmission par paquets. Ce protocole permet à plusieurs appareils de communiquer facilement entre eux. Il est conçu pour une communication efficace et à faible latence entre les appareils, capable d'envoyer jusqu'à 250 octets.
Vue d'ensemble
ESP-NOW est une sorte de protocole de communication Wi-Fi sans connexion défini par Espressif. Dans ESP-NOW, les données de l'application sont encapsulées dans une trame d'action spécifique au fournisseur, puis transmises d'un appareil Wi-Fi à un autre sans connexion.
CTR avec le protocole CBC-MAC (CCMP) est utilisé pour protéger le cadre d'action pour des raisons de sécurité. ESP-NOW est largement utilisé dans l'éclairage intelligent, la télécommande, les capteurs, etc.
Sécurité
ESP-NOW utilise la méthode CCMP, décrite dans la norme IEEE Std. 802.11-2012, pour protéger le cadre d'action spécifique au fournisseur. Le périphérique Wi-Fi conserve une clé principale primaire (PMK) et plusieurs clés principales locales (LMK). Les longueurs de PMK et LMk sont de 16 octets.
- PMK est utilisé pour chiffrer LMK avec l'algorithme AES-128. Appelez
esp_now_set_pmkpour définir PMK. Si PMK n'est pas défini, un PMK par défaut sera utilisé. - LMK de l'appareil associé est utilisé pour chiffrer le cadre d'action spécifique au fournisseur avec la méthode CCMP. Le nombre maximum de LMK différents est de six. Si le LMK de l'appareil couplé n'est pas défini, le cadre d'action spécifique au fournisseur ne sera pas chiffré.
Le cryptage du cadre d'action spécifique au fournisseur en multidiffusion n'est pas pris en charge.
Simplicité
Chaque carte utilisant ESP-NOW est un noeud. Avec ESP-NOW, les noeuds n'ont pas besoin de se connecter à un routeur WiFi.

- une carte émettrice, que nous identifierons par MASTER;
- une carte réceptrice, que nous identifierons par SLAVE1.
Dans la réalité, il n'y a pas de sens privilégié. Dans le réseau ESP-NOW, n'importe quelle carte peut émettre vers n'importe quelle autre carte ESP32. La seule contrainte est que chaque carte doit connaitre l'adresse MAC de la carte destinataire du message à transmettre.
Un projet ESP32 qui utilise ESP-NOW
Nous allons aborder l'utilisation du protocole de communication ESP-NOW au travers d'un projet. Les codes sources de ce projet
sont accessibles ici:
github.com/MPETREMANN11/ESP32forth/tree/main/espnow
Le contenu de chaque fichier sera détaillé au fil des articles qui suivent.
Les pré-requis de notre projet ESP-NOW
Pour utiliser ESP-NOW, il faut compiler une version ESP32Forth en intégrant le contenu de ce fichier: github.com/MPETREMANN11/ESP32forth/blob/main/ESP32forth70721a/optional/espnow-voc.h
Il faut également intégrer RECORDFILE. C'est ce qui est rélisé dans cette version adaptée de ESP32Forth:
github.com/MPETREMANN11/ESP32forth/blob/main/ESP32forth70721a/ESP32forth70721a.ino
Prenons le cas du contenu du fichier config.fs, dont voici un extrait:
RECORDFILE /spiffs/config.fs $EC $62 $60 $9C $76 $30 define-mac-address: MASTER $08 $3A $F2 $6E $1E $F8 define-mac-address: SLAVE1 wifi-init 100 ms getMyMac espnowInit myMac 6 MASTER 6 str= [IF] \ peers for MASTER SLAVE1 add-peer SLAVE2 add-peer s" MASTER" set-title [THEN] myMac 6 SLAVE1 6 str= [IF] \ peers for SLAV1 MASTER add-peer SLAVE2 add-peer s" SLAVE1" set-title [THEN] <EOF>
Intéressons-nous à la première ligne RECORDFILE /spiffs/config.fs.
Quand ESP32Forth interprète cette ligne de code, il crée le fichier config.fs dans l'espace de fichiers sfiffs sur la carte ESP32.
Puis RECORFILE enregistre chaque ligne de code dans ce fichier /spiffs/config.fs jusqu'à la ligne
contenant <EOF>. La création et l'enregistrement du fichier /spiffs/config.fs s'effectue en faisant un simple copié/collé du code
source entre votre éditeur de code FORTH, depuis votre PC, vers le terminal connecté à la carte ESP32 et exécutant ESP32Forth.
Au démarrage de ESP32Forth, pour exécuter le contenu du fichier /spiffs/config.fs, il faudra lancer needs /spiffs/config.fs.
C'est ce qui est réalisé depuis le fichier /spiffs/main.fs:
RECORDFILE /spiffs/main.fs DEFINED? --espnow [if] forget --espnow [then] create --espnow needs /spiffs/oled128x32-display.fs needs /spiffs/datas-structs.fs needs /spiffs/mac-address.fs needs /spiffs/espnow.fs needs /spiffs/config.fs myMac 6 MASTER 6 str= [IF] \ peers for MASTER needs tests-MASTER.fs [THEN] myMac 6 SLAVE1 6 str= [IF] \ peers for SLAV1 needs tests-SLAVE1.fs [THEN] <EOF>
En exécutant un include /spiffs/main.fs, on charge le contenu de tous les autres fichiers cités dans main.fs.
Ce chargement est extrêmement rapide. Seule condition: tous les fichiers cités dans main.fs doivent être préalablement
écrits dans l'espace /spiffs/ par copié/collé du contenu de chaque fichier source. Pour que le contenu de mac-address.fs,
il faut copier/coller le contenu du fichier source mac-address.fs.
Ordre des opérations:
- ouvrir l'accès à la première carte ESP32 depuis le terminal ouvert sur le PC;
- ouvrir un fichier source du projet avec l'éditeur texte de votre choix;
- depuis cet éditeur, copier le code source entre
RECORDILEet<EOF>inclus; - aller dans la fenêtre du terminal et copier ce code;
- depuis le terminal, vérifier que le fichier a été bien enregistré dans l'espace /spiffs/
avec
ls /spiffs/; - procéder de même pour la seconde carte ESP32...
ATTENTION: les fichiers sources du projet, ainsi que leur contenu, sont scusceptibles d'évoluer sans préavis.
De même, certains paramètres doivent être adaptés à votre matériel, comme les adresses MAC par exemple, décrites dans config.fs
Legal: site web personnel sans commerce / personal site without seling
