Raspberry Pi : Apprendre à réaliser une lampe à LED connectée

Internet des Objets - Contrôler des LED avec Twitter

Lucy Rogers

Traducteur

f-leb

Dans ce tutoriel, vous apprendrez comment réaliser avec des LED une boule lumineuse dont la couleur d'ambiance change en fonction des tweets. Aucune connaissance préalable en codage ou en électronique n'est requise.

NDLR : ce tutoriel s'appuie sur le projet CheerLights, « un projet de l'Internet des Objets créé par Hans Scharler qui permet de synchroniser des éclairages du monde entier sur une seule couleur grâce à Twitter. http://www.cheerlights.com ».

Pour contrôler CheerLights, un tweet doit être adressé à @cheerlights ou inclure « cheerlights » quelque part dans le message avec un nom de couleur, par exemple avec le tweet : « @CheerLights Paint the town red ». Cela provoquera une réaction en chaîne qui modifiera en rouge la couleur de tout dispositif lumineux ou application contrôlés par CheerLights, en même temps.

Commentez

- Titre : Raspberry Pi : Apprendre à réaliser une lampe à LED connectée

- Auteur : Lucy Rogers

- Traducteur : f-leb

- Parution : 28 décembre 2015

- Public visé :

- Licence : Le contenu de cet article est rédigé par TheMagPi et est mis à disposition selon les termes de la Licence Creative Commons Attribution - Pas d'Utilisation Commerciale - Partage dans les Mêmes Conditions 3.0 non transposé. Les logos Developpez.com, en-tête, pied de page, css, et look & feel de l'article sont Copyright ® 2013 Developpez.com.

Voir également :

- Raspberry Pi - Déballage et installation

- Raspberry Pi - Python et le port GPIO

- Raspberry Pi : Construire son propre système de détection d'obstacles au stationnement, par Simon Monk

- Raspberry Pi : Construire son propre système web de verrouillage de porte, par Simon Monk

- Raspberry Pi : Mettre son réfrigérateur sous surveillance, par Simon Monk

- Projet Raspberry Pi Zero : Réalisation d'un traceur GPS

- Utiliser des capteurs avec le port GPIO - Partie 1 - Détection de mouvement

- Utiliser des capteurs avec le port GPIO - Partie 2 - Capteur de température 1-Wire

- Utiliser des capteurs avec le port GPIO - Partie 3 - Télémètre à ultrasons

Sommaire

- I. Configuration matérielle

- II. Introduction

- III. Étape 1 : installation

- IV. Étape 2 : préparer le flux

- V. Étape 3 : modifier le flux

- VI. Étape 4 : allumer les LED

- VII. Étape 5 : connecter à Twitter

- VIII. Étape 6 : extraire la couleur

- IX. Notes de la Rédaction de Developpez.com

I - Configuration matérielle

- Un Raspberry Pi connecté à Internet

- Une carte d'extension LedBorg(1), mais à défaut, un jeu de LED rouge, verte et bleue, des résistances électriques (100 Ω, 220 Ω et 270 Ω), une plaque d'essai et des câbles feront bien l'affaire. (NDLR : encore mieux, une LED multicolore à cathode commune)

Image du montage avec trois LED rouge, verte et bleue

II - Introduction

Les picots qui se dressent sur le bord de la carte du Pi (ou les deux rangées de trous à l'emplacement du connecteur GPIO sur le Pi Zero) forment une passerelle avec des objets du monde physique et permettent d'interagir avec eux. Suivez les instructions pour utiliser ce port d'entrées-sorties (ou GPIO : General Purpose Input Output) avec l'outil de programmation visuelle Node-RED(2) et réaliser quelque chose de magique dont vous pourrez faire étalage avec fierté.

Quand vous maîtriserez votre système d'éclairage à LED et ses changements de couleur, il n'y aura plus de limites dans vos applications : l'allumer quand vous recevez un tweet, l'utiliser comme feux de signalisation pour surveiller l'énergie domestique consommée, ou encore prévenir que le bus que vous devez prendre va arriver.

III - Étape 1 : installation

Avant d'allumer votre Pi, connectez le matériel. Si vous utilisez la carte d'extension LedBorg, connectez-la selon les instructions du site du constructeur. Si vous utilisez des LED classiques, connectez-les comme indiqué sur l'image précédente du montage.

Vous devrez démarrer sur la distribution Raspbian Jessie et avoir votre Pi connecté à Internet. Ouvrez Node-Red - cliquez sur Menu, Programming, puis Node-RED - et une console s'ouvrira. La console devrait afficher un message du type :

« Once Node-RED has started, point a browser at http://192.168.X.XXX:1880 »

Si vous êtes sur un Raspberry Pi 2, vous pouvez ouvrir Node-RED dans un navigateur à l'adresse http://127.0.0.1:1880, ou encore localhost:1880, à condition d'être connecté à un réseau. Si vous êtes sur une version plus ancienne du Pi, il serait sans doute plus confortable de s'y connecter à partir du navigateur d'un poste distant, avec l'adresse IP du Pi.

IV - Étape 2 : préparer le flux

Faites glisser un nœud inject depuis la section Input de la palette à gauche, et déposez-le dans la fenêtre de travail au centre. Le nom du nœud devrait changer en timestamp. Poursuivez avec un nœud debug depuis la section Output, nœud de couleur verte et qui prendra le nom msg.payload. Reliez les deux nœuds, pour cela cliquez sur le petit bouton gris à droite du nœud timestamp et faites glisser jusqu'au petit bouton à gauche du nœud msg.payload. Un fil va alors relier les deux nœuds. Cliquez sur l'onglet debug dans la fenêtre en haut à droite. Des cercles bleus au-dessus de chaque nœud indiquent que le flux n'a encore été ni sauvegardé ni déployé. Cliquez sur le bouton rouge Deploy situé en haut à droite, et les cercles bleus disparaissent. Activez l'injection de données dans le flux en cliquant sur le petit carré sur le côté gauche du nœud timestamp. Le message résultant (« payload ») apparaît dans l'onglet debug à droite (NDLR : par défaut, le temps écoulé en millisecondes depuis 1970).

Node-RED : un premier flux déployé

V - Étape 3 : modifier le flux

Double-cliquez sur le nœud d'injection timestamp. Une boîte de dialogue apparaît. Déroulez la liste Payload et sélectionnez « string ». Juste en dessous de « string », saisissez « red » qui sera le message envoyé. Dans le champ « name », complétez afin de renommer le nœud en « red », puis cliquez sur OK. Déployez à nouveau puis injectez la donnée en cliquant sur le carré sur le côté gauche du nouveau nœud « red ». Le message injecté (ici, « red ») apparaît dans l'onglet debug.

Ajoutez quatre nœuds inject supplémentaires et modifiez les messages injectés en « green », « blue », « white » et « black ». Connectez-les tous à un nœud msg.payload, puis déployez.

Injectez tour à tour chacune des couleurs, les messages injectés successivement dans le flux apparaissent dans l'onglet debug.

Node-RED : injection de couleur dans le flux

VI - Étape 4 : allumer les LED

Que vous utilisiez la carte LedBorg ou des LED séparées, faites défiler le contenu de la palette à gauche et faites glisser un nœud ledborg dans le flux courant. Connectez les nœuds d'injection au nœud ledborg. Déployez le flux et injectez les couleurs dans le flux en cliquant sur les nœuds, les LED devraient maintenant s'allumer de la couleur correspondante.

Node-RED : nœud LedBorg

VII - Étape 5 : connecter à Twitter

Ajoutez un nœud d'entrée twitter depuis la section social dans la palette, celui avec un petit bouton à droite. Double-cliquez sur le nœud et complétez avec l'identifiant de connexion Twitter (credentials) ; vous aurez besoin de vous connecter à Twitter. Dans le champ « for », ajoutez « cheerlights ». Afin de remettre de l'ordre dans les fils de connexion, ajoutez maintenant un nœud function, puis renommez-le en « spaghetti junction ». Dans ce tutoriel, les messages traverseront ce nœud sans être modifiés, mais du code JavaScript peut être saisi pour de futurs traitements.

Supprimez tous les fils reliant les nœuds, puis refaites les connexions en reliant les nœuds d'injection de couleur ainsi que le nœud twitter à l'entrée du nœud spaghetti junction. Connectez un nœud debug en sortie du nœud spaghetti junction.

Node-RED : connecter Twitter au flux

VIII - Étape 6 : extraire la couleur

Le nœud LedBorg n'accepte que certaines couleurs, et certains messages qui lui seront passés via Twitter comme « cheerlights » ne seront pas reconnus. Pour extraire les couleurs passées dans les messages, connectez un nœud switch (couleur jaune) en sortie du nœud spaghetti junction. Dans la liste déroulante de sa boîte de dialogue, sélectionnez « matches regex », puis à la suite tapez « red », et enfin cochez la case « ignore case ».

Cliquez sur « + rule » et répétez l'opération pour toutes les couleurs reconnues par le nœud ledborg dont vous trouverez la liste dans l'onglet info.

Connectez un nœud change (couleur jaune) à chaque sortie du nœud switch. Double-cliquez sur chacun d'entre eux et définissez leur nom et message à la couleur requise.

Connectez toutes les sorties des nœuds change à un autre nœud spaghetti junction, suivi d'un nœud ledborg avant de déployer. Vous pouvez avoir d'autres flux déployés sur le Pi (dans les différents onglets Sheet), mais assurez-vous qu'il y a un seul nœud ledborg de déployé et que les broches 11, 13 et 15 ne sont pas utilisées dans d'autres flux.

Node-RED : le flux complet

Debugs

Ajoutez des nœuds debug pour afficher les différents messages qui parcourent le flux.

_____

Watchdog timer

Ajoutez un nœud trigger en parallèle :

_____

Delay

Ajoutez un nœud delay pour limiter le nombre de messages par minute (ici, on limite à quatre messages par minute).

Pour récupérer le flux complet, copiez le code JSON ci-dessous dans le presse-papiers et importez-le dans Node-RED. Pour cela, cliquez sur l'icône du menu principal , puis import et clipboard. Collez le code dans la fenêtre et cliquez sur OK.

Cheerlights Ledborg Orb

[{"id":"f20eb6a2.c53588","type":"debug","z":"7e44005c.a095c","name":"","active":false,"complete":false,"x":419.89288330078125,"y":207.26187133789062,"wires":[]},{"id":"3d8c0321.24be84","type":"trigger","z":"7e44005c.a095c","op1":"1","op2":"black","op1type":"nul","op2type":"val","duration":"30","extend":true,"units":"s","name":"watchdog timer","x":422.97637939453125,"y":427.484130859375,"wires":[["eee7a6ad.61e8f","587b7b1d.689414"]]},{"id":"eee7a6ad.61e8f","type":"debug","z":"7e44005c.a095c","name":"","active":false,"complete":false,"x":554.3336181640625,"y":532.8333129882812,"wires":[]},{"id":"e07ebb0f.0a9ee","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"black","payloadType":"string","repeat":"","crontab":"","once":false,"x":135.33331298828125,"y":389.1665344238281,"wires":[["2305a2de.c321f6"]]},{"id":"5c8c48ea.c8c66","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":" white","payloadType":"string","repeat":"","crontab":"","once":false,"x":130.99993896484375,"y":349.833251953125,"wires":[["2305a2de.c321f6"]]},{"id":"e7d0e04b.e6946","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"red","payloadType":"string","repeat":"","crontab":"","once":false,"x":130.83334350585938,"y":222.49993896484375,"wires":[["2305a2de.c321f6"]]},{"id":"4c4d819f.50c0d","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"green","payloadType":"string","repeat":"","crontab":"","once":false,"x":127,"y":266.16656494140625,"wires":[["2305a2de.c321f6"]]},{"id":"dcb09d78.6dd6b8","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"blue","payloadType":"string","repeat":"","crontab":"","once":false,"x":131.5,"y":312.4999084472656,"wires":[["2305a2de.c321f6"]]},{"id":"50c872bc.6bde74","type":"inject","z":"7e44005c.a095c","name":"Many Colours","topic":"","payload":"purple,orange,cyan,magenta","payloadType":"string","repeat":"","crontab":"","once":false,"x":129.25009155273438,"y":433.0832824707031,"wires":[["2305a2de.c321f6"]]},{"id":"2305a2de.c321f6","type":"function","z":"7e44005c.a095c","name":"Spaghetti Junction","func":"\nreturn msg;","outputs":1,"noerr":0,"x":341.2263488769531,"y":323.84521484375,"wires":[["f20eb6a2.c53588","3d8c0321.24be84","587b7b1d.689414"]]},{"id":"8ab81a7.ece50e8","type":"delay","z":"7e44005c.a095c","name":"Limit messages per minute","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"4","rateUnits":"minute","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":1392.083251953125,"y":329.0396728515625,"wires":[["9a1e92f8.3af3a8","7a4f3029.b70d78"]]},{"id":"7a4f3029.b70d78","type":"ledborg","z":"7e44005c.a095c","name":"","x":1616.5081176757812,"y":330.36113834381104,"wires":[]},{"id":"587b7b1d.689414","type":"switch","z":"7e44005c.a095c","name":"Extract colour from tweet","property":"payload","rules":[{"t":"regex","v":"red","case":true},{"t":"regex","v":"green","case":true},{"t":"regex","v":"blue","case":true},{"t":"regex","v":"cyan","case":true},{"t":"regex","v":"magenta","case":true},{"t":"regex","v":"yellow","case":true},{"t":"regex","v":"pink","case":true},{"t":"regex","v":"purple","case":true},{"t":"regex","v":" white","case":true},{"t":"regex","v":"black","case":true},{"t":"regex","v":"amber","case":true},{"t":"regex","v":"orange","case":true},{"t":"regex","v":"oldlace","case":true},{"t":"regex","v":"warmwhite","case":true}],"checkall":"true","outputs":14,"x":695.2023315429688,"y":336.4046936035156,"wires":[["2c5d41e2.6b267e"],["dfaeb130.1a32b8"],["c3582f75.081af"],["fd25dac0.279a88"],["79141a23.9333ec"],["be40f657.c5e468"],["84483193.d12b7"],["6224acbf.d1721c"],["f8cb325a.465d1"],["b647a566.5a78d"],["8df80345.7a80d"],["8df80345.7a80d"],["b4b56c7e.87f2d8"],["b4b56c7e.87f2d8"]]},{"id":"dfaeb130.1a32b8","type":"change","z":"7e44005c.a095c","name":"Green","rules":[{"t":"set","p":"payload","to":"green"}],"action":"","property":"","from":"","to":"","reg":false,"x":943.2977294921875,"y":141.11911010742188,"wires":[["cb82046b.722ca"]]},{"id":"c3582f75.081af","type":"change","z":"7e44005c.a095c","name":"Blue","rules":[{"t":"set","p":"payload","to":"blue"}],"action":"","property":"","from":"","to":"","reg":false,"x":945.46435546875,"y":189.7381591796875,"wires":[["cb82046b.722ca"]]},{"id":"fd25dac0.279a88","type":"change","z":"7e44005c.a095c","name":"Cyan","rules":[{"t":"set","p":"payload","to":"cyan"}],"action":"","property":"","from":"","to":"","reg":false,"x":952.297607421875,"y":233.14288330078125,"wires":[["cb82046b.722ca"]]},{"id":"79141a23.9333ec","type":"change","z":"7e44005c.a095c","name":"Magenta","rules":[{"t":"set","p":"payload","to":"magenta"}],"action":"","property":"","from":"","to":"","reg":false,"x":958.98828125,"y":272.0714416503906,"wires":[["cb82046b.722ca"]]},{"id":"be40f657.c5e468","type":"change","z":"7e44005c.a095c","name":"Yellow","rules":[{"t":"set","p":"payload","to":"yellow"}],"action":"","property":"","from":"","to":"","reg":false,"x":954.369140625,"y":314.1904296875,"wires":[["cb82046b.722ca"]]},{"id":"84483193.d12b7","type":"change","z":"7e44005c.a095c","name":"Pink","rules":[{"t":"set","p":"payload","to":"pink"}],"action":"","property":"","from":"","to":"","reg":false,"x":960.39306640625,"y":365.5238037109375,"wires":[["cb82046b.722ca"]]},{"id":"6224acbf.d1721c","type":"change","z":"7e44005c.a095c","name":"Purple","rules":[{"t":"set","p":"payload","to":"purple"}],"action":"","property":"","from":"","to":"","reg":false,"x":957.6546630859375,"y":409.59527587890625,"wires":[["cb82046b.722ca"]]},{"id":"f8cb325a.465d1","type":"change","z":"7e44005c.a095c","name":"White","rules":[{"t":"set","p":"payload","to":"white"}],"action":"","property":"","from":"","to":"","reg":false,"x":959.0833740234375,"y":453.142822265625,"wires":[["cb82046b.722ca"]]},{"id":"b4b56c7e.87f2d8","type":"change","z":"7e44005c.a095c","name":"Warmwhite / Oldlace","rules":[{"t":"set","p":"payload","to":"oldlace"}],"action":"","property":"","from":"","to":"","reg":false,"x":984.7738037109375,"y":583.6190795898438,"wires":[["cb82046b.722ca"]]},{"id":"b647a566.5a78d","type":"change","z":"7e44005c.a095c","name":"Black","rules":[{"t":"set","p":"payload","to":"black"}],"action":"","property":"","from":"","to":"","reg":false,"x":962.89306640625,"y":497.5,"wires":[["cb82046b.722ca"]]},{"id":"8df80345.7a80d","type":"change","z":"7e44005c.a095c","name":"Amber / Orange","rules":[{"t":"set","p":"payload","to":"amber"}],"action":"","property":"","from":"","to":"","reg":false,"x":975.5595703125,"y":542.793701171875,"wires":[["cb82046b.722ca"]]},{"id":"2c5d41e2.6b267e","type":"change","z":"7e44005c.a095c","name":"Red","rules":[{"t":"set","p":"payload","to":"red"}],"action":"","property":"","from":"","to":"","reg":false,"x":942.53564453125,"y":92.5,"wires":[["cb82046b.722ca"]]},{"id":"1d018135.689adf","type":"debug","z":"7e44005c.a095c","name":"","active":true,"console":"false","complete":"false","x":1284.638671875,"y":207.3174285888672,"wires":[]},{"id":"9a1e92f8.3af3a8","type":"debug","z":"7e44005c.a095c","name":"","active":true,"console":"false","complete":"false","x":1531.5,"y":211.34523010253906,"wires":[]},{"id":"cb82046b.722ca","type":"function","z":"7e44005c.a095c","name":"Spaghetti Junction","func":"\nreturn msg;","outputs":1,"noerr":0,"x":1160,"y":335,"wires":[["1d018135.689adf","8ab81a7.ece50e8"]]},{"id":"8878145d.01e828","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"black","payloadType":"string","repeat":"","crontab":"","once":false,"x":1384.5,"y":591.34521484375,"wires":[["7a4f3029.b70d78"]]},{"id":"9d5d5967.9fe16","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"white","payloadType":"string","repeat":"","crontab":"","once":false,"x":1384.5,"y":546.34521484375,"wires":[["7a4f3029.b70d78"]]},{"id":"904c1593.78594","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"cyan","payloadType":"string","repeat":"","crontab":"","once":false,"x":1379.5,"y":502.34521484375,"wires":[["7a4f3029.b70d78"]]},{"id":"241b66e0.2f3522","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"green","payloadType":"string","repeat":"","crontab":"","once":false,"x":1385.5,"y":454.34521484375,"wires":[["7a4f3029.b70d78"]]},{"id":"fbe7b1d5.761d1","type":"inject","z":"7e44005c.a095c","name":"","topic":"","payload":"red","payloadType":"string","repeat":"","crontab":"","once":false,"x":1385.4999999999998,"y":398.3452148437499,"wires":[["7a4f3029.b70d78"]]},{"id":"bb194307.748e4","type":"twitter in","z":"7e44005c.a095c","twitter":"","tags":"cheerlights","user":"false","name":"cheerlights","topic":"tweets","x":124.99996948242188,"y":175,"wires":[["2305a2de.c321f6"]]}]

Sur la photo, les LED sont recouvertes d'une balle de ping-pong percée et décorée à l'occasion pour diffuser une lumière d'ambiance colorée.

IX - Notes de la Rédaction de Developpez.com

Cet article est une traduction adaptée de l'article paru dans le n° 41 du magazine TheMagPi, sous le titre CheerLights Orb.

Nous remercions les membres de la Rédaction de Developpez pour le travail de traduction et de relecture qu'ils ont effectué, en particulier :

- f-leb

- Lolo78

- deussys

Merci également à Claude Leloup pour sa relecture orthographique.

(1)LedBorg : une petite carte d'extension avec trois LED rouge, verte et bleue que l'on peut brancher directement sur le port d'entrées-sorties GPIO du Pi. https://www.piborg.org/ledborg

(2)Node-RED : un outil open source développé par IBM permettant de mettre au point des applications IoT en un tournemain. Avec Node-RED, il est possible de gérer le flux de données de façon visuelle, en assemblant des briques (des nodes) dans l'interface. L'outil s'appuie sur des technologies issues du web, dont Node.js. Node-RED est maintenant installé par défaut sur Raspbian avec les modules supplémentaires pour interagir avec le port d'entrées-sorties GPIO du Pi. http://nodered.org/