🛠 GPIO en Python : LED et bouton avec gpiozero

Raspberry Pi Zero 2 W (2021) — Fiche carte · intermediaire · Schéma : IMG-zero-2w-intermediaire-1-led-bouton-gpiozero.svg — connecteur 40 broches de la Zero 2 W, LED + 330 Ω sur la broche physique 11 (GPIO17), bouton sur la broche 13 (GPIO27) vers GND.

Objectifs

Piloter le connecteur 40 broches compatible HAT de la Zero 2 W : logique en 3,3 V (attention, pas 5 V !), numérotation Broadcom (GPIO17 = broche physique 11), entrées avec pull-up interne, et le modèle événementiel de gpiozero — préinstallé sur Raspberry Pi OS — qui évite le polling bloquant. Contraintes de courant à retenir : 16 mA par broche, 50 mA au TOTAL sur toutes les broches.

Matériel

Code complet

#!/usr/bin/env python3
"""LED sur GPIO17, compteur d'appuis sur bouton GPIO27 (gpiozero).
Rappel : 16 mA max par broche, 50 mA au total sur toutes les broches."""
from gpiozero import LED, Button
from signal import signal, SIGINT, default_int_handler

led = LED(17)                       # numérotation BCM, pas numéro de broche !
button = Button(27, pull_up=True)   # au repos = HIGH ; appuyé = relié à GND

presses = 0
def on_press(_):
    global presses
    presses += 1
    print(f"Bouton appuyé {presses} fois")

button.when_pressed = on_press      # événementiel, pas de boucle de polling

signal(SIGINT, default_int_handler) # Ctrl-C propre au lieu de rester bloqué
try:
    led.blink(on_time=0.5, off_time=0.5)   # non bloquant : thread en arrière-plan
    while True:
        pass
finally:
    led.close                     # remet la broche à 0 à la sortie

Exécution : « python3 bouton.py », arrêt par Ctrl-C. Pour le démarrer au boot : un service systemd simple avec « ExecStart=/usr/bin/python3 /home/pi/bouton.py ».

Vérification attendue

La LED clignote à 1 Hz dès le lancement ; chaque appui affiche un compteur dans le terminal. Après Ctrl-C, la LED s'éteint (la broche est proprement relâchée par led.close). Si rien ne clignote, vérifier d'abord l'inversion broche physique / numéro GPIO.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels