🛠 Lire un bouton et afficher l'état dans la console
Objectifs
Lire l'état d'un bouton poussoir sur le GPIO de l'ODROID-N2 et l'afficher dans la console. On utilise la résistance de pull-up interne (bias pull-up libgpiod), donc pas de résistance externe : le bouton relie la broche à la masse quand on appuie.
Matériel
- ODROID-N2/N2+ sous Armbian (mainline)
- 1 bouton poussoir
- 2 câbles Dupont
- Broche utilisée : PIN_11 (GPIOX_3), GND sur PIN_25
Code complet
#!/usr/bin/env bash
# bouton.sh — état du bouton sur PIN_11 en temps réel (libgpiod v2)
set -e
gpiomon --num-events=0 --falling-edge --rising-edge gpiochip0 PIN_11 &
MON=$!
trap "kill $MON" EXIT
while true; do
état=$(gpioset --quiet --state gpiochip0 PIN_11 2>/dev/null || true)
lu=$(gpioget gpiochip0 PIN_11)
[ "$lu" = 0 ] && echo "BOUTON APPUYÉ" || echo "relâché"
sleep 0.1
done
Version C (libgpiod) avec gestion d'événements : gcc bouton.c -o bouton -lgpiod, en demandant PIN_11 en entrée avec GPIOD_LINE_REQUEST_FLAG_BIAS_PULL_UP, puis lecture à 10 Hz.
Vérification attendue
Au lancement, la console affiche « relâché » en boucle (pull-up interne maintient la ligne à 1). En maintenant le bouton enfoncé, les lignes deviennent « BOUTON APPUYÉ ». Avec gpiomon gpiochip0 PIN_11, chaque appui/relâchement produit un événement horodaté.
Erreurs fréquentes
- Bouton entre PIN_11 et 3,3 V au lieu de GND : sans pull-up logiciel, la ligne flotte et l'état est aléatoire.
- Anti-rebond absent : quelques rebonds affichés en plus de l'appui ; filtrer par logique (ignorer les changements < 50 ms).
- Confondre PIN_11 (broche physique 11) et GPIO 11 : les noms
PIN_xxdu device-tree sont physiques, vérifiez avecgpioinfo gpiochip0. gpiogetrenvoie une erreur : la ligne est peut-être occupée par un autre processus (gpioinfomontre le consommateur).- >
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash