🛠 Bouton poussoir et retour dans la console

Raspberry Pi 3 Model B+ (2018) — Fiche carte · debutant · Schéma : IMG-model-3b-plus-debutant-2-model3bp-bouton-console.svg — Bouton entre GPIO27 (broche 13) et GND (broche 9), résistance de pull-up interne, terminal affichant l'état

Objectifs

Lire une entrée numérique : un bouton poussoir câblé vers GND avec pull-up interne, et afficher l'état dans la console à chaque appui. Vous apprendrez la logique inversée (appui = niveau bas), le rebond mécanique (bounce) et le polling simple en shell.

Matériel

Code complet

Câblage : broche 13 (GPIO27) → une patte du bouton ; autre patte → broche 9 (GND). Le pull-up interne garde la ligne à 1 au repos.

#!/usr/bin/env bash
# bouton.sh — affiche un message à chaque appui (GPIO27, broche 13)
# Active le pull-up interne puis boucle sur la lecture de la ligne.
sudo gpioset --quiet --hold-period 0ms gpiochip0 27=0 2>/dev/null || true

echo "Appuyez sur le bouton (Ctrl-C pour quitter)..."
while true; do
    # gpiodetect/gpiget : lecture de la ligne ; 0 = bouton pressé (logique inversée)
    état=$(sudo gpiget gpiochip0 27 2>/dev/null || echo 1)
    if [ "$état" = "0" ]; then
        echo "Bouton pressé à $(date +%T)"
        sleep 0.3        # anti-rebond logiciel grossier
        while [ "$(sudo gpiget gpiochip0 27 2>/dev/null || echo 1)" = "0" ]; do
            sleep 0.05   # attend le relâchement
        done
    fi
    sleep 0.02
done

Vérification attendue

Chaque appui affiche une ligne « Bouton pressé » avec l'heure, une seule fois par appui malgré le rebond mécanique. Au repos, la ligne se lit 1 grâce au pull-up interne ; appuyé, elle tombe à 0.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels