🛠 Piloter les GPIO du NanoPi R5S avec libgpiod
Objetivos
El conector FPC de 12 pines del NanoPi R5S expone 8 GPIO a nivel de 3,3 V (incluido GPIO3_C3, pin 3 de la tabla de pines del wiki de FriendlyElec). Este tutorial utiliza libgpiod (la API GPIO moderna de Linux, ya que la antigua /sys/class/gpio está obsoleta) para generar una señal cuadrada en la salida, y explica por qué el botón Reset no puede leerse como GPIO bruto: el controlador gpio-keys lo reclama y es necesario pasar por los eventos de entrada (input).
Material
- NanoPi R5S con kernel vendor 6.1 o mainline, con
python3-gpiodygpiod(sudo apt install gpiod python3-gpiod) - Conector FPC de 12 pines de 0,5 mm (se necesita un adaptador de FPC a breadboard)
- LED + resistencia de 1 kΩ (niveles de 3,3 V, nunca 5 V en estos pines)
- No hay ADC en los conectores: el SARADC del RK3568 no está expuesto
Código completo
#!/usr/bin/env python3
"""blink_fpc.py — sortie GPIO3_C3 (broche 3 du FPC) via libgpiod.
RK3568 : GPIO3 -> gpiochip3, ligne = groupe*8 + n ; C3 -> 2*8+3 = 19.
TOUJOURS vérifier d'abord : gpiodetect && gpioinfo gpiochip3
import gpiod, time
chip3 = gpiod.Chip("gpiochip3")
req = chip3.request_lines(
config={19: gpiod.LineSettings(
direction=gpiod.line.Direction.OUTPUT,
output_value=gpiod.line.Value.INACTIVE)},
consumer="demo-r5s")
try:
for _ in range(5):
req.set_value(19, gpiod.line.Value.ACTIVE); time.sleep(0.2)
req.set_value(19, gpiod.line.Value.INACTIVE); time.sleep(0.2)
finally:
req.release_lines
# Bouton Reset : piloté par gpio-keys -> lire en input events :
# sudo evtest (KEY_RESTART) ou pip install evdev
Verificación esperada
gpiodetect lista al menos gpiochip0 a gpiochip4; gpioinfo gpiochip3 muestra la línea 19 libre. La ejecución hace parpadear el LED 5 veces (200 ms ON / 200 ms OFF), medible con un multímetro entre 0 y 3,3 V. evtest captura KEY_RESTART cuando se presiona Reset. Si request_lines falla con «Device or resource busy», la línea ya está reclamada por un controlador u otro consumidor.
Errores frecuentes
- Línea incorrecta: olvidar que C3 = grupo C (índice 2) × 8 + 3 = línea 19, y no «3».
- Suponer el número de gpiochip: varía según el kernel; ejecutar
gpiodetectantes de cablear. - Inyectar 5 V en un pin de 3,3 V del FPC: riesgo de daño permanente; el conector 2×8 (SDIO/I2S) es de 1,8 V.
- Buscar el Reset como GPIO bruto: gpio-keys lo monopoliza, hay que pasar por /dev/input.
- Confundirlo con el pinout de Raspberry Pi: el conector FPC no tiene 5 V ni GND en una cara fácil, consultar la tabla del wiki.
Otros tutoriales para esta placa
Ejemplos de código para esta placa
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash