🛠 Lire un bouton et afficher dans la console
Objectifs
Câbler un bouton poussoir sur le Raspberry Pi 5 et afficher un message dans la console à chaque appui, en utilisant gpiomon (libgpiod) puis un petit script Shell. On découvre les entrées GPIO, le pull-up interne et la détection de front.
Matériel
- Raspberry Pi 5 sous Raspberry Pi OS 64 bits
- 1 bouton poussoir
- Câbles Dupont
- Brochages : broche physique 7 = GPIO4 (entrée), broche physique 6 = GND. Aucun composant externe nécessaire grâce au pull-up interne.
Code complet
# Écouter les fronts sur GPIO4 (libgpiod v2)
sudo apt install -y gpiod
gpiomon --num-events=0 --rising-edge gpiochip0 4
# Script bouton.sh : journaliser chaque appui
cat > bouton.sh <<'EOF'
#!/usr/bin/env bash
# Bouton sur GPIO4 (broche physique 7), pull-up interne : appui = niveau 0
echo "Surveillance de GPIO4... Ctrl-C pour terminer"
gpiomon --num-events=0 --falling-edge --debounce-period 0.05 gpiochip0 4 | while read -r _; do
echo "$(date '+%H:%M:%S') - bouton pressé !"
done
EOF
chmod +x bouton.sh
./bouton.sh
Vérification attendue
Chaque appui sur le bouton affiche une ligne horodatée « bouton pressé ! » dans le terminal. Avec gpiomon --rising-edge, c'est le relâchement qui déclenche l'événement.
Erreurs fréquentes
- Bouton câblé vers 3,3 V sans résistance : court-circuit au moment de l'appui si la broche est en sortie. Ici on câble vers GND avec pull-up, c'est sûr.
- Rebonds mécaniques : plusieurs événements pour un seul appui ; l'option
--debounce-period 0.05de gpiomon les filtre. - Mauvaise broche : GPIO4 = broche physique 7. Vérifier avec la commande
pinout(fournie avec gpiozero) ougpioinfo gpiochip0. - Exécuter sans droits : sur certaines configurations, l'accès au GPIO demande d'être dans le groupe
gpioou d'utiliser sudo. - Confondre les versions de libgpiod : la syntaxe
gpiomon gpiochip0 4correspond à la v2 (Bookworm).
Autres tutoriels pour cette carte
Exemples de code pour cette carte
led_blink.pyPythonbutton_led.pyPythonservo_sweep.pyPythondht_temp.pyPythonoled_i2c.pyPythonmcp3008_read.pyPython