🛠 Lire un bouton poussoir et afficher l'état dans la console
Objectifs
Câbler un bouton poussoir sur le connecteur 40 broches de l'Orange Pi 3B, lire son état en ligne de commande avec gpioget, puis afficher chaque changement d'état dans la console.
Matériel
- Orange Pi 3B sous Armbian, alimentation 5 V / 3 A
- 1 bouton poussoir, 1 résistance 10 kΩ (pull-up vers 3,3 V), câbles Dupont
- Paquet
gpiodinstallé (sudo apt install gpiod)
Code complet
# 1. Lecture ponctuelle de la broche (gpioget la configure en entrée)
sudo gpioget -c gpio1 35 # 0 ou 1 selon l'état du bouton
# 2. Journal des appuis dans la console
#!/bin/bash
# fichier : bouton.sh -> bash bouton.sh
CHIP=1
PIN=35 # gpio1_b3 en exemple : vérifier une broche libre sur le plan officiel
dernier=""
while true; do
état=$(sudo gpioget -c gpio$CHIP $PIN)
if [ "$état" != "$dernier" ]; then
echo "$(date +%T) - bouton = $état"
dernier=$état
fi
sleep 0.05
done
Vérification attendue
Au repos, gpioget renvoie 1 (pull-up vers 3,3 V) ; bouton enfoncé, il renvoie 0. Le script affiche une ligne horodatée à chaque changement d'état, appui comme relâchement.
Erreurs fréquentes
- Oublier la résistance de pull et laisser la broche en l'air : l'état affiche alors des valeurs aléatoires. Le pull interne libgpiod (bias) fonctionne aussi, mais le pull matériel est plus pédagogique.
- Choisir une broche déjà occupée (UART, ou l'I2C des broches 3/5 du connecteur).
- Confondre 0 logique et bouton enfoncé : avec pull-up + bouton vers la masse, la logique est active-basse (inversée).
- Lancer le script sans
sudo: les lignes GPIO sont réservées au groupe gpio si udev n'est pas configuré. - Rebond mécanique : un appui peut produire plusieurs lignes ; filtrez avec
sleep 0.05ou un anti-rebond logiciel.
Autres tutoriels pour cette carte
- Faire clignoter une LED via le GPIO avec libgpiod
- Premier script Python : bouton + LED avec python3-libgpiod
- Variation d'intensité d'une LED avec un signal PWM
- Interroger un capteur I2C sur les broches 3/5 du connecteur
- Configurer Ethernet gigabit et Wi-Fi puis se connecter en SSH
- Booter sur un SSD NVMe et récupérer une carte bloquée (MaskROM)
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash