Ignorer et passer au contenu

Livraison offerte à partir de 50€

Contents Menu Expand Light mode Dark mode Auto light/dark mode

Utiliser les entrées/sorties avec MicroPython sur la Pi Pico

La gestion des entrées/sorties des broches (GPIO) se fait très simplement en MicroPython grâce à l’objet Pin du module machine .Un pin signifie en anglais une broche. Pour interagir avec une pin « physique » de la carte, il faudra lui associer un objet Pin coté logiciel. Chaque broche physique sera donc représentée par une variable (plus exactement un objet) de type Pin . Il suffira d’exécuter des fonctions de type mon_pin.une_fonction() sur la broche « virtuelle » afin de modifier l’état de la broche « physique ».

Il faudra donc penser à importer ce sous-module au début de votre script Python :

from machine import Pin

Configuration des pins en entrée ou en sortie avec MicroPython

La configuration d’un pin en entrée/sortie se fait lors de la création d’un objet Pin .

Pour configurer un pin en sortie (par exemple pour la LED intégrée de la Pi Pico, on crée un objet Pin en spécifiant le numéro de la broche et son mode en sortie (OUT) :

pin_led = Pin(16, mode=Pin.OUT)

On peut si l’on souhaite, directement imposer une tension en sortie lors de la création de l’objet :

pin_led = Pin(16, mode=Pin.OUT, value=1) # 3.3V en sortie -> la led sera allumée
pin_led = Pin(16, mode=Pin.OUT, value=0) # 0V en sortie   -> la led sera eteinte

Par défaut, lors de la création d’un objet Pin, la tension en sortie réglée sur 0V, value vaut 0.

Pour configurer un pin en entrée, il suffit de changer l’option mode en entrée (IN) , lors de la création de la broche.

pin_24 = Pin(14, mode=Pin.IN)

Il est possible de préciser le type d’entrée que l’on veut avoir. On peut choisir entre une entrée avec une résistance de pullup, une résistance de pulldown ou sans résistance de tirage. Si ces termes ne vous sont pas familiers, je vous encourage à consulter ultérieurement le fonctionnement et l’utilité des résistances de tirage (pullup, pulldown). On utilise l’argument optionnel pull qui permet de choisir le type de résistance de tirage.

pin_24 = Pin(14, mode=Pin.IN, pull=Pin.PULL_DOWN) # Entrée avec une résistance de pulldown
pin_24 = Pin(14, mode=Pin.IN, pull=Pin.PULL_UP)   # Entrée avec une résistance de pullup (le + utilisé)

Différentes manières en MicroPython de lire ou imposer une tension

MicroPython propose plusieurs fonctions pour imposer une tension en sortie :

  • Pin.on() et Pin.off()

  • Pin.high() et Pin.low()

  • Pin.value(valeur)

Les noms de fonctions sont explicites :

pin_led = Pin(16, mode=Pin.OUT)

# Impose une tension de 3.3V en sortie (état logique haut)
pin_led.on()
pin_led.high()
pin_led.value(1)

# Impose une tension de 0V en sortie (état logique bas)
pin_led.off()
pin_led.low()
pin_led.value(0)

Note

Choisissez le couple de fonctions qui vous parle le plus. Par exemple, .on()|.off() pour allumer des LEDS et high()|.low() pour un cas plus général. La fonction Pin.value() est pratique lorsque la valeur est dans stockée dans une variable Pin.value(ma_variable) . Par exemple :

pin_led = Pin(16, mode=Pin.OUT)
output_state=1
pin_led.value(output_state) # 3.3V en sortie
output_state=0
pin_led.value(output_state) # 0V en sortie

Il existe également la fonction Pin.toggle() qui permet d’inverser l’état d’une sortie.

pin_led = Pin(16, mode=Pin.OUT, value=1) # 3.3V en sortie
pin_led.toggle() # 0V en sortie

Pour lire l’état d’une broche, c’est-à-dire soit 3.3V pour un niveau logique haut et 0V pour un niveau logique bas, on utilise la même fonction Pin.value() sans préciser de valeur.

pin_24 = Pin(14, mode=Pin.IN, pull=Pin.PULL_UP)
pin_24.value() # Retourne 1 ou 0 en fonction de la tension mesurée

Mini-Projet : Allumer la LED lorsqu’un bouton poussoir est pressé

Pour mettre en pratique la gestion des pins GPIO, voici un script qui allume la LED intégrée lorsqu’on appuie sur un bouton-poussoir. Il existe 2 variantes du script : un qui utilise une entrée digitale avec une résistance pullup et un autre avec une résistance pulldown.

Note

En général on utilise des résistances de tirages en pullup plutôt qu’en pulldown pour les entrées numériques.

Avec la résistance pulldown interne de l’entrée numérique

Voici le circuit électrique à réaliser avec la Pi Pico pour faire fonctionner le script MicroPython.

Câblage sur plaque de prototypage du bouton-poussoir et de la led

Circuit électrique à réaliser

Câblage sur plaque de prototypage du bouton-poussoir et de la led

Circuit électrique à réaliser

from machine import Pin

pin_button = Pin(14, mode=Pin.IN, pull=Pin.PULL_DOWN)
pin_led    = Pin(16, mode=Pin.OUT)

while True:
    if pin_button.value() == 1:
        pin_led.on()
    else:
        pin_led.off()

Avec la résistance pullup interne de l’entrée numérique

Voici le schéma électrique associé au script MicroPython. Il faut juste relier le bouton à la masse au lieu de 3.3V.

Câblage sur plaque de prototypage du bouton-poussoir et de la led

Circuit électrique à réaliser

Câblage sur plaque de prototypage du bouton-poussoir et de la led

Circuit électrique à réaliser

from machine import Pin

pin_button = Pin(14, mode=Pin.IN, pull=Pin.PULL_UP)
pin_led    = Pin(16, mode=Pin.OUT)

while True:
    if not pin_button.value():
        pin_led.on()
    else:
        pin_led.off()

Note

Vous remarquerez que l’on peut condenser pin_button.value() == 1 par not pin_button.value() dans la condition du if .

On peut condenser le code car une condition if peut être écrite sur seule une ligne en Python :

from machine import Pin

pin_button = Pin(14, mode=Pin.IN, pull=Pin.PULL_UP)
pin_led    = Pin(16, mode=Pin.OUT)

while True:
    pin_led.on() if not pin_button.value() else pin_led.off()

On pourrait encore simplifier le code en retirant complètement le if même si l’on perd en clarté.

from machine import Pin

pin_button = Pin(14, mode=Pin.IN, pull=Pin.PULL_UP)
pin_led    = Pin(16, mode=Pin.OUT)

while True:
    pin_led.value(not pin_button.value())

Note

Ces petites optimisations peuvent avoir leur importance si l’on souhaite exécuter le plus rapidement possible le code, MicroPython étant très lent par rapport au langage C/C++.

Nous utilisons des cookies pour que votre visite sur la boutique soit la plus agréable possible. Politique de confidentialité