🛠 Lire un bouton poussoir en Python avec python3-libgpiod
Objetivos
Conectar un botón pulsador al conector de 40 pines de la ROCK 3B y mostrar cada pulsación en la consola con python3-libgpiod, utilizando eventos de interrupción (flanco ascendente) en lugar de un sondeo en bucle. Es el primer script Python de la serie: sirve de base para los tutoriales de sensores e IoT.
Material
- Radxa ROCK 3B con Radxa OS, fuente de alimentación USB-C PD 12 V / 2 A
- 1 botón pulsador, 1 resistencia de 10 kΩ (pull-up hacia 3,3 V), cables Dupont
sudo apt install python3-gpiod gpiod
Código completo
#!/usr/bin/env python3
"""Bouton sur le connecteur 40 broches — affiche les appuis (ROCK 3B).
Résolvez CHIP/LINE avec `gpiofind PIN_11` sur VOTRE image : les numéros
diffèrent entre noyau constructeur (Radxa) et noyau mainline >= 6.11."""
from gpiod import Chip, LineRequest
CHIP, LINE = "gpiochip3", 1 # exemple GPIO3_A1 derrière PIN_11 — CONFIRMER
with Chip(CHIP) as chip:
req = chip.request_lines(
consumer="rock3b-demo",
config={LINE: LineRequest.REQUEST_INPUT},
)
print("appui attendu (front montant), Ctrl-C pour quitter")
while True:
for ev in req.event_wait(timeout_ms=None):
e = req.event_get
if e and e.event_type == 1 and e.line == LINE: # RISING_EDGE
print("bouton pressé")
Verificación esperada
sudo python3 bouton.py se inicia sin errores; cada pulsación (flanco ascendente) muestra «botón pulsado». Ctrl-C libera correctamente la línea. Con pull-up de hardware + botón hacia masa, el estado de reposo es 1 y la pulsación es 0: si no se muestra nada, invierta el botón/cable o pruebe sudo gpioget $(gpiofind PIN_11) con un multímetro lógico.
Errores frecuentes
- Copiar los números CHIP/LINE de otro tutorial: la documentación de GPIOD de Radxa insiste — resuelva siempre con
gpiofind PIN_xx, ya que el mapeo cambia entre la imagen del fabricante y la versión mainline. - API de python3-libgpiod: las versiones recientes (libgpiod v2) utilizan
request_lines(config=...), las antiguasline.request(consumer=..., type=...)— adapte según el paquete Debian instalado. - Dejar el pin al aire sin pull: el estado oscila aleatoriamente; el pull-up de hardware de 10 kΩ hacia 3,3 V es el más didáctico.
- Confundir el pin físico del conector y la línea de libgpiod: solo el número de línea interesa al script.
- Olvidar la masa común entre la protoboard y la placa: el flanco ascendente nunca llega correctamente.
Otros tutoriales para esta placa
- Faire clignoter une LED via le GPIO avec libgpiod
- Premier réseau : Ethernet double gigabit, Wi-Fi optionnel et SSH
- Installer et booter le système sur un SSD NVMe (M.2 M-Key)
- Interroger un capteur I2C sur le connecteur 40 broches
- Surveiller température et fréquence CPU, piloter le ventilateur PWM
- Routeur / passerelle réseau double Gigabit avec OpenWrt et PoE
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash