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.

Voir également :