🛠 Premier script Python : bouton + LED avec python3-libgpiod
Objectifs
Écrire son premier script Python sur l'Orange Pi 3B : lire un bouton et allumer une LED en miroir avec python3-libgpiod, en utilisant les interruptions (edge events) plutôt qu'un sondage en boucle.
Matériel
- Orange Pi 3B sous Armbian, 5 V / 3 A
- 1 bouton poussoir + résistance 10 kΩ, 1 LED + résistance 330 Ω
sudo apt install python3-libgpiod
Code complet
#!/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
Vérification attendue
sudo python3 blink.py démarre sans erreur ; chaque appui allume la LED, le relâchement l'éteint. Ctrl-C termine proprement le script et libère les broches.
Erreurs fréquentes
- Les anciennes versions de python3-libgpiod utilisent
LineSettings/request_linesau lieu deRequest: mêmes numéros de broche, API différente — vérifier la version du paquet Armbian. - Réutiliser la même broche dans deux scripts sans libérer le premier : erreur « line is busy ».
- Confondre le numéro de ligne (offset dans le gpiochip) et le numéro physique du connecteur 40 broches : seul le premier intéresse libgpiod.
- Oublier d'alimenter la masse commune entre breadboard et carte : la LED ne s'éteint jamais franchement.
Autres tutoriels pour cette carte
- 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)
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash