Accueil > MICROPYTHON > MicroPython : Commande des sorties logiques (esp8266 & esp32)

MicroPython : Commande des sorties logiques (esp8266 & esp32)

lundi 20 avril 2020, par thebault


Commander une sortie logique

Le firmware Micropython ne tient pas compte des noms des broches notées sur les cartes mais de la numérotation au niveau du microprocesseur (GPIO = General Purpose Input Output).
Brochage des cartes :

Les cartes Wemos D1 mini, NodeMCU ou esp32 Devkit sont en général équipées d’une led reliée à la broche GPIO2.


Depuis la console (ou shell) ERPL accessible via la liaison série sur USB

On va importer la bibliothèque qui permet de gérer les broches puis on crée un objet brocheLed en configurant la broche GPIO 2 en sortie.
Remarque : la led s’allume lorsque la broche 2 est à 0

  1. >>> from machine import Pin
  2. >>> brocheLed = Pin(2,Pin.OUT)

Télécharger

Pour modifier l’état de sortie, on peut utiliser les méthodes on() et off() :

  1. >>> brocheLed.on()
  2. >>> brocheLed.off()

Télécharger

On peut aussi utiliser la méthode value() :

  1. >>> brocheLed.value(1)
  2. >>> brocheLed.value(0)

Télécharger


Faire clignoter la led

Pour cela, nous avons besoin d’utiliser la bibliothèque utime (ou time ) qui va nous fournir des temporisations.
Pour faire clignoter indéfiniment la led à une fréquence de 1hz, on aura l’algorithme suivant :

Tant que (1) :
   Allumer Led broche 2
   Attendre 500 ms
   Eteindre Led broche 2
   Attendre 500 ms
Fin Tant Que

Le module utime de micropython propose 3 temporisations :

instruction rôle
utime.sleep(valeur) Attendre valeur secondes
utime.sleep_ms(valeur) Attendre valeur millisecondes
utime.sleep_us(valeur) Attendre valeur microsecondes

Le programme python sera le suivant :

  1. from machine import Pin
  2. import utime
  3.  
  4. brocheLed = Pin(2,Pin.OUT)
  5.  
  6. while (True) :
  7. brocheLed.on()
  8. utime.sleep_ms(500)
  9. brocheLed.off()
  10. utime.sleep_ms(500)

Télécharger

On peut aussi utiliser la console REPL pour communiquer les informations (cependant, on va légèrement perturber le timing des tempos en prenant le temps de communiquer les infos sur la liaison série) :

  1. from machine import Pin
  2. import utime
  3.  
  4. brocheLed = Pin(2,Pin.OUT)
  5.  
  6. while (True) :
  7. brocheLed.on()
  8. print("Led éteinte")
  9. utime.sleep_ms(500)
  10. brocheLed.off()
  11. print("Led allumée")
  12. utime.sleep_ms(500)

Télécharger

Le problème du programme précédent c’est que l’on bloque le fonctionnement du microprocesseur pendant les temporisations. On peut améliorer ce programme :

  • on mesure le temps en ms au départ (start)
  • A chaque boucle, on mesure le temps en ms (instant)
  • Si 500 ms se sont écoulées :
    • on change la valeur de la variable booléenne EtatLed
    • on commande la broche GPIO 2 avec comme valeur la variable booléenne EtatLed
    • on affecte l’instant actuel à la variable start
EtatLed ← False
start ← instant en ms
Tant que (1)
   instant ← instant en ms
   Si (instant - start) >= 500
       EtatLed ← not (EtatLed)
         Mettre broche GPIO à la valeur EtatLed
         start ← instant
   Fin Si
Fin Tant Que

Ce qui donne en python :

  1. from machine import Pin
  2. import utime
  3.  
  4. brocheLed = Pin(2,Pin.OUT)
  5. EtatLed = False
  6. start = utime.ticks_ms()
  7. while (True) :
  8. instant = utime.ticks_ms()
  9. if (instant - start) >= 500 :
  10. EtatLed = not(EtatLed)
  11. print("Etat led =",EtatLed)
  12. brocheLed.value(EtatLed)
  13. start = instant

Télécharger

La biblothèque utime permet de faire automatiquement la soustraction utime.ticks_diff(ticks1,ticks2) :

  1. from machine import Pin
  2. import utime
  3.  
  4. brocheLed = Pin(2,Pin.OUT)
  5. EtatLed = False
  6. start = utime.ticks_ms()
  7. while (True) :
  8. if utime.ticks_diff(utime.ticks_ms(),start) >= 500 :
  9. EtatLed = not(EtatLed)
  10. print("Etat led =",EtatLed)
  11. brocheLed.value(EtatLed)
  12. start = utime.ticks_ms()

Télécharger

SPIP | | Plan du site | Suivre la vie du site RSS 2.0
Habillage visuel © digitalnature sous Licence GPL