🛠 GPIO en Python : LED et bouton avec gpiozero
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
- 1 Raspberry Pi Zero 2 W alimentée (2 A)
- 1 LED + 1 résistance 330 Ω : anode → broche physique 11 (GPIO17), cathode → GND (broche 6, 9, 14, 20, 25 ou 30)
- 1 bouton poussoir : broche physique 13 (GPIO27) → bouton → GND (pull-up interne utilisée)
- Éventuellement un en-tête à souder : la Zero 2 W standard est livrée avec le connecteur NON serti (la version « with headers » est pré-soudée)
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
- Confondre broche physique 17 et GPIO17 : gpiozero parle en Broadcom ; la broche physique 17 est un 3,3 V !
- Alimenter une LED en 3,3 V sans résistance ou en tirer plus de 16 mA : la broche chauffe, au-delà des 50 mA cumulés le SoC risque des dégâts.
- Brancher un capteur 5 V Arduino directement : la logique du Pi est en 3,3 V, les broches ne sont pas tolérantes au 5 V (sauf indication contraire du module).
- gpiozero vs RPi.GPIO vs libgpiod : trois mondes ; ne pas mélanger les bibliothèques sur la même broche sans relâcher la ligne.
- Lancer le script en root « pour que ça marche » : inutile, l'utilisateur pi est dans le groupe gpio ; chercher les permissions ailleurs.
Autres tutoriels pour cette carte
- Premier démarrage de la Zero 2 W sans écran (headless)
- Se connecter au Wi-Fi (et comprendre les limites 2,4 GHz / WPA2)
- Surveiller la température et la fréquence de la Zero 2 W
- Le tour de passe-passe « clé USB Linux » : Ethernet sur USB (g_ether)
- Serveur de blocage de pub réseau avec Pi-hole
- Remettre une Zero 2 W en état de boot : usbboot et boot files
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash