🛠 Lire un bouton et afficher l'état dans la 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
- Orange Pi PC con Armbian, fuente de alimentación de 5 V / 2 A en el conector DC
- 1 botón pulsador
- Cables Dupont hembra-macho
- Pin GPIO del conector de 40 pines a elección (lógica de 3.3 V) + pin GND
- Paquete gpiod instalado: sudo apt install gpiod
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
- Olvidar la resistencia pull-up (interna o externa): la entrada queda flotante y gpiomon genera eventos parásitos.
- Equivocarse de chip: PL3 está en gpiochip1 (r_pio), los PA a PH están en gpiochip0.
- Esperar un flanco ascendente en un botón activo a nivel bajo cableado hacia GND: el flanco útil es descendente (falling).
- Conectar el botón a un pin de alimentación del conector en lugar de a un pin GPIO.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash