Broches E/S en sortie
Ce que l'on va faire ici
Ici, nous allons voir comment utiliser les broches GPIO en sortie avec MicroPython sur la Pi Pico
Faire clignoter la LED onboard
Pour faire clignoter la LED "onboard", les choses sont assez simples : il n'y a aucun montage à faire. Une LED est connectée sur la broche 25 de la carte.
EVITER D'UTILISER WHILE(TRUE) DANS VOS CODES MICROPYTHON !
Dans la mesure où Micropython est lui-même un firmware, un micrologiciel, qui s'exécute sur le microcontrôleur, utiliser While(True) pour faire se répéter un programme est une mauvaise idée en pratique. Cela va "bloquer" l'interpréteur et mobiliser de plus inutilement le micro-contrôleur. La carte va se mettre à ne plus réagir ou avoir des comportements inattendus.
Il est bien plus rationnel avec Micropython d'utiliser un timer qui va permettre de faire "boucler" proprement un code.
Voici par exemple la façon de faire que je déconseille fortement :
from machine import Pin # importe la classe Pin qui représente une broche
import utime # importe le module utime
led=Pin(25, Pin.OUT) # met la broche en sortie
# la broche GP25 dispose d'une LED onboard
while(True): # réalise une boucle sans fin
led.on() # allume la led
time.sleep_ms(100) # pause en millisecondes
led.off() # éteint la led
time.sleep_ms(100) # # pause en millisecondes
Cette façon de faire est à mon sens à proscrire ici !
Voici le code conseillé pour faire clignoter la LED onboard :
from machine import Pin, Timer
led=Pin(25,Pin.OUT) # la broche GP25 dispose d'une LED onboard
timer=Timer() # déclare un objet timer
def loop(timer): # fonction exécutée en boucle
led.toggle()
#print("Led toggle")
timer.init(freq=1, callback=loop)
Ceci fait clignoter la LED "onboard" de la carte toutes les secondes.
Faire clignoter une LED sur une broche de la carte
Le montage
On connecte une LED en série avec une résistance sur la broche GP15 de la carte :
Le programme
De façon tout à fait comparable à précédemment, on fera :
from machine import Pin, Timer
led=Pin(16,Pin.OUT) # broche en sortie
timer=Timer() # déclare un objet timer
def loop(timer): # fonction exécutée en boucle
led.toggle()
#print("Led toggle")
timer.init(freq=1, callback=loop)
Faire clignoter 2 LEDs à des fréquences différentes
Pour bien illustrer le principe de l'utilisation des timers, voici un programme qui montre comment on facilement faire clignoter 2 LEDs simultanément mais à des fréquences différentes. On mixe ici les 2 programmes précédent un un seul. On pose ici les bases du "multi-tâches" en quelque sorte en Micropython.
from machine import Pin, Timer
led=Pin(25,Pin.OUT) # la broche GP25 dispose d'une LED onboard
led2=Pin(16,Pin.OUT) # broche de LED
timer=Timer()
timer2=Timer()
def loop(timer):
led.toggle()
#print("Led toggle")
def loop2(timer2):
led2.toggle()
timer.init(freq=1, callback=loop)
timer2.init(freq=5, callback=loop2)
Note
Il est plus qu'intéressant de pouvoir construire un code en tâches qui s'éxécutent indépendamment les unes des autres, plutôt qu'au sein d'un code séquentiel gérer des tâches différentes.