🛠 Lire un bouton et afficher l'état dans la console
Objectifs
Apprendre à lire une entrée numérique sur l'Orange Pi PC : configurer une broche en entrée avec pull-up interne, détecter les appuis d'un bouton et afficher chaque événement dans la console. Vous utiliserez gpiomon (libgpiod) pour attendre les fronts, et vous découvrirez que la carte possède déjà un bouton : SW4, le bouton d'alimentation, câblé sur PL3 (gpiochip1, r_pio) et actif au niveau bas.
Matériel
- Orange Pi PC sous Armbian, alimentation 5 V / 2 A sur le jack DC
- 1 bouton poussoir
- Câbles Dupont femelle-mâle
- Broche GPIO du connecteur 40 broches au choix (logique 3.3 V) + broche GND
- Paquet gpiod installé : sudo apt install gpiod
Code complet
Script bash qui surveille un bouton sur une broche nommée (adapter le nom de broche à votre câblage) :
#!/usr/bin/env bash
# bouton.sh — détection d'appui avec gpiomon (libgpiod)
set -euo pipefail
# Exemple avec le bouton d'alimentation SW4 = PL3 (chip r_pio, actif-low)
LINE="$(gpiofind PL3)"
echo "Surveillance de ${LINE} (Ctrl-C pour quitter)..."
# rising/falling : chaque front est affiché horodaté
gpiomon --num-events=0 --rising-edge "${LINE}" | while read -r _ _ event _; do
echo "$(date '+%H:%M:%S') — SW4 relâché (${event})"
done
Version Python équivalente avec python3-libgpiod :
#!/usr/bin/env python3
import gpiod, time
chip = gpiod.Chip("gpiochip0")
ligne = chip.get_line(15) # PA15 réutilisé en entrée pour l'exo
ligne.request(consumer="bouton", type=gpiod.LINE_REQ_EV_RISING_EDGE,
flags=gpiod.LINE_REQ_FLAG_BIAS_PULL_UP)
print("En attente de fronts montants...")
while True:
evts = ligne.event_wait(sec=1)
if evts:
ligne.event_read
print(time.strftime("%H:%M:%S"), "— appui détecté")
Vérification attendue
Chaque appui/relâchement affiche une ligne horodatée dans le terminal. Avec le bouton SW4, un appui long déclenche aussi l'extinction (KEY_POWER) : pour l'expérience, appuyez brièvement.
Erreurs fréquentes
- Oublier le pull-up (interne ou externe) : l'entrée flotte et gpiomon crache des événements parasites.
- Se tromper de chip : PL3 est sur gpiochip1 (r_pio), les PA à PH sur gpiochip0.
- Attendre un front montant sur un bouton actif-low câblé vers GND : le front utile est falling.
- Brancher le bouton sur une broche d'alimentation du connecteur au lieu d'une broche GPIO.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash