Utilisation des GPIO
Aujourd'hui j'ai testé les GPIO de mon Raspberry. Cela me permettra par la suite d'acquérir par la suite les valeurs de mes curseurs.
Depuis la console
J’ai commencé par voir comment on pouvait faire pour définir et commander les GPIO directement depuis la console. Cela pour pouvoir faire des tests (vérifier la tension, tester avec un interrupteur), et aussi pour coupler avec une crontab (tâches exécutées périodiquement).
On commence par se positionner dans le dossier contenant les fonctions des GPIO.
cd /sys/class/gpio
On définit un GPIO (ici le numéro 24). Cela va créer un dossier gpio24 dans le dossier courant. Il contient les fonctions propres au GPIO 24
echo 25 > export
On se place donc dans ce dossier
cd gpio24
On définit ensuite la direction (entrée ou sortie) de notre GPIO 24. Ici en sortie. Pour une entrée il suffit de remplacer out par in.
echo out > direction
On lit l’état du GPIO. S’il est paramétré en sortie on verra s’il génère une tension ou non. S’il est paramétré en entrée on saura s’il reçoit une tension ou non.
cat value
On définit la valeur de notre GPIO (uniquement si il est paramétré en sortie). Si une led est branchée sur la broche du GPIO 24 (numéro 18) et sur la masse (broche 6), elle s’allume. Si on remplace le 1 par un 0 elle s’éteint.
echo 1 > value
On arrive donc facilement à commander les GPIO de notre framboise grâce à la console.
Avec Python
Bon jouer avec la console, c’est bien mais c’est vachement limité ! J’ai donc pensé à écrire un petit programme. Un petit coup de sudo telinit 5
Et me voici dans la superbe interface graphique de Raspbian. Sur le bureau se trouve un raccourci vers Python : mon programme sera en Python.
Après quelques recherches sur le web j’ai trouvé la librairie RPi.GPIO qui permet d’écrire et de lire sur les GPIO.
On commence par importer la librairie en changeant légèrement son nom pour plus de simplicité pour la suite.
import RPi.GPIO as GPIO
On initialise ensuite les GPIO (tous d’un coup)
GPIO.setmode(GPIO.BOARD)
On définit maintenant les directions des GPIO à utiliser. J’utilise là aussi le 24 en sortie et je rajoute le 25 en entrée. ATTENTION : cette bibliothèque n’attend pas le numéro des GPIO mais celui des broches physiques. Je vous met un tableau de correspondance (c’est mon image de référence qui me servira lors de la programmation en , il y a donc aussi les numéros pour la bibliothèque WiringPi utilisée plus tard).
GPIO.setup(18,GPIO.OUT) GPIO.setup(22,GPIO.IN)
Pour écrire sur un GPIO
GPIO.output(24,GPIO.HIGH) #Etat haut GPIO.output(24,GPIO.LOW) #Etat bas
Pour lire un GPIO
GPIO.input(25)
Attention : la fonction input ne renvoi rien de lisible par Python, il faut faire une comparaison avec GPIO.HIGH (état haut) ou avec GPIO.LOW (état bas).
Conclusion
L’accès aux GPIO est relativement simple que ce soit avec Python ou directement avec la console de notre Raspberry Pi. Cela état, j’ai effectué un test de vitesse et l’écriture d’une information sur un GPIO quelconque avec Python prend environ 25µ secondes. C’est relativement rapide mais pas assez pour générer un signal DMX (il faut que cela prenne 4µ secondes). L’utilisation du code C pourra diminuer ce temps. En revanche je compte utiliser le port série du RPi qui nous permettra sûrement d’atteindre cette vitesse. Mes recherches sont actuellement sur ce sujet.
A bientôt