DIY – Smartphone control RGB led strip with ESP8266
Voici un mini tuto qui va expliquer les quelques étapes pour réaliser un serveur web sur le board ESP8266, qui pilote une bande de led RGB. le tout contrôlé à distance via Wifi par une simple application windows phone (qui aurait pu être une app web directement hébergé par l’ESP, je viens seulement d’y penser…) L’idée, piloter à distance via son smartphone la couleur de la lumière d’une bande de led RGB. La démo : Outils / soft / materiel : 1 ESP 12 dev kit (ou avec un board moteur) 1 amplificateur (12V/24V) 4 fils de couleurs (blanc, rouge, vert, bleu) (connecteur male/femelle) 1 alimentation 12v ou 24v suivant votre bande led en sortie (optionnel un interrupteur) 1 ou plusieurs bandes led RGB (5050 pour moi) (exemple) 1 pince coupante ou a dénuder 1 tourne vis plat Node.js installé sur votre machine + le package esp8266 Lua Loader (windows) ou un autre soft de votre choix, ou en ligne de commande 1 smartphone (windows phone mais le code serait pas dur à réaliser sur iOS ou Android) Montage : Nous avons d’un coté l’application smartphone, autonome, connecté en wifi sur ma box. De l’autre le montage composé d’un module dev kit ESP 12 (ESP8266) relié par 4 fils (blanc pin 4, rouge pin 6, vert pin 7, bleu pin8) à l’amplificateur. Celui ci est alimenté en 12v et en sortie on a branché une bande led RGB avec 1 fil par couleur + un fil blanc (+12v). Vous n’êtes pas obligé d’avoir un amplificateur. Vous pouvez à la place réaliser un montage supplémentaire avec 3 moftsets (ici pour plus d’info). Mais il faut impérativement isoler le circuit ESP (5v) de celui de vos leds (12v ou plus) Par mesure de sécurité, je vous conseille l’amplificateur + un transfo 12v, c’est simple et pas de risque de prendre du 230v. Faites attention quand même ! Fonctionnement : L’esp boot sur le fichier init.lua. Celui ci va se connecter en mode station (paramétrable en AP si besoin) et obtenir une adresse IP de ma box (DHCP). Celle ci s’affiche (notez la pour la suite). Ensuite le code lance un serveur web http très simple, écoutant le port 80. Le serveur va donc traiter des urls de ce type http://192.168.1.18/?r=125&g=30&b=240&on=1 Les paramètres r, g, b correspondent à la couleurs désiré. Le paramètre on sert pour allumer ou éteindre la bande led. A ce stade, le serveur attend un ordre que l’on enverra depuis un smartphone. Pour savoir que mon serveur est démarré, je lance une petite séquence de lumière Code ESP: J’avais l’habitude de séparer mon code en plusieurs fichiers, histoire d’uploader mon code plus facilement (car c’est long) sur l’esp. Ce code https://github.com/couscousbzh/ESP8266-RGBServer vous permet de jouer avec. Il fonctionne tant que vous êtes connecté par usb. Mais dès que vous rebootez, c’est la catastrophe. Et je ne sais pas pourquoi. Donc lors de mon dev, tout ce passe normalement. Mais dès que je passe en mode prod, c’est dire une alimentation simple par usb de l’esp, ca ne fonctionne plus. Si quelqu’un sait pourquoi, pourriez vous me laisser un commentaire svp ? J’ai donc tout réunit dans un seul fichier init.lua, et c’est un peu mieux (ou pas). Vous le trouverez ici : https://github.com/couscousbzh/ESP8266-RGBServer/blob/master/initallinone.lua (pensez à le renommer en init.lua) Explication du code : Pour afficher une couleur, par exemple le rouge, on balance un niveau haut sur le fil rouge. Donc 5 volts avant ampli puis 12v en sortie. On a du rouge si le vert et bleu n’éclaire pas du tout. Sinon on a de la lumière blanche si le rouge vert bleu éclairent tous. En informatique, on représente souvent la couleur par un integer sur 8 bits c’est à dire un chiffre entre 0 et 255. Ecrit comme cela RGB(255,0,0) signifiera que l’on veut du rouge seulement. Pour mieux vous familiariser avec une palette de couleur RGB je vous conseille un utilitaire de dessin comme paint.net, photoshop ou des extensions pratique comme la pipette sur Firefox (colorzilla) ou Chrome. Si on veut du marron on doit avoir une moitié de rouge, pas de vert ni de bleu. Ce qui donnerait RGB(127, 0, 0) Voila, maintenant que l’on comprend la couleur traduite en RGB il faut comprendre comment fonctionne une bande led. En faite pour afficher que du rouge c’est simple, on balance 12V dessus. Mais pour afficher une moitié de rouge ? Et bien nous allons mettre du 12v puis du 0v puis du 12v etc… Ceci se traduira par un signal dit « signal carré ». Pour obtenir un marron, il faut alterner du rouge et du noir. A haute fréquence, l’oeil ne pourra pas distinguer le rouge du noir, mais verra le marron. Si la fréquence est trop basse, 1Hz par exemple (1Hz = 1 période par seconde) donc 0.5s de noir et 0.5 rouge, ce sera perceptible par l’oeil. Mise en application dans l’esp : Pour réaliser ceci nous allons utiliser pwm (pulse width modulation ou modulation de longeur d’onde) qui est une fonction livré avec l’API NodeMCU. pwm.setup(redPin, 500, 512) : ici nous allons initialiser le pin ‘redPin’ (le 6 dans mon cas) à une sortie de type PWM avec une fréquence de 500 Hz et un duty de 512 (valeur entre 0 et 1023). Considérez le duty comme un pourcentage. 0 = 0% et 1023 = 100% il suffit de convertir le chiffre de tout à l’heure compris entre 0 et 255 en chiffre de 0 à 1023. Facile c’est un multiple de 4 ! Attention toutefois, ici 1023 correspond à lumière éteinte. Donc l’opération consiste à faire 1023 – 4 * r où r correspond au chiffre compris entre 0 et 255. Le reste du code (partie serveur) est expliqué dans mes précédents articles. Code partie smarphone : Comme je le disais précédemment, on peut très bien coder cette partie en app Web avec des appels ajax par exemple ou bien la coder sur Android ou iOS. Pour ma part je l’ai…