Aller au contenu

Allumer et éteindre des diodes avec le rpi !

Tuto Raspberry pi 4 ovh
Publié dans Tutoriels · 30 Mars 2012
Tags: DIODELEDRASPBERRY

Créer un tableau de bord connecté au net (ou comment augmenter le nombre de GPIO).

Pour passer le temps je vous propose tout de même un petit exercice de style :

On vas allumer et éteindre des diodes avec le rpi !

Nous allons construire un petit “tableau de bord” lumineux qui vas nous avertir de l’état de nos divers serveur, blog, site web, machines connectées au réseau (imprimantes, téléphone, fax etc..) en temps réel ! Chez moi ça donne ça :

image

L’objectif est donc de relier plusieurs diodes au rpi et de créer un système de “ping” (pour que la génération facebook me comprenne : c’est comme un “poke” mais pour les machines :p) régulier qui vas aller interroger certaines ip et allumer les led:

  • En rouge si l’ip ne répond pas
  • En vert si elle répond.

Vous l’aurez peut être remarqué, nous utilisons ici des LED qui ont la particularité de pouvoir afficher deux couleurs : vert et rouge.

Ce petit composant est assez intéressant en plus d’être très simple à utiliser, 3 pattes :

led

  • La patte du milieu doit être relié a la masse comme pour une LED normale
  • La patte de droite (patte extérieure la plus courte) si elle est alimentée allumera la diode en rouge
  • La patte de gauche(patte extérieure la plus longue) si elle est alimentée allumera la diode en vert
  • Si les deux pattes (gauche et droite) sont alimentées, la diode sera à la fois rouge et vert et donnera une “lueur jaunâtre”

Ce composant est donc très intéressant et enfantin à utiliser, notez qu’il existe aussi des diodes dites RVB qui vous permettront
d’utiliser trois vrais couleurs : vert, rouge et bleu.

Nous nous contentons ici des RV (rouge vert) parce que c’est un peu moins cher, plus simple à utiliser et que ça suffit aux  besoins de l’exercice, nous reparlerons des RVB dans un prochain tuto de toute manière...

Celles ci sont donc formidouble (doublement formidables) mais ont tout de même quelques inconvénients:

  • Elles sont assez chères (1,03€ les 10, ok c’est pas la ruine mais pour des LED c’est cher)
    Elle ont trois pattes chacune, donc beaucoup de choses à relier quand vous avez 8 LED comme ça à brancher
    Si on compte le nombre de pattes à relier au RPI pour 8 led, ça nous fait 2*8 = 16 GPIO de pris (plus la masse qu’ont relie à toutes les pattes centrales des diodes).

Pour le premier problème, il y a ebay, pour le second : l’huile de coude et pour le troisième : les shift registers !

“Nié ! shift what?”

C’est le second élément nouveau dont je vous parlais (le premier étant la diode RV évidemment).

Pour faire simple, un shift register est un composant électronique tout plein de papattes qui permet de multiplier vos sorties GPIO et ce, quasiment à l’infinis.

74hc595n-dscn3898

Avec le shift register que nous allons utiliser par exemple, nous n’auront besoin que de trois sorties GPIO du rapsberry PI pour simuler les 16 GPIO dont nous allons avoir besoin avec les LED.

Inutile donc de vous spécifier que dans le cadre de notre projet domotique qui pompe pas mal de GPIO, c’est un gros plus !

  • Avantage de notre shift register :
    C’est pas cher
    C’est pas gros
    C’est assez simple d’utilisation
    Ça peut s’additionner pour multiplier le nombre de sorties indéfiniment ou presque(je vous expliquerais)
    Ça ne prends que 3 GPIO max
  • Les inconvénients :
    Ça prend tout de même 3 GPIO !!
    Ça complique légèrement le code (mais c’est pas dramatique)
    Ça ne fonctionne que pour les GPIO en sortie (donc pour les entrées il faudra prendre un autre type de shift register un peu plus complexe)

Assez déblatéré comme un chauve à lunette de la fac ! Il est temps de mettre les patounes dans l’cambouis !!

Le matériel :

  • Notre fidèle raspberry PI
    2 shift registers 74HC595 (je les ai commandé ici pour 3,48 les 20, vu l’utilité yen aura jamais trop)
    8 LED RV.
    Quelques fils, éventuellement une breadboard (planche à trou pour éviter les soudures) pour nous simplifier le travail, et un peu de bon sens

Le schéma de branchement :

03

L’explication sur le shift register se trouvent en fin de tuto (je ne veux pas vous embrouillez tout de suite :p, mais j’vous ai prévu un mega dessin z’allez voir ! )

Code et Installation

Vous devez déjà avoir un serveur http (apache ou lighttpd peu importe) et PHP installé (si ce n’est pas le cas suivez le tuto)
Vous devez déjà avoir installé la librairie wiring PI (si ce n’est pas le cas suivez le tuto)

    • Récupérez le code PHP ici et placez le dans le répertoire de votre serveur http (/var/www par défaut) ce qui doit vous donner une arborescence comme : /var/www/ping/ping.php
    • Ouvrez le fichier ping.php et ajoutez les IP que vous souhaitez surveiller dans le tableau en début de code, vous pouvez spécifier une IP réseau (ex : 192.168.0.10), une IP web (ex : 55.75.32.203) ou une adresse (ex : http://google.fr)
    • Ajoutez un CRON (tâche planifiée) qui vas exécuter cette page PHP toutes les minutes, pour cela tapez la commande :

sudo crontab -e

Et ajoutez la ligne :

*/1 * * * * php /var/www/ping/ping.php

Les diodes devraient se mettre à jour toutes les minutes en fonction des IP configurées, n’hésitez pas à lancer le script manuellement depuis votre navigateur (http://adresse.du.rpi/ping/ping.php) dans le cas ou ça ne fonctionne pas avec le cron :).

L’explication

La tâche planifiée (le cron) qu’on à mis en place vas exécuter toutes les minutes le fichier php contenant notre code.

Le fichier php vas, interroger chaque IP que nous avons renseignées pour savoir si elles “répondent”.

On part alors du principe qu’une LED vas représenter la réponse d’un IP :

Si l’ip répond:  PHP vas mettre un port GPIO du shift register à 1 qui correspond à la couleur verte de la led liée.

Si l’ip ne répond pas:  PHP vas mettre un port GPIO du shift register à 1 qui correspond à la couleur rouge de la led liée.

“Tout ça c’est bien beau mais on ne comprends toujours pas comment manipuler un shift register !!”

J’ai gardé le meilleur pour la fin !!

Comme c’est un concept (pourtant simple) qui ne cadre pas avec mon cerveau étriqué, j’ai fait un petit dessin pour que mes semblables trépanés du bulbe et moi on se comprenne, mémorisez bien la petite histoire suivante :

02

On notera qu’elle représente le fonctionnement exacte du shift register (du moin tel que je l’ai compris ^^), je m’explique :

Le shift register (la table) a 8 GPIO (8 Verres) qui peuvent être à 0 (vide) ou a 1 (plein).

On a pas le droit de toucher aux verres sur la table, pour modifier l’état d’un verre, on ne peux qu’en rajouter un nouveau (le fameux todd) en lui définissant une valeur (vide ou plein).

Sauf qu’en rajoutant Todd le verre, on pousse les autres et le dernier se fait éjecter de la table (die stupid glass ! die !!).

Il vas nous falloir trois “bouton” pour effectuer cette action : un bouton pour remplir ou laisser vide le verre, un bouton pour ajouter le nouveau verre sur la table (et donc pousser les autres) et un dernier bouton pour “valider” la nouvelle configuration de la table Sourire

3 bouton = 3 pattes du shift register branché au raspberry PI, il ne nous en faudra pas plus pour ouvrir/fermer les 8 GPIO du shift register de cette façon Sourire.

Maintenant voyons un ptit schéma simplifié du composant :

01

Les trois boutons dont nous parlions sont :

VALEUR” (en réalité nommé SER) qui vas remplir ou non le nouveau verre.
SUIVANT” (nommé en réalité SRCLK) qui vas ajouter le nouveau verre sur la table et pousser les autres
VALIDATEUR (en réalité RCLK) qui vas prendre en compte la nouvelle configuration Sourire

“Et “CONNECTEUR” alors ? Il sert à quoi?”

Il vas nous permettre de brancher d’autres shift register au premier, ce qui donnera l’équivalent d’un gros shift register de 16 GPIO avec deux shift de 8 par exemple Sourire.

CONNECTEUR devras être branché au VALEUR du shift register ajouté, il est possible de rajouter autant de shift les un sur les autre que vous le souhaitez, évidemment au bout d’un moment vous risquez d’avoir quelques problèmes de lenteur et d’alimentation si vous ne savez pas vous arrêter ^^ (je vais tapisser mes murs avec des shift register et dominer le mmooonde niark niark niark!!!).

“Et les papattes dont tu ne nous à pas parlé ?”

Dans notre contexte,elles sont un peu useless, disons qu’elles ont une fonction utile, mais que prendre un précieux gpio de plus sur le rasp pour ça c’est pas forcement nécessaire,voila le schéma avec les vrai nom des pattes :

74HC595-Shift-Register

(ça calme tout de suite hein ? :D)

SRCLR dont nous n’avons pas parlé, peut être passé en High puis low afin de remettre toute les pin du shift registrer à 0 (ce qui peut aussi être fait manuellement avec les 3 pin dont nous disposons déjà, d’ou le “un peu useless”)

OE quand à lui permet d’activer la sortie lorsqu’il est sur la masse (GND) et la désactive lorsqu’il est en High, on le laisse donc toujours branché à la masse.

C’est tout pour aujourd’hui ! Sourire Vous l’aurez compris, le principal intérêt de ce tuto est d’abord la notion de shift register qui vas nous permettre de jouer avec plus de GPIO sans trop d’efforts Tire la langue.

Notez qu’il existe plein de type de shift register, certains ont beaucoup plus de sorties, d’autres peuvent se comporter en entrée et en sortie (relativement pratique) etc etc..

Je vous conseille de vous en trouver un qui soit simultanément en entrée et en sortie et qui puisse se “stacker” à d’autre de ses confrères comme celui que nous avons vu, puis de vous créer une ptite carte à brancher sur le raspberry PI pour multiplier définitivement ses entrées sorties par “x” Sourire




Mentions Légales - raspberry-pi.ovh 2022 © Copyright- Raspberry Pi est une marque déposée de la Raspberry Foundation - Les contenus rédigés par raspberry-pi.ovh sont distribués sous license open source.
Retourner au contenu