Luciole v1.0 – Un contrôleur de LED RGB connecté (ESP8266) #1

Cela fait trois semaines que je n’ai pas posté d’article sur le blog, mais c’est pour une bonne raison ! Il faut savoir que j’ai plusieurs projets en parallèle, ce qui dilue plus ou moins mon temps libre ! Parmi eux, le chargeur de batterie solaire qui a fait l’objet d’une première partie d’article ici :

Ce projet a rencontré des difficultés, mais sachez que la seconde partie sortira. Cette semaine, j’aimerais vous parler d’un autre projet qui fera également l’objet de plusieurs parties. Vous l’avez surement lu dans le titre je parle ici d’un module de contrôle intelligent pour LED rgb !

Introduction

Il faut savoir que j’utilise depuis longtemps des LEDs RGB pour éclairer/donner une ambiance dans les pièces de chez moi. En effet, cette technologie flexible, pas gourmande en énergie et peu couteuse (sauf lampe LED connectée, type Philips) m’a complètement séduite !

Je dois également avouer que malgré les nombreux bandeaux de LED que j’ai pu tester, aucun n’a retenu mon attention par ses fonctionnalités et son esthétisme. Le genre d’achat où tu te dis « C’est trop bien ! SI j’avais connu ça avant…».

Ce qui me pose problème dans tout ce que j’ai pu expérimenter n’est pas la technologie utilisée (LED rgb), mais le système pour les piloter ! Souvent, vous tomberez sur des contrôleurs infrarouges. Bien qu’ils soient très peu couteux, mais également vite complexes à piloter si vous en avez une grande quantité… En effet, vous devez pointer avec une télécommande un récepteur IR (peut pratique si vous placez des LEDs dans un endroit étroit).

Vous trouverez des modules qui fonctionnent par liaison RF (beaucoup plus efficace), mais selon moi limités à l’utilisation de la télécommande. Le dernier type qui est aussi le plus complet et le plus cher est celui qui fonctionne en Bluetooth !

Généralement, une application accompagne le contrôleur LED pour pouvoir le contrôler depuis un téléphone! Ce genre de modèle propose une palette bien plus large de fonctionnalités. Mais à moins d’y mettre le prix, l’application qui ira avec, sera de piètre qualité…

Je me suis dit qu’il était temps de construire quelque chose de mieux en tout point ! Moins cher, plus de fonctionnalité, une interface ergonomique et un aspect extérieur potable. Ce projet se nommera Luciole, il s’agit pour le moment de la version 1.0

J’aimerais que le rendu final de ce projet montre qu’un amateur seul peut faire mieux que de grosses entreprises chinoises 😊

Ce premier article va rapidement passer en revue l’avancement et les fonctionnalités que possède Luciole à ce jour.

Hardware

Le microcontrôleur qui sera au coeur de Luciole sera le très connu ESP8266 sous sa forme ESP12F. J’ai décidé d’utiliser ce microcontrôleur premièrement parce que je le maitrise bien. Également parce que le champ de possibilité qu’offre l’accès internet est juste énorme et enfin parce qu’il fera office de serveur web, de contrôleur pour les LED, de liaison de donnée, ect… Bref, sa flexibilité nous permettra de simplifier au maximum son utilisation.

Les bandeaux de LED rgb fonctionnent dans la plupart des cas en 12v. Pour former la couleur souhaitée, il faut ajuster correctement le niveau de rouge de vert et de bleu.

Si l’on applique plus ou moins de courant aux bornes de la ligne rouge vert ou bleu (12v, et Gnd) on peut faire varier celles-ci donc la couleur perçue.

bandeauLEDrgb

Bien évidemment, il est impensable de piloter les LEDs directement avec l’ESP qui ne peut fournir qu’une centaine de mA max… Nous devrons donc utiliser des mosfet.

Les broches PWM de l’ESP permettrons de faire passer plus ou moins de courant au travers des mosfet. Ceux-ci permettront d’ajuster la quantité de courant circulant sur la ligne et ainsi l’intensité de chaque couleur. Pour piloter un ruban de LED, nous devrons donc réserver 3 broches PWM comme illustrer ci-dessous:

Si vous souhaitez reproduire ce circuit chez vous, voici la liste des composants qu’il vous faut:

Pour le moment et pour des raisons de simplicité, je développe sur un prototype de Luciole à base de wemos d1 mini. Cependant, la carte finale aura un connecteur permettant de la relier à un FTDI pour la programmer.

Sur le PCB…

Le connecteur aura la classique paire Rx/Tx et un Gnd. La plupart du temps, il est également nécessaire d’ajouter un bout RST et Flash qui permettra de positionner la carte en mode programmable. Pour faciliter les choses et pour gagner de l’espace, j’ai remplacé ces 2 boutons par 2 transistors qui seront reliés aux broches .. et .. du FTDI.

Du côté de l’alimentation, j’ai opté pour le LDO SPX3819M5-L-3-3 qui va permettre de réguler la tension de 12v. (il est représenté par un buck converter sur le schéma ci-dessus)

powerssupplyPärt

Le PCB

Tout ce beau monde sera positionné intelligemment sur la carte pour pouvoir facilement se brancher sur le côté du FTDI.

Ainsi au lancement de l’upload du code l’ESP12F passera en mode flash automatique !

Voici Luciole, une boite de 4.5cm sur 3cm qui contiendra le PCB. Afin de pouvoir rentrer dans ce compartiment récupérer d’un ancien module radio de contrôle LED.

IMG_20190509_183034

Cette carte finale possèdera en plus d’un bouton reset un connecteur d’entrée au 12v. L’autre côté du module, on retrouve une sortie pour le 12v le rouge, le vert et le bleu des LEDs. La position de l’entrée et de la sortie sont placés de manière à coller avec la forme de sa boite.

Software

Le plus gros boulot reste comme dans la plupart des cas la partie software de Luciole!

À vrai dire, je n’ai pas encore déterminé toutes les fonctionnalités que je vais rajouter, mais ce n’est pas un problème étant donné le temps que j’ai déjà passé à programmer les fonctionnalités basiques (très long)…

Dans un premier temps, le programme sera capable de déterminer s’il est connecté à la box internet ou non. S’il n’est pas connecté, il se mettra en mode point d’accès pour permettre à l’utilisateur d’entrer les identifiants de sa box à travers une petite page web.

La page web va simplement permettra de se connecter à votre WIFI!

Cette fonctionnalité est utilisée dans un grand nombre de produits qui demande un accès à internet ! En effet, l’idée c’est que n’importe qui puisse utiliser Luciole sans pour autant aller modifier le code haha !

La librairie Wifi manager est très bien faite et offre une solution clé en main (très simple) pour réaliser ça ! Je trouve malgré tout l’interface fade et pas très esthétique… J’ai donc retravaillé la librairie (sur l’aspect uniquement) pour rendre cette interface plus jolie selon moi !

Voici le lien du github de la librairie officiel puis de celle que j’ai modifiée !

Ce module aura toutes les fonctionnalités que j’ai l’habitude d’ajouter dans mes programmes, c’est à dire, la mise à jour OTA et un DNS pour éviter d’avoir à retenir l’adresse IP.

Arborescence:

Pour simplifier le programme, la page web sera stockée dans la mémoire spiffs de l’ESP et communiquera avec celui-ci à travers un tunnel websocket.

contenu de la mémoire de l’ESP

La page web aura un aspect simpliste et la majorité de l’espace sera occupé pour une roue de couleurs. Vous pourrez sélectionner la couleur que vous souhaitez et ajuster la luminosité des LEDs. La librairie JavaScript iro.js m’a permis d’ajouter une roue de couleur simple et avec toutes les options que je voulais le tout facilement!

Retrouvez tous les détails de cette API sur leurs sites : https://iro.js.org/

Même s’il est possible de personnaliser cette roue j’ai préféré la laisser comme telle ! Elle est largement suffisante selon moi ! La difficulté a été de comprendre comment envoyer le taux de rouge de vert et de bleu en temps réel à l’arduino pour qu’il puisse ajuster l’intensité des couleurs concernées !

J’ai utilisé une méthode colorPicker.on de la librairie pour redéfinir en temps réel une variable rouge,vert et bleu que je transmets par le biais tunnel websocket tout les 500ms.

Techniquement, si l’on transmet à l’arduino la couleur noire il éteindra les LEDs ! mais ce n’est pas très pro… C’est pourquoi j’ai rajouté un élégant petit switch qui permettra d’éteindre les LED et de couper la transmission continue des couleurs au tunnel Websocket !

Même si les LED sont éteintes vous pouvez bouger ou non le curseur de sélection de couleur. Noté que quand vous rallumerez les LEDs c’est la couleur pointée par le curseur qui sera visible !

Sauvegarde

Le dernier ajout que j’ai fait à ce jour est la possibilité de mettre en favori jusqu’à 4 couleurs ! C’est une fonctionnalité que je n’ai pas forcément avec mes bandeaux de LED actuelle, mais que je trouverai très pratique !

Le bouton de sauvegarde communique directement avec l’ESP à travers du websoket. L’ESP de son côté sauvegarde à l’intérieur d’un fichier .csv dans sa mémoire le code couleur que l’utilisateur à sélectionner.

Pour éviter toute saturation de la mémoire il compte le nombre de fois qu’il sauvegarde quelque chose et si ce nombre excède 4 (5) il va alors entrée dans le processus de suppression.

l’ESP va dans un premier temps sélectionner et stocker dans un tableau les 4 dernières couleurs puis va réécrire le contenu du fichier /save.csv en y plaçant uniquement les 4 dernières couleurs (en retirant la première donc…).

Du côté serveur web, quand l’on clique sur le menu déroulant le code parcourt les couleurs que l’on a sauvegardées et change le style de chaque case (grise de base) pour qu’elle s’accorde à cette couleur ! Une image vaut mieux que mille mots comme on dit.

À noter : pour interagir avec le fichier /sav.csv. j’ai utilisé la librairie JavaScript papaparse.js

Lorsque l’on clique sur la couleur souhaitée, le curseur de la roue de couleur se place précisément à l’endroit de celle-ci. Cela agit comme si nous l’avions placé nous même et de ce fait, les LEDs vont automatiquement s’actualiser (si elle n’est pas éteinte).

Dans le futur…

Beaucoup d’autres options vont surement être ajoutées dans un futur proche, mais pour le moment voilà ou j’en suis.

La prochaine étape c’est de commander et monter le PCB afin de réaliser les premiers tests sur le terrain. Le prochain article à ce sujet sera surement sur sortie de la version 1.0 de Luciole ! N’hésitez pas à vous abonner à la newsletter dans laquelle je partagerai peut-être plus de détails concernant certaines parties de la réalisation.

J’ai également commencer à créer un Github dans lequel je partage le code de Luciole ! Je n’ai pas encore écrit la documentation mais ça arrive bientôt!