Utiliser les ports GPIO

L’un des intérêts du raspberry est la possibilité de connecter et de programmer l’utilisation de son port GPIO. Que ce soit en écriture (envoi d’information vers l’extérieur) ou en lecture (réception d’information de l’extérieure sur des capteurs. Cette programmation peut se faire dans différents langages.

Une fois le raspberry installer sur sa carte sd, nous pouvons commencer à l’utiliser dans un domaine domotique ou robotique. Attention cet article ne va pas vous transformer en « domoticien » mais va permettre de commencer à utiliser votre framboise.

Pour commencer, les ports peuvent être contrôlés de plusieurs manières :

  • Par des commandes shell
  • par du python
  • Par WiringPi

Nous allons voir pour l’instant l’utilisation de WiringPi qui est une petite bibliothèque bien pratique pour utiliser les I/O de notre raspberry Pi.

Liste des ports raspberry pi 2

Voici le connecteur sur le raspberry (la source ):

connecteur gpio du raspberry
connecteur gpio du raspberry

Voici la table de correspondance obtenue avec la commande (gpio readall ) et après une petite mise en forme :

port_gpio
Port GPIO du Raspberry

Installation de WiringPi

Tout d’abord, nous allons commencer par installer le paquet qui va bien, mais avant une petite mise à jour peu faire du bien (article sur la maj), voila, ceci fait à la suite :
Il faut se rendre sur la page du git.drogon.net, ensuite cliquer sur le premier « snapshot » sur le côté droit, le téléchargement se lance. Ensuite, ouvrer votre terminal et se placer dans le dossier contenant l’archive. Maintenant :

sudo tar xfz wirongPi-XXXX.tar.gz // remplacer les XXXX par le numéro de version 
cd wiringPi-XXXXX // pour se placer dans le dossier 
./build // pour compiler et installer la librairie

Il existe une autre méthode, mais à l’heure où j’écris ce post, elle ne fonctionne plus, je l’a mets :

Installation du paquet git

sudo apt-get install git-core

Mettre à jour wiringPi

Dans le cas où vous avez déjà installer le git de wiringPi

cd wiringPi 
git pull origin

Obtention de wiringPi

git clone git://git.drogon.net/wiringPi

Installation de wiringPi

cd wiringPi
./build

Test de fonctionnement de wiringPi

Pour tester la bonne installation :

gpio -v // affiche les information sur wiringPi 
gpio readall //lis toutes les informations sur les I/O

Noter que la seconde est très intéressante, car elle liste le nom, l’emplacement, le statut des ports actuels.

Utilisation des ports

En écriture pour allumer / éteindre une led

Le câblage :

câblage allumer une led
câblage allumer une led

Il faut tout d’abord dire que ma pin est une sortie :

gpio mode 4 out // mon pin qui s'appelle "4" est une sortie

Commande pour l’allumer :

gpio write 4 1 // mis à l'état 1 de ma pin

Commande pour l’éteindre :

gpio write 4 0 // mis à l'état 1 de ma pin

En lecture

On va légèrement complexifier la chose, on va utiliser un bouton :

câblage bouton et led
câblage bouton et led

Maintenant nous allons un peu coder (en bash) mais rien de compliquer, ouvrir son éditeur de texte favori et y mettre ce petit code

#!/bin/bash

setup ()
{
     echo Setup
     gpio -g mode 4 in ##initalisation du pin GPIO.4 comme entrée\n
     variable=0 ##initialisation de ma variable de compteur\n
}

waitButton ()
{
     echo -n "Waiting for button ... "
     while [ `gpio -g read 4` = 1 ]; do
          sleep 0.1 ##je viens lire la valeur sur le pin GPIO.4, tant qu'il est au niveau haut, j'attends
     done
     variable=`expr $variable + 1` ##j'incrémente ma variable
     echo "Got it "$variable
}

setup
while [ "$variable" -lt 100 ]; do
     waitButton ##tant que la variable est inférieur à 100, j'exécute la fonction waitButton
done

J’ai utilisé le petit tutoriel de pobot.org avec une petite modification, j’utilise un bouton qui ne reviens pas en place et je veux sortir automatiquement sans avoir à fermer mon terminal ni action particulière.

Dans mon cas, mon code prend en compte le niveau logique, je le modifie une dernière fois pour qu’il se fasse sur le changement de niveau :

#!/bin/bash

setup ()
{
     echo Setup
     gpio -g mode 4 in ##initalisation du pin GPIO.4 comme entrée
     variable=0 ##initialisation de ma variable de compteur
     niveau=`gpio -g read 4`##mon niveau est initialisé sur l'état actuel
}

waitButton ()
{
     echo -n "Waiting for button ... "
     while [ `gpio -g read 4` -eq $niveau ]; do
          sleep 0.1 ##je viens lire la valeur sur le pin GPIO.4, tant qu'elle est égale au niveau d'avant (donc pas de changement), j'attends
     done
     niveau=`gpio -g read 4` ##modification de ma variable niveau
     variable=`expr $variable + 1` ##j'incrémente ma variable
     echo "Got it "$variable
}

setup
while [ "$variable" -lt 10 ]; do
     waitButton ##tant que la variable est inférieur à 10, j'exécute la fonction waitButton
done

Voila, le script en bash fonctionne parfaitement.

N’hésitez pas à partager cet article, vous savez maintenant gérer des ports GPIO avec des niveaux logiques.

Laisser un commentaire