🛠 Allumer une LED avec un bouton poussoir sur le CM3
Objectifs
Combiner une entrée et une sortie GPIO : lire un bouton poussoir et allumer une LED pendant l'appui, avec la gestion du rebond mécanique intégrée à gpiozero. Vous apprendrez aussi le rôle des pulls internes faibles du CM3 (50-65 kΩ, datasheet RP-008161-DS §6), présents sur toutes les broches sauf GPIO28/29/44/45.
Matériel
- CM3 sur CMIO3, Raspberry Pi OS démarré, python3-gpiozero installé
- 1 bouton poussoir entre GPIO4 et GND (GPIO4 possède un pull-up par défaut)
- 1 LED + résistance 330 Ω entre GPIO17 et GND
Code complet
#!/usr/bin/env python3
# bouton_led.py — bouton sur GPIO4 (vers GND), LED sur GPIO17
from gpiozero import Button, LED
from signal import pause
btn = Button(4, pull_up=True, bounce_time=0.05) # rebond ignoré 50 ms
led = LED(17)
btn.when_pressed = led.on
btn.when_released = led.off
pause # boucle d'événements gpiozero (gère le SIGINT)
python3 bouton_led.py
Vérification attendue
Appuyer sur le bouton allume la LED, le relâcher l'éteint, sans clignotement parasite grâce à bounce_time. Ctrl-C termine proprement le programme. Variante sans branchement : poser le doigt sur GPIO4 fait parfois réagir l'entrée — signe que la broche est bien en pull-up sensible.
Erreurs fréquentes
- Oublier
bounce_time: le bouton mécanique rebondit et déclenche des dizaines d'événements par appui. - Bouton sur GPIO28/29/44/45 en comptant sur le pull interne : ces broches n'ont aucun pull par défaut, l'entrée flotte et l'état est aléatoire — ajouter une résistance de pull-up externe (10 kΩ vers VREF de la banque).
- Court-circuit bouton enfoncé : ici le courant reste sous 1 mA grâce au pull interne, mais ne jamais relier une sortie directement à GND en sortie push-pull.
- Oublier
pause: sans boucle d'événements, le script se termine immédiatement et la LED ne réagit plus.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash