Gérer un feu tricolore avec ESP32

publication: 30 mai 2021 / mis à jour 11 janvier 2023

Read this page in english

 


Appel à collaboration

Vous développez des montages, simples ou complexes avec ESP32 et ESP32forth.

Partagez-les ici sur ce site.

ESP32forth ne pourra se développer qu'avec la collaboration active de toutes les bonnes volontés.

Vos montages peuvent aider d'autres développeurs.

Les montages des autres développeurs peuvent vous aider.

Pour proposer un article ou un montage, cliquez ici


Les ports GPIO sur la carte ESP32

Les ports GPIO (anglais : General Purpose Input/Output, littéralement Entrée-sortie à usage général) sont des ports d'entrées-sorties très utilisés dans le monde des microcontrôleurs

La puce ESP32 est livrée avec 48 broches ayant multiples fonctions. Toutes les broches ne sont pas exploitées sur les cartes de développement ESP32, et certaines broches ne peuvent pas être utilisées.

Il y a de nombreuses questions sur la façon d'utiliser les GPIO ESP32. Quels connecteurs devriez-vous utiliser? Quels connecteurs devriez-vous éviter d'utiliser dans vos projets?

Si on regarde à la loupe une carte ESP32, on voit ceci:

Chaque connecteur est identifié par une série de lettres et chiffres, ici de gauche à droite sur notre photo: G22 TXD RXD G21 GND G19 G18, etc...

Les connecteurs qui nous intéressent pour cette prise en main sont préfixés par la lettre G suivis de un ou deux chiffres. Par exemple, G2 correspond à GPIO 2.

La définition et l'exploitation en mode sortie d'un connecteur GPIO est assez simple.

Montage des LEDs

Le montage est assez simple et une seule photo suffit:

Notre code utilise le mot include suivi du fichier à charger. Pour comprendre l'édition des fichiers dans le dossier système spiffs, voir:
  Visual editor: édition des fichiers sources dans ESP32forth

On définit nos LEDs avec defPin:

DEFINED? defPIN: invert 
    [if] include /spiffs/defpin.txt [then] 
\ Use: 
\ numGPIO defPIN: PD7  ( define portD pin #7) 
 
 2 defPIN: ledGREEN 
21 defPIN: ledYELLOW 
17 defPIN: ledRED 
 
: LEDinit 
    ledGREEN    output pinMode 
    ledYELLOW   output pinMode 
    ledRED      output pinMode 
    ; 

Beaucoup de programmeurs ont la mauvaise habitude de nommer les connecteurs par leur numéro. Exemple 17 defPin: pin17 ou 17 defPin: GPIO17. Pour être efficace, il faut nommer les connecteurs par leur fonction. Ici on définit les connecteurs ledRED ou ledGREEN.

Pourquoi?

Parce que le jour où vous avez besoin de rajouter des accessoires et libérer par exemple le connecteur G21, il suffit de redéfinir 21 defPIN: ledYELLOW avec le nouveau numéro de connecteur. Le reste du code sera inchangé et exploitable.

Gestion des feux tricolores

Et voici la partie de code qui fonctionnait déjà sur notre carte ARDUINO NANO:

\ traficLights execute one light cycle 
: trafficLights ( ---) 
    high ledGREEN   pin     3000 ms    low ledGREEN   pin 
    high ledYELLOW  pin      800 ms    low ledYELLOW  pin 
    high ledRED     pin     3000 ms    low ledRED     pin 
    ; 
 
\ classic traffic lights loop 
: lightsLoop ( ---) 
    LEDinit 
    begin 
        trafficLights 
    key? until 
    ; 
 
\ german trafic light style 
: Dtraffic ( ---) 
    high ledGREEN   pin    3000 ms    low ledGREEN   pin 
    high ledYELLOW  pin     800 ms    low ledYELLOW  pin 
    high ledRED     pin    3000 ms 
    ledYELLOW  high    800 ms 
    \ simultaneous red and yellow ON 
    high ledRED     pin  \ simultaneous red and yellow OFF 
    high ledYELLOW  pin 
    ; 
 
\ german traffic lights loop 
: DlightsLoop ( ---) 
    LEDinit 
    begin 
        Dtraffic 
    key? until 
    ; 

Sur cette vidéo, c'est la version pour ARDUINO MEGA. Mais je vous affirme que la version pour ESP32 expliquée ici fonctionne exactement de la même manière:

Conclusion

Ce programme de gestion de feux tricolores aurait parfaitement pu être écrit en langage C. Mais l'avantage du langage FORTH, c'est qu'il donne la main, via le terminal, pour analyser, débogguer et modifier très rapidement des fonctions (ici en FORTH on dit des mots).

La gestion de feux tricolores est un exercice facile en langage C. Mais quand les programmes deviennent un peu plus complexes, le processus de compilation et téléversement s'avère rapidement fastidieux.

Ici, il suffit d'agir via le terminal et de faire un simple copié/collé de n'importe quel fragment de code en langage FORTH pour qu'il soit compilé et/ou exécuté.

Si vous utilisez un programme terminal pour communiquer avec la carte ESP32, tapez simplement DlightsLoop ou lightsLoop pour tester le fonctionnement du programme. Ces mots utilisent une boucle conditionnelle. Il suffit de taper sur une touche du clavier pour que le mot cesse de s'exécuter en fin de boucle.

Voilà. J'espère que ce nouvel exemple vous donnera l'envie de vous intéresser davantage au langage FORTH. Vos questions sont bienvenues via ce lien: me contacter


Legal: site web personnel sans commerce / personal site without seling