🛠 Premier script Python : bouton + LED avec python3-libgpiod
Objetivos
Escribir tu primer script Python en la Orange Pi 3B: leer un botón y encender un LED en espejo con python3-libgpiod, utilizando interrupciones (edge events) en lugar de un sondeo en bucle.
Material
- Orange Pi 3B con Armbian, 5 V / 3 A
- 1 botón pulsador + resistencia de 10 kΩ, 1 LED + resistencia de 330 Ω
sudo apt install python3-libgpiod
Código completo
#!/usr/bin/env python3
"""Bouton sur la broche d'entrée, LED en miroir (Orange Pi 3B / Armbian)."""
import gpiod
from gpiod.line import Direction, Edge, Value
CHIP = "/dev/gpiochip1"
BUTTON = 35 # gpio1_b3 en exemple — choisir une broche libre du plan officiel
LED = 36 # gpio1_b4 en exemple
with gpiod.Chip(CHIP) as chip:
request = gpiod.Request(
consumer="opi3b-demo",
lines={
BUTTON: gpiod.RequestLineConfig(direction=Direction.INPUT,
edge=Edge.BOTH),
LED: gpiod.RequestLineConfig(direction=Direction.OUTPUT,
output_value=Value.INACTIVE),
},
)
with chip.request_lines(config=request) as req:
print("Ctrl-C pour sortir")
while True:
req.wait_edge_events(timeout=1.0) # bloque sur l'interruption
for ev in req.process_edge_events:
if ev.line_offset == BUTTON:
req.set_value(LED, ev.value) # la LED suit le bouton
Verificación esperada
sudo python3 blink.py se inicia sin errores; cada pulsación enciende el LED, y la liberación lo apaga. Ctrl-C termina limpiamente el script y libera los pines.
Errores frecuentes
- Las versiones antiguas de python3-libgpiod utilizan
LineSettings/request_linesen lugar deRequest: mismos números de pin, API diferente — verificar la versión del paquete Armbian. - Reutilizar el mismo pin en dos scripts sin liberar el primero: error « line is busy ».
- Confundir el número de línea (offset en el gpiochip) con el número físico del conector de 40 pines: solo el primero interesa a libgpiod.
- Olvidar alimentar la masa común entre la protoboard y la placa: el LED nunca se apaga completamente.
Otros tutoriales para esta placa
- Faire clignoter une LED via le GPIO avec libgpiod
- Lire un bouton poussoir et afficher l'état dans la console
- Variation d'intensité d'une LED avec un signal PWM
- Interroger un capteur I2C sur les broches 3/5 du connecteur
- Configurer Ethernet gigabit et Wi-Fi puis se connecter en SSH
- Booter sur un SSD NVMe et récupérer une carte bloquée (MaskROM)
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash