bouton-gpio.py
Un botón en el conector GPIO dispara una acción al pulsar y al soltar. Versión genérica por sondeo de la línea gpiod con antirrebote software de 30 ms.
Hardware
Un Orange Pi 5 Plus (Rockchip RK3588, 4 Cortex-A76 + 4 Cortex-A55, hasta 16 GB de RAM) con Armbian/Debian, conector GPIO de 40 pines y doble Ethernet gigabit. 1 botón pulsador (una pata al pin GPIO, la otra a GND).
Cableado
Botón entre el GPIO elegido y GND; activa la resistencia interna con el flag de gpiod si el montaje no lleva.
Funcionamiento
Se vigila el nivel del pin; un flanco válido (estable 30 ms) ejecuta la acción. gpiozero delega todo en callbacks asíncronos.
Ejecución
Graba Armbian para RK3588 y sudo apt install python3-gpiod gpiod. Identifica el chip con gpiodetect y los pines con gpioinfo, adapta el script y ejecútalo (python3 o ./script.sh).
Variantes
Contador de pulsaciones, doble clic (medida de intervalo) o lanzamiento de un script shell vía subprocess.
bouton-gpio.py
#!/usr/bin/env python3
# Bouton poussoir avec python3-gpiod : scrutation + anti-rebond.
import gpiod
from time import sleep
PUCE = "gpiochip1" # verifier avec gpiodetect
LIGNE = 16 # GPIO du bouton (schema de la carte)
chip = gpiod.Chip(PUCE)
line = chip.get_line(LIGNE)
line.request(consumer="bouton", type=gpiod.LINE_REQ_DIR_IN,
default_val=gpiod.LINE_REQ_FLAG_NONE)
print("Scrutation du bouton (Ctrl-C pour quitter)")
precedent = line.get_value()
try:
while True:
etat = line.get_value()
if etat != precedent:
sleep(0.03) # anti-rebond 30 ms
etat = line.get_value()
if etat != precedent:
print("Bouton:", "APPUIE" if etat else "relache")
precedent = etat
sleep(0.01)
finally:
line.release()