🛠 Bouton poussoir et retour console avec gpiozero
Objectifs
Lire un bouton poussoir et commander une LED depuis Python avec gpiozero sur le Raspberry Pi 3 A+ : événements when_pressed / when_released, pull-up interne, boucle d'événements. gpiozero numérote en Broadcom, comme libgpiod.
Matériel
- Raspberry Pi 3 A+ sous Raspberry Pi OS Bookworm, en SSH (pas d'Ethernet : réseau via WiFi ou câble micro-USB en mode gadget)
- Bouton poussoir, LED + résistance 330 Ω
- Bouton : GPIO27 (broche 13) vers GND (broche 20) ; LED + 330 Ω : GPIO17 (broche 11) vers GND (broche 14)
Code complet
#!/usr/bin/env python3
# blink_btn.py — sudo apt install python3-gpiozero
from gpiozero import LED, Button # numérotation Broadcom
from signal import pause
led = LED(17) # GPIO17 = broche physique 11
btn = Button(27, pull_up=True) # GPIO27 = broche 13, repos à l'état haut
def on_press:
print("Bouton pressé — la LED clignote")
led.blink(on_time=0.2, off_time=0.2)
def on_release:
print("Bouton relâché — LED éteinte")
led.off
btn.when_pressed = on_press
btn.when_released = on_release
print("3A+ prêt (4x Cortex-A53 @ 1,4 GHz) — appuyez sur le bouton")
pause # garde la boucle d'événements alive
sudo apt install -y python3-gpiozero
python3 blink_btn.py
Vérification attendue
La console affiche « 3A+ prêt » ; à chaque appui la LED se met à clignoter et un message s'affiche ; au relâchement la LED s'éteint. Ctrl+C quitte proprement.
Erreurs fréquentes
- Bouton câblé vers 3,3 V au lieu de GND sans comprendre les pull-up : avec
pull_up=Truele repos est haut et l'appui donne l'état bas. - Oublier
pause: le script se termine immédiatement et le bouton ne réagit jamais. - Relier GPIO27 directement au 5 V : la logique du 3 A+ est en 3,3 V, le 5 V peut endommager le SoC.
- Confondre les broches 13 (GPIO27) et 11 (GPIO17) sur le connecteur 40 broches.
Autres tutoriels pour cette carte
- Allumer une LED en C avec libgpiod sur le GPIO 40 broches
- Premier script Python : inventaire du système
- Variation d'intensité d'une LED avec le PWM matériel
- Capteur I2C : température et pression avec BME280
- Connexion WiFi station et administration en SSH
- Démarrage SD/USB et récupération d'une carte qui ne boot plus
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython