ESP-NOW en action
publication: 29 décembre 2025 / mis à jour 29 décembre 2025
Préparer la transmission ESP-NOW
Nous arrivons au point crucial de notre développement. Pour tester la transmisssion ESP-NOW, il faut:
- deux cartes ESP32 connectées chacune à une prise USB de notre PC;
- tous les fichiers de notre projet ont été installés dans l'espace /spiffs/ de chaque carte ESP32;
- chaque carte est accessible au travers de sa fenêtre de terminal.
Voici notre première fenêtre de terminal ouverte:

Ici, notre fenêtre est connectée au port série COM3.
Pour ouvrir l'autre fenêtre:
- cliquer sur file dans la barre de menu
- sélectionner new connection
- la fenêtre pop-up propose d'ouvrir une autre fenêtre de terminal via un autre port série. Cliquez sur OK
A partir de là, pour charger le code contenu dans le fichier /spiffs/main.fs, on tape MAIN. Ce mot est pré-implanté dans la toute dernière version
ESP32forth v7.0.7.21a. Sinon, voici sa définition:
: MAIN
s" /spiffs/main.fs" included
;
L'exécution de MAIN charge le code contenu dans notre fichier main.fs, lequel doit être considéré comme le
tronc principal de notre projet.
Dans notre projet, le fichier main.fs contient les appels aux autres composants du projet. Pour comprendre le projet, il suffit de
regarder le contenu de chacun de ces fichiers. Si on éteint noter carte ESP32, puis qu'on la remet sous tension et qu'on se reconnecte,
tous les fichiers dans l'espace /spiffs/ seront toujours disponibles. En retapant MAIN, tous les fichiers sont chargés
et leur code exécuté ou compilé en moins d'une seconde.
Pour modifier le contenu d'un fichier dans l'espace /spiffs/:
- ouvrir le code source, par exemple config.fs, avec l'éditeur texte de votre choix;
- modifier le code source et sauvegarder le fichier sur votre PC
- copier le code compris entre
RECORDFILEet<EOF>et coller cette partie de code dans la fenêtre de terminal. Si vous copiez par exemple la partie de code incluantRECORDFILE /spiffs/config.fsjusqu'à<EOF>, ce nouveau code remplace celui précédemment installé dans l'espace /spiffs/.
L'espace de stockage /spiffs/ peut contenir énormément de fichiers, dans la limite de 2Mo d'espace de stockage!
Lancer une séquence de test
Le fait de taper MAIN, dans notre projet charge du code source en FORTH, les paramètres nécessaires, le fichier de test.
Dans notre fenêtre de terminal, on exécute la séquence FORTH page main. La fenêtre affiche maintenant ceci:

Ceci résulte de l'exécution de ce code contenu dans le fichier tests-MASTER.fs:
myMac .mac cr ." - - - - " cr ." MASTER: " MASTER .mac cr ." SLAVE1: " SLAVE1 .mac cr ." SLAVE2: " SLAVE2 .mac cr
La fenêtre de terminal est maintenant nommée MASTER. Ceci résulte de cette portion de code contenue dans config.fs:
myMac 6 MASTER 6 str= [IF] \ peers for MASTER
SLAVE1 espnowAddPeer
SLAVE2 espnowAddPeer
s" MASTER" set-title
[THEN]
C'est la séquence FORTH s" MASTER" set-title qui renomme notre fenêtre de terminal.
Procédons de la même manière pour la seconde fenêtre de terminal, en tapant page main:

Nous avons devant nous deux fenêtres de terminal, chacune en liaison avec sa carte ESP32. La fenêtre de droite est titrée SLAVE1.
Mettez le curseur dans la fenêtre MASTER. Puis tapez testTrans dont voici le code:
: testTrans SLAVE1 s" TEST TRANSMISSION VERS SLAVE1" espnowSend ;
Le mot testTrans envoie la chaine de caractère TEST TRANSMISSION VERS SLAVE1 via ESP-NOW à la carte titrée SLAVE1:

Voici le code FORTH traité en callback par l'interuption gérée par ESP-NOW sur cette carte SLAVE1:
: mon-cb-espnow { len dataAddr macAddr -- }
cr ." --- ESP-NOW RECU ---"
cr ." Longueur : " len .
cr ." Datas : " dataAddr .
cr ." Source MAC : " macAddr .mac
cr ." -------------------"
cr ." Msg : " dataAddr len type
;
\ Enregistrement du callback
' mon-cb-espnow espnowRegisterRecv
C'est l'interruption ESP-NOW qui passe les paramètres len dataAddr macAddr au mot mon-cb-espnow.
Ces paramètres sont traités comme variables locales, ce qui simplifie la compréhension du code Forth.
Dans l'article suivant, nous verrons comment interfacer notre interruption ESP-NOW à la partie applicative d'un code FORTH quelconque.
Spoiler: la technique utilisée pour l'interfaçage applicatif est infiniment plus simple que ce qui se fait en langage C.
Legal: site web personnel sans commerce / personal site without seling
