🛠 Piloter les GPIO du NanoPi R5S avec libgpiod

NanoPi R5S (FriendlyElec) · intermediaire · Schéma : IMG-nanopi-r5s-intermediaire-1-nanopir5s-gpio-libgpiod.svg — connecteur FPC 12 pins du NanoPi R5S avec la broche GPIO3_C3 (3,3 V) reliée à une résistance et une LED, et le bouton Reset sur GPIO4_A0

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

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

Otros tutoriales para esta placa

Ejemplos de código para esta placa

← Volver a la ficha 🛠 Todos los tutoriales