🛠 Lire un bouton poussoir et afficher l'état dans la console
Objectifs
Apprendre à lire une entrée numérique sur le connecteur P1 26 broches du Model B Rev 1 : un bouton poussoir relié à la masse, avec la résistance de rappel (pull-up) interne du BCM2835 activée par libgpiod. Vous allez scruter l'état du bouton en boucle dans la console.
Matériel
- Raspberry Pi Model B Rev 1 sous Raspberry Pi OS legacy 32 bits
- 1 bouton poussoir
- libgpiod installé (
sudo apt install -y gpiod) - Aucune résistance externe nécessaire : le rappel interne suffit pour un bouton vers GND.
Code complet
#!/bin/sh
# bouton.sh - surveille un bouton sur GPIO4 (broche physique 7)
# c'est la broche 7, GND est la broche 9.
# Rappel interne : GPIO4 possède un pull-up interne activable.
# Lecture en boucle : gpiomon attend les changements d'état
gpiomon --num-events=0 --rising-edge gpiochip0 4 &
while true; do
ETAT=$(gpioget --bypass-direction-check gpiochip0 4 2>/dev/null || gpioget gpiochip0 4)
if [ "$ETAT" = "0" ]; then
echo "BOUTON APPUYE (état bas = 0, pull-up interne)"
else
echo "au repos (1)"
fi
sleep 0.1
done
Vérification attendue
Au repos, la console affiche au repos (1) grâce au pull-up interne. À chaque appui, le GPIO est relié à la masse et l'état passe à 0 : la console affiche BOUTON APPUYE. Le bouton est câblé entre la broche 7 (GPIO4) et la broche 9 (GND).
Erreurs fréquentes
- Oublier le rappel : sans pull-up (interne ou externe), l'entrée flotte et affiche des états aléatoires.
- Câbler le bouton entre GPIO et 3,3 V sans résistance : court-circuit au moment de l'appui si l'état bas est lu en pull-down.
- Se tromper de broche : GPIO4 est la broche physique 7 sur le connecteur 26 broches, pas la broche 4.
- Rebonds mécaniques : l'état peut osciller quelques millisecondes ; le
sleep 0.1est une anti-rebond logicielle minimaliste. gpiomonn'existe pas sur les très vieilles images : mettre à jour le paquetgpiod.
Autres tutoriels pour cette carte
- Allumer une LED via le GPIO avec libgpiod
- Premier script Python : faire clignoter la LED
- Variation d'intensité LED avec le PWM matériel (et son piège)
- Lire un capteur I2C (température/humidité) sur le bus 1
- Configurer l'Ethernet 10/100 et piloter le Pi en SSH
- Boot sur SD, partitions et procédure de recouvrement
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython