Les GPIO (General Purpose Input/Output) du Pico sont les broches numériques configurables en entrée ou en sortie pour lire ou émettre un signal binaire (0 V / 3,3 V). En MicroPython, tout passe par la classe Pin du module [[micropython-modules|machine]]. Configurer correctement un GPIO est le geste de base de tout programme embarqué. Oublier le mode, confondre les tirages ou ignorer l’état flottant d’une entrée est la cause la plus fréquente des comportements imprévisibles en début de projet.

À quoi ça sert ?

Tous les capteurs et actionneurs binaires (bouton, fin de course, LED, relais, buzzer, capteur de présence) passent par les GPIO. Trois configurations couvrent l’essentiel : sortie (Pin.OUT, qu’on pousse à 1 ou 0), entrée tirée au haut (Pin.IN, Pin.PULL_UP), entrée tirée au bas (Pin.IN, Pin.PULL_DOWN). Comprendre ces modes et le câblage qui va avec rend lisible la plupart des autres tutoriels.

Procédure pas à pas

Quatre étapes : identifier la broche, créer l’objet Pin avec son mode, lire ou écrire, câbler proprement.

1. Identifier les broches

Le Pico expose les broches GP0 à GP28 (numérotation GP, à ne pas confondre avec la numérotation physique des pattes). Particularités : GP26 / GP27 / GP28 font aussi office d’entrées analogiques (ADC). Certaines broches portent par défaut un bus (UART, I2C, SPI). La LED intégrée est sur GP25 (raccourci "LED").

Toutes les broches sont en 3,3 V et ne sont pas tolérantes 5 V — voir niveaux de tension.

Brochage officiel du Raspberry Pi Pico : les 40 broches avec les numéros GPxx utilisés dans le code, les entrées analogiques (ADC) et les broches de bus (UART, I2C, SPI) repérées.|640

Source : Raspberry Pi Ltd — licence CC BY-ND, image non modifiée.

2. Créer l’objet Pin avec son mode

Contrairement à Arduino (pinMode dans setup()), on crée un objet par broche, en général en début de programme :

from machine import Pin
 
led = Pin(15, Pin.OUT)                 # sortie
bouton = Pin(14, Pin.IN, Pin.PULL_UP)  # entrée, résistance interne vers 3,3 V
  • Pin.OUT — la broche pilote un signal vers l’extérieur (LED, relais, transistor).
  • Pin.IN, Pin.PULL_UP — entrée avec résistance interne vers 3,3 V. Logique inversée : lit 1 au repos, 0 quand on la connecte à GND (typiquement par un bouton).
  • Pin.IN, Pin.PULL_DOWN — entrée avec résistance interne vers GND : lit 0 au repos, 1 quand on l’amène à 3,3 V. (Le Pico offre les deux tirages en interne — un atout par rapport à l’AVR de l’Arduino, qui n’a qu’un pull-up.)
  • Pin.IN seul — entrée flottante, sans polarisation : lecture aléatoire si rien n’est branché. À réserver aux cas avec résistance externe.

3. Lire ou écrire

while True:
    if bouton.value() == 0:    # bouton appuyé (pull-up : 0 = appuyé)
        led.on()
    else:
        led.off()

bouton.value() renvoie 1 ou 0. Côté sortie, led.value(1)/led.value(0), ou les raccourcis led.on() / led.off() / led.toggle().

4. Câbler proprement

  • Sortie sur LED : résistance série de 220 Ω à 1 kΩ entre la broche et l’anode (+) de la LED, cathode (−) vers GND. Sans résistance, la LED ou la broche s’abîme.
  • Entrée sur bouton, PULL_UP : un côté du bouton sur la broche, l’autre côté sur GND. Rien d’autre.
  • Entrée sur bouton, Pin.IN seul : il faut une résistance externe (~10 kΩ vers 3,3 V ou GND) pour un état de repos défini.

Montage : LED + résistance sur GP15 et bouton entre GP14 et GND, sur un Raspberry Pi Pico|600

Exemple — Bouton qui allume une LED

Câblage et code complets pour valider Pin.OUT + Pin.IN + lecture/écriture.

Câblage : LED anode → résistance 220 Ω → GP15 ; cathode → GND. Bouton entre GP14 et GND (PULL_UP, pas de résistance externe).

from machine import Pin
 
led = Pin(15, Pin.OUT)
bouton = Pin(14, Pin.IN, Pin.PULL_UP)
 
while True:
    if bouton.value() == 0:
        led.on()
    else:
        led.off()

Lancez, appuyez sur le bouton, et la LED s’allume. Relâchez, et elle s’éteint. Si la LED reste allumée en permanence, vous avez probablement câblé un côté du bouton sur 3,3 V au lieu de GND.

Pièges

Broche flottante. Une entrée en Pin.IN sans tirage capte du bruit — lecture aléatoire qui peut sembler répondre au passage de la main (effet antenne 50 Hz). Pour un bouton, presque toujours PULL_UP + bouton vers GND.

Logique inversée du pull-up. Un bouton en PULL_UP lit 0 quand appuyé. Tester if bouton.value() == 1 allumera la LED quand le bouton est relâché — inverse du comportement attendu.

LED sans résistance. Une LED branchée directement tire un courant excessif qui la grille (ou abîme la broche). Toujours une résistance série (220 Ω à 1 kΩ pour une LED standard sur 3,3 V).

Courant max de broche dépassé. Une broche du Pico délivre par défaut ~4 mA, ~12 mA au maximum (force de sortie réglable). C’est moins qu’un Arduino (20 mA) : on passe par un transistor ou un module dédié encore plus tôt (voir piloter une sortie TOR).

Réflexe 5 V. Le Pico n’est pas tolérant 5 V : appliquer 5 V sur une entrée peut détruire la broche. Adapter le niveau d’un capteur 5 V (pont diviseur ou translateur).

Cas particulier — PWM, ADC et bus

Toutes les broches ne sont pas équivalentes :

  • ADC — GP26 / GP27 / GP28 sont les entrées analogiques ([[micropython-capteur-analogique|ADC]]).
  • PWM — sur le Pico, toutes les broches GPIO peuvent générer un signal PWM (voir PWM) — pas de broches « ~ » dédiées comme sur Arduino.
  • Bus — des broches portent par défaut l’UART, l’I2C, le SPI (voir bus de communication). Utiliser une broche en GPIO la rend indisponible pour son bus.

Le pinout officiel de la carte est la référence. Gardez-le à portée de main.

Raccrochage projet

Maîtriser ces modes sur un petit montage isolé est la fondation sur laquelle reposent presque tous les tutoriels suivants — inutile d’enchaîner sur les capteurs ou les actionneurs avant que ce socle ne soit ferme.

Voir aussi