🛠 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

Objectifs

Le connecteur FPC 12 pins du NanoPi R5S expose 8 GPIO au niveau 3,3 V (dont GPIO3_C3, broche 3 de la table de brochage du wiki FriendlyElec). Ce tutoriel utilise libgpiod (l'API GPIO moderne de Linux, l'ancien /sys/class/gpio étant déprécié) pour générer un signal carré en sortie, et explique pourquoi le bouton Reset ne peut pas être lu en GPIO brut : le pilote gpio-keys le revendique et il faut passer par les événements input.

Matériel

Code complet

#!/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

Vérification attendue

gpiodetect liste au moins gpiochip0 à gpiochip4 ; gpioinfo gpiochip3 montre la ligne 19 libre. L'exécution fait clignoter la LED 5 fois (200 ms ON / 200 ms OFF), mesurable au multimètre entre 0 et 3,3 V. evtest capture KEY_RESTART quand on presse Reset. Si request_lines échoue avec « Device or resource busy », la ligne est déjà revendiquée par un driver ou un autre consommateur.

Erreurs fréquentes

Autres tutoriels pour cette carte

Exemples de code pour cette carte

← Retour à la fiche 🛠 Tous les tutoriels