Gérer un feu tricolore avec ESP32
publication: 30 mai 2021 / mis à jour 11 janvier 2023
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:
- LED verte connectée à G2 - fil vert
- LED jaune connectée à G21 - fil jaune
- LED rouge connectée à G17 - fil rouge
- fil noir connecté à GND
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