Les mots ESP-NOW
publication: 28 décembre 2025 / mis à jour 28 décembre 2025
Liste des mots ESP-NOW
esp_now_init esp_now_deinit esp_now_get_version esp_now_send esp_now_register_recv_cb esp_now_unregister_recv_cb esp_now_register_send_cb esp_now_unregister_send_cb esp_now_add_peer esp_now_del_peer esp_now_mod_peer esp_now_is_peer_exist esp_now_get_peer_num esp_now_set_pmk espnow-builtins ESP_NOW_MAX_DATA_LEN ESP_NOW_MAX_ENCRYPT_PEER_NUM ESP_NOW_MAX_TOTAL_PEER_NUM ESP_NOW_KEY_LEN ESP_NOW_ETH_ALEN
Dans la suite de l'article, nous n'aborderons que les mots essentiels permettant la gestion de transmissions ESP-NOW entre deux cartes ESP32 ou plus.
Le code source développé dans cet article est disponible ici:
github.com/MPETREMANN11/ESP32forth/blob/main/espnow/espnow.fs
esp_now_init ( -- fl )
Le mot esp_now_init est utilisé pour initialiser le protocole de communication ESP-NOW avec ESP32Forth.
Le mot esp_now_init doit être appelé avant d'utiliser d'autres mots ESP-NOW, telles que esp_now_add_peer
ou esp_now_send.
Le mot esp_now_init ne prend aucun argument et retourne une valeur entière. Si l'exécution réussit, retourne 0.
Si la fonction échoue, retourne un code d'erreur.
Pour simplifier l'accès à esp_now_init, on l'intègre au mot espnowInit qui restera accessible depuis le vocabulaire FORTH:
also espnow 0 constant ESP_OK -1 constant ESP_FAIL \ Initialize ESPNOW : espnowInit ( -- ) wifi-init esp_now_init ESP_OK <> \ 0 for success if ." ESP-NOW init failed" cr -1 throw then ." ESP-NOW init success" cr ;
esp_now_register_recv_cb ( xtAddr -- fl )
Le mot esp_now_register_recv_cb est essentiel dans le protocole ESP-NOW. Il sert à enregistrer une
fonction de rappel (callback) qui s'exécutera automatiquement chaque fois que votre module reçoit un paquet de données.
Il est initialisé avec le code d'exécution d'un mot FORTH.
Pour simplifier l'accès à esp_now_register_recv_cb, on l'intègre au mot espnowRegisterRecv qui restera
accessible depuis le vocabulaire FORTH:
\ Register receive callback : espnowRegisterRecv ( callback -- ) esp_now_register_recv_cb ESP_OK <> \ 0 for success if cr ." ESP-NOW esp_now_register_recv_cb failed" -1 throw then ;
Exemple:
: testReception ( -- )
cr ." ESP6NOW receiving"
;
' testReception espnowRegisterRecv
A chaque réception d'une trame sur la carte réceptrice, le mot testReception sera exécuté.
esp_now_add_peer ( addr-mac -- fl )
Le mot esp_now_add_peer est l'étape indispensable pour établir une communication ciblée avec une autre carte ESP32.
Ce mot permet d'enregistrer un appareil distant (un "pair" ou "peer") dans la mémoire de votre module. Sans cette étape, votre module ne peut pas envoyer de données à une adresse MAC spécifique.
Pour simplifier l'accès à esp_now_add_peer, on l'intègre au mot espnowAddPeer qui restera
accessible depuis le vocabulaire FORTH:
\ add peer to peer list \ ex: SLAVE1 add-peer : espnowAddPeer ( peer-addr -- ) peer-exist? esp_now_add_peer ESP_OK <> \ 0 for success if cr ." ESP-NOW add_peer failed" -1 throw then ;
Exemple:
$EC $62 $60 $9C $76 $30 define-mac-address: MASTER
$08 $3A $F2 $6E $1E $F8 define-mac-address: SLAVE1
$EC $62 $60 $9C $A9 $50 define-mac-address: SLAVE2
myMac 6 MASTER 6 str= [IF] \ peers for MASTER
SLAVE1 espnowAddPeer
SLAVE2 espnowAddPeer
s" MASTER" set-title
[THEN]
esp_now_send ( addr-mac dataAddr len -- fl )
Le mot esp_now_send est le moteur qui permet d'expédier vos données vers un ou
plusieurs destinataires via le protocole ESP-NOW. Voici ce qu'il faut retenir de son fonctionnement:
- Rôle : il transmet un paquet de données (jusqu'à 250 octets maximum) à un module distant;
- Destinataires :
- Unicast : en spécifiant l'adresse MAC d'un pair précis;
- Broadcast : en passant l'adresse NULL (ou l'adresse FF:FF:FF:FF:FF:FF), le message est envoyé à tous les appareils à portée.
- Asynchronisme : le mot se contente de mettre le message dans la file d'attente d'envoi. Il retourne une confirmation immédiate que l'envoi est initié, mais ne garantit pas la réception.
\ send datas to peer : espnowSend ( peerAddr myData len -- ) esp_now_send ?dup ESP_OK <> \ 0 for success if cr ." ESP-NOW esp_now_send failed" ." error: " . -1 throw then ;
Exemple:
: ttrans
SLAVE1 s" TEST TRANSMISSION VERS SLAVE1" espnowSend
;
: tvl
SLAVE1 s" PAGE VLIST" espnowSend
;
Chronologie des actions en émission et réception
Nous venons de voir les mots essentiels permettant de gérer les actions en émission et en réception.
L'ordre des opérations à réaliser, tant coté émetteur que récepteur sont les suivantes:
- définition de chaque pair du réseau avec le mot
define-mac-address:; - initialisation du WiFi sur chaque carte du réseau ESP-NOW, en exécutant
wifi-init 100 ms. La temporisation100 msest nécessaire pour permettre à l'interface WiFi de s'initialiser correctement; - initialisation de ESP-NOW en exécutant
espnowInit - enregistrement des pairs avec le mot
espnowAddPeer;
Coté récepteur on indique le mot FORTH à exécuter si on reçoit un signal, avec le mot espnowRegisterRecv,
précédé du code d'exécution de ce mot FORTH à exécuter.
Si vous souhatez gérer un dialogue bidirectionnel, il faudra initialiser la réception sur chaque carte avec le code adapté.
Dans notre projet, nous retrouvons cette séquence de chargement des fichiers:
needs /spiffs/oled128x32-display.fs needs /spiffs/datas-structs.fs needs /spiffs/mac-address.fs needs /spiffs/espnow.fs needs /spiffs/config.fs \ needs /spiffs/tests.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] myMac 6 SLAVE2 6 str= [IF] \ peers for SLAV2 needs tests-SLAVE2.fs [THEN]
La première ligne needs /spiffs/oled128x32-display.fs n'est nécessaire que si on souhaite exploiter un afficheur OLED.
Elle peut être supprimée ou mise en commentaire.
Avec la seconde ligne, on charge la structure des données nécessaires à notre projet ESP-NOW.
Dans la troisième ligne, on gère les adresses MAC.
Avec la ligne needs /spiffs/espnow.fs, on charge les mots essentiels à l'initialisation de ESP-NOW et
la gestion de la transmission.
La ligne suivante needs /spiffs/config.fs gère la configuration propre à notre projet. C'est dans le fichier
config.fs que sont décrits les pairs nécessaires.
Legal: site web personnel sans commerce / personal site without seling
