Autres articles / Other articles

ESP-NOW en action

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

Read this page in english

 


Préparer la transmission ESP-NOW

Nous arrivons au point crucial de notre développement. Pour tester la transmisssion ESP-NOW, il faut:

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:

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/:

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