🛠 Piloter les GPIO du NanoPi R5S avec libgpiod
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
- NanoPi R5S sous kernel vendor 6.1 ou mainline, avec
python3-gpiodetgpiod(sudo apt install gpiod python3-gpiod) - Connecteur FPC 12 pins 0,5 mm (adaptateur FPC vers breakboard nécessaire)
- LED + résistance 1 kΩ (niveaux 3,3 V, jamais 5 V sur ces broches)
- Pas d'ADC sur les connecteurs : le SARADC du RK3568 n'est pas exposé
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
- Mauvaise ligne : oublier que C3 = groupe C (index 2) × 8 + 3 = ligne 19, et non « 3 ».
- Supposer le numéro de gpiochip : il varie selon le kernel ;
gpiodetectavant de câbler. - Injecter du 5 V sur une broche 3,3 V du FPC : risque de dommage permanent ; le connecteur 2×8 (SDIO/I2S) est lui en 1,8 V.
- Chercher le Reset en GPIO brut : gpio-keys le monopolise, passer par /dev/input.
- Confondre avec le brochage Raspberry Pi : le connecteur FPC n'a ni 5 V ni GND en face facile, se reporter à la table du wiki.
Autres tutoriels pour cette carte
Exemples de code pour cette carte
clignotante.pyPythonbouton-gpio.pyPythoncapteur-i2c.shBashsurveillance-temperature.shBashcapteur-dht11.pyPythonservo-pwm-sysfs.shBash