Autres articles / Other articles

Introduction à ESP-NOW

publication: 27 décembre 2025 / mis à jour 27 décembre 2025

Read this page in english

 


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.

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.

Pour communiquer avec ESP-NOW, il faut au moins deux cartes ESP32:

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:

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