🛠 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.

Objetivos

Aprender a leer una entrada digital en la Orange Pi PC: configurar un pin como entrada con resistencia pull-up interna, detectar las pulsaciones de un botón y mostrar cada evento en la consola. Utilizarás gpiomon (libgpiod) para esperar los flancos, y descubrirás que la tarjeta ya posee un botón: SW4, el botón de encendido, cableado en PL3 (gpiochip1, r_pio) y activo a nivel bajo.

Material

Código completo

Script bash que supervisa un botón en un pin nombrado (adapta el nombre del pin a tu cableado):

#!/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

Versión equivalente en Python con 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é")

Verificación esperada

Cada pulsación/suelta muestra una línea con marca de tiempo en la terminal. Con el botón SW4, una pulsación larga también provoca el apagado (KEY_POWER): para la experiencia, pulsa brevemente.

Errores frecuentes

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales