bouton-gpio.py

Placas Libre Computer Amlogic — libre-amlogic (buque insignia: Le Potato AML-S905X-CC) · Archivo : bouton-gpio.py · Lenguaje : Python · Uso : Réagir à l'appui sur un bouton poussoir

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 necesario

Una Libre Computer « Le Potato » (Amlogic S905X, 2 GB) con Armbian, alimentada a 5 V/2,5 A micro-USB, con su conector de 40 pines compatible Raspberry Pi. 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. En Armbian: sudo apt install gpiod libgpiod-utils python3-gpiod; los pines del conector se llaman « 7J1 Header PinN » en gpioinfo. Solo 3,3 V, ningún pin tolerante a 5 V.

Para ir más lejos

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()

← Volver a la ficha