🛠 Lire un bouton et afficher l'état dans la console

Orange Pi PC (Allwinner H3) · debutant · Schéma : IMG-orangepi-pc-debutant-2-opipc-bouton-console.svg — Bouton poussoir externe entre une broche GPIO et la masse avec résistance de pull-up, et le bouton d'alimentation SW4 (PL3) de l'Orange Pi PC, entrées d'un terminal 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

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

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels