🛠 Lire un bouton et afficher dans la console
Objectifs
Lire l'état d'un bouton-poussoir sur le GPIO du Raspberry Pi 3 Model B et afficher un message dans la console à chaque appui. Apprendre à activer la résistance de pull-up interne (le bouton est câblé vers GND, logique active au niveau bas) et à éviter le rebond mécanique par une temporisation logicielle.
Matériel
- Raspberry Pi 3 Model B sous Raspberry Pi OS Lite
- 1 bouton-poussoir (touchou)
- Breadboard, câbles Dupont
- Terminal SSH ou écran + clavier sur le Pi
- Paquet
libgpiod-utilsinstallé (sudo apt install -y libgpiod-utils)
Code complet
Le bouton est câblé entre la broche physique 7 (GPIO4) et la broche physique 6 (GND). La pull-up interne maintient l'entrée à 1 au repos ; l'appui amène 0 :
#!/usr/bin/env bash
# bouton.sh — surveille GPIO4 (broche physique 7), bouton vers GND
# requis : libgpiod-utils (gpiodetect, gpioget)
echo "Surveillance GPIO4 — Ctrl-C pour quitter"
while true; do
état=$(gpioget --numeric gpiochip0 4)
if [ "$état" = 0 ]; then
echo "$(date +%T) : bouton appuyé !"
sleep 0.3 # anti-rebond logiciel
fi
sleep 0.05
done
Enregistrer dans bouton.sh, puis chmod +x bouton.sh et ./bouton.sh. Alternative Python : from gpiozero import Button; b = Button(4, pull_up=True) puis b.wait_for_press — gpiozero est préinstallé sur Raspberry Pi OS.
Vérification attendue
Au repos, gpioget gpiochip0 4 renvoie 1 (pull-up interne). À chaque appui maintenu sur le bouton, la console affiche une ligne horodatée « bouton appuyé ! ». Au relâchement, l'état revient à 1. Sans pull-up activée, l'entrée flotte et affiche des états aléatoires — c'est le meilleur test pour comprendre leur utilité.
Erreurs fréquentes
- Oublier la pull-up (ou en câbler une externe 10 kΩ en même temps) : l'entrée flotte, messages parasites.
- Câbler le bouton vers 3,3 V sans résistance puis lire : court-circuit GND au moment de l'appui si la broche est en sortie haute.
- Se tromper de broche : GPIO4 = broche physique 7, pas la broche 4 (qui est 5 V).
- Rebonds mécaniques : sans temporisation, un appui unique peut produire plusieurs lignes — normal, d'où le
sleep 0.3. permission deniedsur gpiochip0 : ajouter l'utilisateur au groupegpiopuis se reconnecter.- Utiliser
gpiogetdans une boucle très serrée sur un vieux Pi : consommer du CPU ; garder unsleepcourt.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython