Ce tutoriel est un condensé de l’article sur le site Framboise314.
L’idée est de vous montrer comment contrôler des LED avec votre Raspberry Pi.
Tout d’abord directement à partir du Raspberry Pi lui-même,
puis à partir de n’importe quel appareil disponible chez vous, votre Smartphone ou votre tablette à partir d’une interface web…
L’électronique :
La partie électronique n’a rien de spécial, elle ne comporte que 8 LED avec leur résistance de protection…
La seule partie délicate est de bien relier chaque LED à la bonne broche sur le GPIO du Raspberry Pi.
On utilisera une bibliothèque appelée WiringPi crée par Gordon Henderson.
Attention : Les numéros de broches utilisés par cette bibliothèque ne sont pas les mêmes que ceux qui figurent sur le Raspberry Pi.
Vous verrez sur cette page pour la correspondance, car il faudra faire très attention à la version de Raspberry Pi que vous utilisez, le brochage n’est pas exactement le même en fonction de la révision du circuit…).
On va utiliser ici les broches de 0 à 7.
On utilisera des résistances entre 270 Ω à 560 Ω, plus on est vers les 560 Ω plus la luminosité des leds sera plus faible.
Installation et utilisation de la bibliothèque WiringPi
WiringPi est une bibliothèque qui simplifie beaucoup l’accès au GPIO du Raspberry Pi .
Cela signifie également que vous pouvez l’utiliser dans n’importe lequel de vos codes C.
Ici nous n’allons pas compiler et utiliser un programme en C mais l’utilitaire GPIO.
C’est un logiciel écrit par Gordon, qui fonctionne avec la bibliothèque.
Il vous permet de contrôler les E/S GPIO depuis un script bash ou directement en ligne de commande.
Cet utilitaire est cependant beaucoup plus lent qu’un programme écrit en C.
Installation de WiringPi
Gordon explique très bien la procédure sur son site Internet : http://wiringpi.com/download-and-install/.
Il faut juste télécharger le programme à partir de GIT, puis le construire en utilisant la commande ./build.
Ensuite, vous devriez être en mesure d’utiliser l’utilitaire GPIO.
Pour tester, il suffit de saisir la commande :
gpio mode 0 out
Si rien ne se passe, tout va bien.
Sinon, si vous lisez “command not found error” ou quelque chose d’approchant, vérifiez que vous avez correctement suivi le guide d’installation et de construction de la bibliothèque.
Bon, allons maintenant allumer et éteindre la première LED (broche 0).
Vous devez d’abord définir la broche en question comme étant une sortie.
Utilisez pour cela la commande :
gpio mode 0 out
“0” est le numéro de la broche et “out” signifie simplement qu’on la configure en sortie.
Maintenant, on va allumez la LED avec la commande :
gpio write 0 1
“0” représente à nouveau le numéro de la broche et “1” est son état (1 pour ON/ALLUMÉE et 0 pour OFF/ÉTEINTE ).
Si tout va bien, vous devriez voir briller la LED.
Pour l’éteindre, il suffit d’utiliser la commande :
gpio write 0 0
Attention : si vous souhaitez utiliser le numéro de broche réel (GPIO-17) à la place de celui de WiringPi (0 correspondant à GPIO-17), utiliser le drapeau -g dans votre commande.
Exemple :
gpio -g write 17 1
au lieu de
gpio write 0 1
Il existe aussi “gpio read” qui vous permet de lire l’état de la broche.
Ça peut sembler inutile lorsque la broche a été définie comme étant une sortie, mais cette commande vous permet d’être sûr de l’état de la broche lorsque la LED ne s’allume pas…
Son utilisation est aussi simple que précédemment, il suffit de taper :
gpio
read
0
Avec “0” indiquant le numéro de la broche.
La commande retourne l’état de la broche (soit 1 pour ON et 0 pour OFF).
La bibliothèque WiringPi autorise beaucoup d’autres commandes/fonctions
Si vous êtes plus curieux visitez la page http://wiringpi.com/reference/ (descriptif des fonctions de la bibliothèque) et https://projects.drogon.net/raspberry-pi/wiringpi/the-gpio-utility/ ou exécutez la commande “man gpio“.
Maintenant que vous savez mettre en œuvre cet utilitaire, Jouons un peu avec lui.
Vous pouvez d’abord, si ce ne est pas déjà le cas, contrôler votre Raspberry Pi à distance avec SSH.
Vous pouvez utiliser Putty sous Windows ou ServerAuditor pour votre Smartphone.
Alors amusez-vous avec les scripts bash comme celui-ci qui allume les 8 LED, attend 2 secondes, puis les éteint à nouveau :
#!/bin/bash
#set mode to output
for
i
in
0 1 2 3 4 5 6 7;
do
gpio mode $i out;
done
;
#turn on LEDs 0 to 7
for
i
in
0 1 2 3 4 5 6 7;
do
gpio write $i 1;
done
;
#wait 2 seconds
sleep
2;
#turn LEDs off
for
i
in
0 1 2 3 4 5 6 7;
do
gpio write $i 0;
done
;
Installation d’un serveur web et mise en place du site web
Contrôler des LED à distance avec SSH est plutôt cool mais l’interface (la console) n’est pas très conviviale et taper les commandes à chaque fois se révèle long et ennuyeux.
C’est pourquoi nous avons besoin d’une interface graphique pour notre projet.
Programmer une application pour chaque système d’exploitation (IOS, Android, Windows Phone, Mac, Linux, Windows, …) serait trop long et exigerait de connaître quantité de langages différents pour produire… presque rien.
Il faudrait aussi programmer une application qui s’exécuterait sur le Raspberry Pi.
Procéder ainsi serait exagéré et se traduirait par un gaspillage de temps.
C’est pourquoi un site ou une page web se révèle être la meilleure solution car il est compatible avec tous les périphériques et vous avez “seulement” besoin de connaître quatre langues :
- Le HTML (pour le squelette de la page),
- Le CSS (le style de la page),
- Le PHP (pour gérer les interactions avec le serveur)
- Et le JavaScript (pour gérer les interactions avec l’utilisateur).
Nous avons en effet besoin d’installer un serveur Web sur le Raspberry Pi.
Dans notre cas, nous n’avons pas besoin d’une base de données MySQL, juste d’un serveur HTTP et de son extension PHP.
Après la mise à jour de votre Raspberry Pi avec l’habituelle commande “sudo apt-get update && sudo apt-get upgrade“,
tapez :
sudo
apt-get
install
apache2 php5 libapache2-mod-php5
La commande ci-dessus installe le serveur HTTP Apache et l’extension PHP5.
Vous pouvez maintenant tester si votre serveur fonctionne en tapant l’adresse IP de votre Raspberry Pi dans votre navigateur.
Vous devriez maintenant voir une page indiquant “It works !” ainsi que deux autres lignes.
Si vous n’obtenez pas ça, alors vérifiez l’adresse IP de votre carte, essayez de réinstaller Apache ou redémarrer votre Raspberry Pi.
Cette page affiche que votre serveur Apache fonctionne correctement mais ne donne pas d’information sur son extension PHP.
Pour vérifier cette dernière, accédez à votre répertoire “/var/www/” en utilisant la commande :
cd
/var/www/
Si vous utilisez maintenant la commande “ls“, vous devriez avoir un seul fichier nommé “index.html“.
Ce fichier correspond à la page qui affiche “It works !“.
Vous pouvez maintenant le supprimer (“sudo rm index.html“) et en créer un autre appelé “index.php” avec :
sudo
nano index.php
Ensuite, tapez le texte suivant:
<?php
phpinfo ();
?>
Après l’enregistrement à l’aide de ^ o (Ctrl + o), sortez de l’éditeur nano avec ^ x (Ctrl + x).
Maintenant, si vous actualisez votre navigateur, vous devriez voir une page très longue, avec beaucoup d’informations sur votre serveur et sur PHP.
Si vous ne la voyez pas, vérifiez votre fichier index.php, essayez de réinstaller PHP ou essayez de comprendre l’erreur affichée à la place de la page attendue (effectuez une recherche sur Google si nécessaire).
Si les deux pages s’affichent correctement, vous avez maintenant un serveur Apache/PHP entièrement fonctionnel mais créer des pages en utilisant à chaque fois nano est ennuyeux et pas très confortable.
Nous aurons en effet besoin de transférer des fichiers de votre ordinateur à votre Raspberry Pi.
Vous pensez peut-être installer un serveur FTP, mais ce n’est pas nécessaire, vous pouvez transférer des fichiers en utilisant le protocole SFTP.
Tout ce dont vous avez besoin est un client SFTP sur votre ordinateur.
Personnellement j’utilise WinSCP pour Windows mais il y a Cyberduck pour Mac et Filezilla pour Linux.
Si vous essayez transférer des fichiers avant de lire ce qui suit, vous aurez probablement des problèmes comme “accès refusé” ou “écriture interdite”.
C’est dû au fait que l’utilisateur propriétaire du répertoire www n’est pas pi.
En effet, si vous essayez la commande “ls -l /var/www“, vous verrez que seul root (le super-utilisateur) est propriétaire le répertoire www.
Vous pouvez (comme moi) utiliser la commande :
sudo
chown
-R pi
/var/www
Cette commande modifie les droits ou créer un groupe nommé www-data dans lequel vous placerez l’utilisateur pi.
Utilisez ensuite la commande :
sudo
chown
-R www-data
/var/www
Le drapeau -R indique que la commande est récursive.
Ce qui signifie que l’utilisateur/groupe ne possède pas que le répertoire lui-même, mais aussi tout ce qu’il y a à l’intérieur (index.php par exemple).
Votre serveur est prêt à travailler et à recevoir des pages Web.
Amusez-vous avec lui si vous connaissez HTML, CSS et PHP.
Contrôler les LED en PHP
Maintenant que nous avons un serveur Web et une bibliothèque, mettons tout ça ensemble.
PHP signifie “PHP: Hypertext Preprocessor”, c’est un langage de script côté serveur.
Cela signifie que le code PHP est exécuté par le serveur (à chaque fois que la page est demandée) et qu’il n’est pas visible par le client.
Exécuter des applications avec un code PHP peut être fait avec deux fonctions différentes : exec (pour exécution) et le system. Commençons par la fonction system : elle prend deux paramètres: “system (string $command, int $return_var)“,
le premier paramètre est la commande à exécuter et le second est le résultat renvoyé par la commande exécutée.
Le second paramètre n’est pas obligatoire. Vous pouvez utiliser cette fonction si vous n’attendez pas de réponse de la commande exécutée.
Ainsi, vous pouvez l’utiliser si vous devez exécuter les commandes “gpio mode 0 out” ou “gpio write 0 1“.
Par exemple :
<?php
system (
"gpio mode 0 out"
);
system (
"gpio write 0 1"
);
?>
Ensuite, la fonction “exec“. Cette fonction fait exactement la même chose que “system“, mais elle lit et stocke ce que la commande affiche. Elle prend trois paramètres : exec (string $command, array $output, int $return_var ), $command et $return_var sont les mêmes paramètres et la seule différence est le tableau $output.
Comme son nom l’indique il va stocker la sortie de la commande dans un tableau.
Ainsi, vous pouvez utiliser cette fonction si vous avez besoin de ce qu’affiche une commande comme avec le “gpio read 0”.
Par exemple :
<?php
exec
(
"gpio read 0"
, $status );
print_r ( $status );
?>
Vous pouvez maintenant exécuter à peu près toutes les commandes que vous voulez, mais nous allons prendre un petit exemple pratique en PHP : Nous allons allumer les voyants 0 à 7, attendre deux secondes, puis les éteindre.
C’est exactement ce que nous avions fait avec le script bash.
Editez le fichier index.php et insérez y le code suivant :
<?php
$status = array ( 0 );
//set
pins mode to output
for
($i = 0; $i <= 7; $i ) {
system (
"gpio mode "
.$i.
" out"
);
}
//turns
on the LEDs
for
($i = 0; $i <= 7; $i ) {
system (
"gpio write "
.$i.
" 1"
);
}
//reads
and prints the LEDs status
for
($i = 0; $i <= 7; $i ) {
exec
(
"gpio read "
.$i, $status );
echo
( $status[0] );
}
//waits
2 seconds
sleep
( 2 );
//turns
off the LEDs
for
($i = 0; $i <= 7; $i ) {
system (
"gpio write "
.$i.
" 0"
);
}
?>
L’interface web
Fabriquons l’interface !
Chaque image d’une touche correspondant à une LED, donc si vous cliquez sur une de celles-ci, la LED correspondante sera allumée/éteinte et l’image sera modifiée, passant de vert à rouge.
Conclusion et des idées d’améliorations
Ce petit projet était amusant à expliquer en détail et j’ai beaucoup appris en le réalisant.
J’espère qu’il en sera de même pour vous. Toutefois, le contrôle de LED n’est pas très utile.
C’est pourquoi ce que nous avons fait est plutôt un outil qu’un véritable projet.
C’est bientôt Noël (dans environ un mois et demi de ce jour où j’écris le tutoriel) alors pourquoi ne pas remplacer les LED par des relais et contrôler les lumières autour de votre maison.
Il y a quelques très bonnes cartes relais pour le Raspberry Pi sur Ebay et plus généralement sur Internet.
Sinon, et si vous n’avez pas peur de travailler sur votre maison, vous pouvez même contrôler les lumières de la maison, les portes de garage, machine à café, système de chauffage, volets roulants…
La seule limite est votre imagination.
En outre, avec PHP, vous n’êtes pas limité à écrire ou lire le GPIO.
Vous pouvez utiliser plus complètement l’utilitaire GPIO et donc interagir avec d’autres appareils équipés d’un UART ou de tout autre protocole.
Vous pouvez également utiliser le PWM (Pulse Width Modification) pour contrôler des servos, …
Poster un Commentaire