clignotante.py
The getting-underway script on an SBC: an LED on the GPIO header blinks at 1 Hz. python3-gpiod drives the GPIO chip straight through the kernel, with no proprietary library.
Hardware
An Orange Pi 5 Plus (Rockchip RK3588, 4 Cortex-A76 + 4 Cortex-A55, up to 16 GB RAM) running Armbian/Debian, 40-pin GPIO header and dual gigabit Ethernet. 1 LED + 330 Ω resistor (the pins are 3.3 V on all these boards).
Wiring
LED anode on the chosen GPIO pin (see the board schematic and gpioinfo) through 330 Ω, cathode to GND.
How it works
The script sets the pin as output, alternates high/low with sleep(1), and cleanly releases the pin (finally) even on Ctrl-C.
Running it
Flash Armbian for RK3588, then sudo apt install python3-gpiod gpiod. Find the chip with gpiodetect and pins with gpioinfo, adapt the script and run it (python3 or ./script.sh).
Variants
Replace sleep with a pattern (PWM ramp via gpiozero PWM / gpiod + threads), or wire several LEDs in a ring.
clignotante.py
#!/usr/bin/env python3
# Clignotement LED avec python3-gpiod (API 1.x, Debian/Armbian).
# Installation : sudo apt install python3-gpiod gpiod
# Puce disponible : gpiodetect ; broches : gpioinfo <puce>
import gpiod
from time import sleep
PUCE = "gpiochip1" # a verifier avec gpiodetect (varie selon la carte)
LIGNE = 17 # numero GPIO du schema de la carte
chip = gpiod.Chip(PUCE)
line = chip.get_line(LIGNE)
line.request(consumer="clignotante", type=gpiod.LINE_REQ_DIR_OUT,
default_val=0)
print("Clignotement (Ctrl-C pour arreter)")
try:
while True:
line.set_value(1)
print("LED ON")
sleep(1)
line.set_value(0)
print("LED OFF")
sleep(1)
finally:
line.release()