Il est arrivé! La nouvelle fournée de RaspberryPi a été envoyée et un modèle vient de me parvenir. Pour rappel, le RaspberryPi est un ordinateur à 35$ muni d'un processeur ARM11 cadencé à 700Mhz, d'une carte graphique performante, de 2 ports USB, d'une carte réseau et enfin, mais surtout, de GPIO. C'est bien évidemment ces dernières qui m'intéressent.
A peine déballé et branché, la première chose que j'ai souhaité faire, c'est changer les états des entrées/sorties. Les premiers tests sont concluants.Je ne suis pas un expert linux, mais en cherchant un petit peu j'ai mis la main sur les lignes de commandes permettant de configurer les broches en Input et Output, lire ou écrire les valeurs ainsi que d'autres options. Dans la suite de cet article retrouvez étape par étape la procédure utilisée.
Le premier essais est de changer les états, lire et écrire les broches d'entrées/sorties directement en ligne de commande depuis le terminal linux. Après je regarderai comment le faire depuis une page PHP ou un programme C.
J'utilise la distribution Debian "Squeeze" adaptée à RaspberryPi. Cette distribution est conseillée pour débuter. Ceux qui n'ont pas encore installer leur mini-pc, je vous renvoie directement au site officiel pour les explications: RaspberryPi Download.
Le RaspberryPi possède un header de 26 broches depuis lequel on a accès aux différentes IO.
A noter que les boches GPIO0 et GPIO1 sont connectées à une résistance de pull-up de 1.8k. et que GPIO14 et GPIO15 peuvent servir pour la liaison UART.
Configurer et utiliser les GPIO depuis des lignes de commande linux
Les entrées/sorties peuvent s'interfacer directement depuis des fichiers du système linux. Ce mode d'accès permet de gérer les conflits entre deux programmes qui voudraient avoir accès à la même ressource en évitant que ces derniers n'accèdent en direct aux registres du processeur. (NB: c'est pour ces mêmes raisons que depuis windows 2000 on ne peut plus accéder au port parallèle en utilisant directement le registre 0x378 via les commandes out et in)
Depuis le genre de "menu démarrer" du système, dans la rubrique "Other", lancez "Terminal".
La première étape est de s'octroyer les droits en écriture sur ces fichiers:
sudo chmod 666 /sys/class/gpio/export
On initialise ensuite la broche que l'on souhaite utiliser (ici pour la GPIO 0)
echo « 0 » > /sys/class/gpio/export
Avec cette ligne de commande, un nouveau répertoire va apparaitre et se nommera "gpio0"
De nouveau pour ce répertoire, s'ocroyer les droits en écriture sur les fichiers "direction", "value" & "active_low"
sudo chmod 666 /sys/class/gpio/gpio0/value
sudo chmod 666 /sys/class/gpio/gpio0/direction
sudo chmod 666 /sys/class/gpio/gpio0/active_low
"Value" est le fichier d'échange permettant de lire ou envoyer l'état d'une broche. "Direction" est le fichier permettant de configurer la broche en entrée "in" ou sortie "out". "Active_low" permet d'inverser la logique de la broche : Si 0 Volt alors 1 Si 3.3 Volt alors 0.
Configuration en entrée:
echo “in” > /sys/class/gpio/gpio0/direction
echo "0" > /sys/class/gpio/gpio0/active_low (0 quand 0Volt, 1 quand 3.3Volt)
Pour lire l'état de la sortie:
cat /sys/class/gpio/value
Configuration en sortie:
echo “out” > /sys/class/gpio/gpio0/direction
Pour écrire l'état de la sortie:
echo "1" > /sys/class/gpio/gpio0/value (Etat haut 3.3V)
echo "0" > /sys/class/gpio/gpio0/value (Etat bas 0V)
En connectant une led ou un voltmètre on remarque immédiament le changement d'état de la broche.