Le site de nodeMCU Lua pour ESP8266 présente du code permettant de manipuler un ruban de Leds équipées du chipset WS2812B. Le dernier firmware de nodeMCU (0.95) n'intègre cependant pas encore la prise en compte de ce driver. Cela arrivera probablement avec les prochaines versions.
Les rubans de leds diffèrent beaucoup en fonction du chipset utilisé. Certains modèles utilisent 4 fils (Vcc, Gnd, Signal, Clock), d'autres 6 fils (Vcc, Gnd, Red, Green Blue, Clock) et d'autres 3 fils (Vcc, Gnd, Signal). C'est le cas du WS2812B qui n'utilise que 3 fils, les couleurs et l'horloge sont donc transmis par le même fil.
Les rubans de leds diffèrent beaucoup en fonction du chipset utilisé. Certains modèles utilisent 4 fils (Vcc, Gnd, Signal, Clock), d'autres 6 fils (Vcc, Gnd, Red, Green Blue, Clock) et d'autres 3 fils (Vcc, Gnd, Signal). C'est le cas du WS2812B qui n'utilise que 3 fils, les couleurs et l'horloge sont donc transmis par le même fil.
Vous pouvez cependant récupérer une version de firmware intégrant ce driver sur http://dangerousprototypes.com/forum/viewtopic.php?f=56&t=7026.
!!! ATTENTION, ce firmware fonctionne uniquement à 115200 bauds.
Ce driver permet avec quelques lignes de Lua d'animer un ruban de leds. Il est également livré avec une petite page HTML permettant de le manipuler directement depuis un browser Web.
Le firmware est composé de deux fichiers binaires 0x00000.bin et 0x10000.bin. Chargez les aux adresses indiquées.
Premiers essais
Une fois le firmware chargé, connectez vous à 115200 bauds et testez les commandes suivantes :-- Bleue
ws2812.write(3, string.char(255, 0, 0):rep(30))
-- Vert
ws2812.write(3, string.char(0, 255, 0):rep(30))
-- Rouge
ws2812.write(3, string.char(0, 0, 255):rep(30))
-- Jaune
ws2812.write(3, string.char(0, 255, 255):rep(30))
-- Noir
ws2812.write(3, string.char(0, 0, 0):rep(30))
-- Blanc
ws2812.write(3, string.char(255, 255, 255):rep(30))
Dans mon cas, j'ai un ruban de 1 mètre et 30 leds. Les couleurs sont encodées dans une chaîne de caractères. Chaque couleur de led est représentée par 3 couleurs primaires. L'ordre dépend de votre ruban : (Bleu, Vert, Rouge) ou (Rouge, Vert, Bleu) selon les cas.
Quelques animations
Voici quelques animations pour animer un peu votre ruban.Un arc en ciel :
rainbow_pattern = string.char(
0x00, 0x00, 0xff,
0x00, 0xaa, 0xdd,
0x00, 0xdd, 0xaa,
0x00, 0xff, 0x00,
0xaa, 0xdd, 0x00,
0xdd, 0xaa, 0x00,
0xff, 0x00, 0x00,
0xdd, 0x00, 0xaa,
0xaa, 0x00, 0xdd
)
rainbow_count = string.len(rainbow_pattern)
led_count = 30
rainbows = (led_count * 3) / rainbow_count
partial_rainbows = rainbows % 1
pattern = string.rep(rainbow_pattern, rainbows - partial_rainbows)..string.sub(rainbow_pattern, 1, partial_rainbows * rainbow_count)
function rotate(s, n, delay)
for i = 0, n do
ws2812.write(3, s)
beg = string.sub(s, 0, 3)
s = string.sub(s, 3, string.len(s) - 3)..beg
tmr.wdclr()
tmr.delay(delay * 1000)
end
end
for i=0,10 do
rotate(pattern, 5, 40)
tmr.wdclr()
end
Notez l'appel à "tmr.wdclr()" pour éviter les redémarrages intempestifs de la carte.Un effet K2000 (Knight Rider)
function k2000(n, delay)
s = string.char(0, 0, 255):rep(5)..string.char(0, 0, 0):rep(n - 5)
for i = 0, n - 6 do
s = string.char(0, 0, 0)..string.sub(s, 0, string.len(s)-3)
ws2812.write(3, s)
tmr.wdclr()
tmr.delay(delay * 1000)
end
for i = 0, n - 6 do
s = string.sub(s, 4, string.len(s))..string.char(0, 0, 0)
ws2812.write(3, s)
tmr.wdclr()
tmr.delay(delay * 1000)
end
end
for i = 0, 20 do
k2000(30, 10)
end
Utilisation en Wifi
Pour les premiers exemples, je n'utilise pas le Wifi. Vous pouvez rajouter un serveur Wifi en chargeant les fichiers server.lua et index.html livrés avec WifiLight.zip. Le chargement peut se faire avec LuaLoader ou toute autre application.
Pour la lancer, exécutez : require("server"). Vous pouvez également renommer le fichier en init.lua pour l'exécuter dès le démarrage.
Connectez vous en Wifi à l'adresse 192.168.4.1. Attention, l'adresse n'est pas protégée, donc n'importe qui peut se connecter. Une seule personne peut se connecter à la fois.
Une fois connecté, depuis une page Web sur PC, téléphone ou tablette, sélectionnez la couleur.
Le ruban devrait changer de couleur. Il est possible que la couleur ne correspondent pas immédiatement. Si besoin, changez le nombre de leds pour l'adapter à votre ruban, modifiez l'ordre du RGB et n'hésitez pas à passer par la couleur Noir avant d'en sélectionner une nouvelle.
Ce module nous réserve encore bien des surprises et pourquoi pas un Ambilight?
Commentaires
Enregistrer un commentaire