Configurer l'accès au GPIO du Raspberry Pi
Cet articlé décrit l'utilisation de pigpio sur un Raspberry Pi tournant sous Arch Arm. pigpio permet d'accéder aux entrée/sorties du Raspberry Pi qui se situent sur le connecteur d'extension.
Mes recherches pour pouvoir accéder aux ports GPIO en mode utilisateur (c'est à dire sans passer en mode root) ont été fastidieuses. En effet, la plupart des gens se contente d'exécuter leurs programmes en mode super-utilisateur, ce qui est une aberration.
J'ai exploré la voie du sysfs où j'ai essayé de modifier les propriétés des fichiers du répertoire /sys/class/gpio grâce à des règles udev. Cela m'a mené à une impasse à cause des liens symboliques remontants contenu dans /sys/class/gpio.
Les autre solutions passent par un accès direct à /dev/mem, ce qui mène à une impasse aussi. Une des solutions acceptables serait d'utiliser d'un driver dédié (cf Thèse de VU Nguyen dans les liens en fin d'article).
J'utilise maintenant la librairie pigpio. Elle n'a pas été facile à dégotter tant les fausses pistes furent nombreuses. Elle est bien faite, un module Python est disponible.
Instalation de git, si ce n'est pas déjà fait :
# apt install git
Modification du chemin de recherche des librairies : Modifiez le fichier /etc/ld.so.conf et ajoutez-y la ligne suivante :
/usr/local/lib
Mettez à jour la liste des répertoires des librairies dynamiques :
# ldconfig
Téléchargez pigpio :
$ git clone https://github.com/joan2937/pigpio.git
$ cd pigpio
$ make all
$ su
# make install
Création d'une unité systemd pour le daemon soit lancé au démarrage : Créez le fichier /etc/systemd/system/pigpiod.service contenant les lignes suivantes :
[Unit] Description=Gpio daemon [Service] ExecStart=/usr/local/bin/pigpiod Type=forking [Install] WantedBy=multi-user.target
# systemctl start pigpiod
# systemctl enable pigpiod
# systemctl status pigpiod
* pigpiod.service - pigpio daemon
Loaded: loaded (/etc/systemd/system/pigpiod.service; disabled; vendor preset: disabled)
Active: active (running) since Fri 2015-09-18 19:51:36 CEST; 1min 16s ago
Main PID: 512 (pigpiod)
CGroup: /system.slice/pigpiod.service
`-512 /usr/local/bin/pigpiod
Sep 18 19:51:36 jannequin systemd[1]: Starting Gpio daemon...
Sep 18 19:51:36 jannequin systemd[1]: Started Gpio daemon.
Vérification que ça marche sur le classique exemple de la led clignotante (connectée ici sur le gpio 24 soit la pin 18) :
#!/usr/bin/env python
import time
import pigpio
GPIO_LED = 24
pi = pigpio.pi()
pi.set_mode(GPIO_LED, pigpio.OUTPUT)
while True:
pi.write(GPIO_LED, 1)
time.sleep(1)
pi.write(GPIO_LED, 0)
time.sleep(1)
pi.stop()
Liens
- Implementation of Linux GPIO Device Driver on Raspberry Pi Platform
- Les GPIO du Raspberry Pi
- setting udev rules for the GPIO?
- RPi.GPIO basics 6 – Using inputs and outputs together with RPi.GPIO – pull-ups and pull-downs
- RPi Low-level peripherals
- Tutorial: Raspberry Pi GPIO Pins and Python
- Les GPIO du Raspberry Pi