Accès aux GPIOs
Présentation générale
Depuis la version 4.8 du noyau Linux, les GPIOs (General Purpose Input Output) sont manipulables à travers l’interface de programmation Libgpiod
.
Celle-ci est constituée d’une librairie en langage C et d’un ensemble d’outils en ligne de commande pour contrôler les GPIOs.
Elle permet l’accès aux broches d’entrée/sortie via le système de fichiers devtmpfs
monté sur le répertoire /dev
. On y trouve une entrée par contrôleur hardware de GPIO.
pi@rpi:~ $ uname -a
Linux rpi-prof 6.6.31+rpt-rpi-v7 #1 SMP Raspbian 1:6.6.31-1+rpt1 (2024-05-29) armv7l GNU/Linux
pi@rpi:~ $ ls /dev/gpiochip* -l
crw-rw----+ 1 root gpio 254, 0 Sep 13 17:57 /dev/gpiochip0
crw-rw----+ 1 root gpio 254, 1 Sep 13 17:57 /dev/gpiochip1
|
Outils en ligne de commande de Libgpiod
Lgpiod
propose 6 outils en ligne de commande :
gpiodetect
-
Liste tous les contrôleurs hardware de GPIO présents sur la machine, affiche leur nom et le nombre de GPIOs qu’ils contrôlent
Exemple :pi@rpi:~ $ gpiodetect gpiochip0 [pinctrl-bcm2835] (54 lines) (1) gpiochip1 [raspberrypi-exp-gpio] (8 lines) (1)
1 Sur la Raspberry Pi, il y a 2 contrôleurs — gpiochip0
etgpiochip1
— nommés “pinctrl-bcm2835” et “raspberrypi-exp-gpio”. Ceux-ci gérent respectivement 54 et 8 broches GPIO gpioinfo
-
Affiche des informations sur les broches pilotées par un ou l’ensemble des contrôleurs GPIO
Exemple: Infos sur les broches pilotées pargpiochip0
pi@rpi:~ $ gpioinfo gpiochip0 gpiochip0 - 54 lines: [...] line 26: "GPIO26" unused input active-high (1) line 27: "GPIO27" "foobar" output active-high [used] (2) line 28: "HDMI_HPD_N" "hpd" input active-low [used] line 29: "STATUS_LED_G" "ACT" output active-high [used] [...]
1 la broche 26, nommée “GPIO26”, est configurée en entrée (→ input
), est active à l’état haut (→active-high
) mais n’est pas utilisée en ce moment (→unused
)2 la broche 27, nommée “GPIO27”, est configurée en sortie (→ output
), est active à l’état haut (→active-high
) et est actuellement utilisée (→used
) par un processus qui se fait appelé “foobar”. gpioget
-
Lit l’état d’une broche GPIO
Exemple:pi@rpi:~ $ gpioget gpiochip0 26 (1) 0 (2)
1 Lecture de l’état de la broche 26 de gpiochip0
2 Le niveau logique sur la broche est actuellement ‘0’ gpioset
-
Applique un niveau logique sur une broche et le maintient jusqu’à la fin d’exécution de la commande
Exemple:pi@rpi:~ $ gpioset -m time -s 5 gpiochip0 27=1 (1)
1 Positionne la broche 27 au niveau logique 1 (→ 27=1
) pendant 5s (→-m time s 5
) gpiofind
-
Cherche le nom du contrôleur en charge du pilotage d’un signal ainsi que son offset/identifiant
Exemplepi@rpi:~ $ gpiofind GPIO14 (1) gpiochip0 14
1 Le signal nommé GPIO14 est piloté par le contrôleur gpiochip0
et son offset/identifiant est 14 gpiomon
-
Permet d’afficher ou d’attendre les événements (front montant ou descendant) se passant sur une ou plusieurs broches d’entrée.
pi@rpi:~ $ gpiomon -n 2 gpiochip0 22 (1) event: RISING EDGE offset: 22 timestamp: [ 16923.047538775] (2) event: FALLING EDGE offset: 22 timestamp: [ 16926.439980109] (3)
1 Attend 2 évènements (→ -n 2
) sur la broche 22 du contrôleurgpiochip0
2 Un front montant (→ _RISING EDGE`) se produit sur la broche 22 à environ 4h42'03" (→ 16923.047538775s) après le démarrage de la Raspberry Pi 3 Un front montant (→ _RISING EDGE`) se produit sur la broche 22 à environ 4h42'06" (→ 16926.439980109s) après le démarrage de la Raspberry Pi
🞄 🞄 🞄