FEATHER-MICROPYTHON-NEOPIXEL
Introduction
L'arrivée de LEDs disposant d'une puce pilote dédicacée facilite grandement l'intégration de LEDs RGB dans change radicalement la donne en allégeant le travail du microcontrôleur, le câblage et permet au développeur de se concentrer sur l'application.
Le WS2812 avec source de lumière intégrée (WS2812 Integrated Light Source) — plus communément nommé NeoPixel par Adafruit — est la dernière avancée dans la quête pour obtenir des LEDs pleine de couleurs, simple a mettre en oeuvre, évolutive et abordable. Les leds rouge, vert et bleue sont intégrées côte à côte sur un petit composants montés en surface, lui-même intégré sur la puce du pilote (le contrôleur de la LED), le tout contrôlé par un simple fil de donnée qui passe d'une LED à l'autre.
Les LEDs NeoPixel peuvent être utilisés individuellement, arrangés pour former une longue chaîne ou assemblés pour réaliser des formes intéressantes.
Ces LEDs sont arrangées sous différentes formes (voir la gamme disponible chez MC Hobby):
NeoPixel sur ESP8266 MicroPython
La bibliothèque neopixel est déjà présente dans les Firmwares MicroPython. Cela permet de démarrer rapidement, il y a cependant quelques restrictions.
La bibliothèque convient uniquement pour la génération de NeoPixel avec flux de donnée à 800 KHz. |
Le bibliothèque ne prend pas en charge:
- l'ancienne génération de NeoPixel (flux de donnée à 400 KHz)
- les LEDs NeoPixel RGBW.
Les broches de l'ESP8266 compatibles pour commander des NéoPixels sont les suivantes:
Broche | Compatibilité |
14 | NeoPixel compatible. |
12 | non testé. |
13 | NeoPixel compatible. |
15 | NeoPixel compatible. |
0 | NE PAS UTILISER. Broche de boot. |
16 | NON FONCTIONNEL pour NeoPixel |
2 | NeoPixel compatible. |
5 | NeoPixel compatible. Bus I2C (SCL) |
4 | NeoPixel compatible. Bus I2C (SDA) |
Raccordement
NeoPixel sous 3.3V
Broche ESP8266 | Broche NeoPixel | Note |
GND | GND | Masse commune |
3V | 5V | Neopixel fonctionne aussi sous 3.3V. Elles sont moins brillante et ont plus de mal à produire du bleu. Attention: le signal doit aussi être en 3.3V |
2 | DIN | Le signal doit entrer par la broche Data IN. Ne pas se tromper avec Data OUT! si le signal est branché sur DOUT (Data Out) alors les LEDs ne recevront pas les informations de couleur. |
NeoPixel sous 5.0V
Il est également possible d'alimenter les NeoPixels en 5V, ce qui permet d'obtenir des couleurs vives et stables en toutes circonstances.
Dans ce cas de figure, il faut aussi que le signal soit en 5V. Pour ce faire, un Level Shifter 74AHCT125 (pdf) est utiliser pour convertir le signal de 3.3v -> 5v.
Avec un flux de donnée de 400 KHz, tous les convertisseurs de niveau logique ne sont pas capable de suivre une telle fréquence de changement de signal. Le 74AHCT125 est capable de suivre ce débit, c'est pour cette raison qu'il est utilisé en lieu et place d'un autre convertisseur. |
Sources
Les sources et exemples sont disponibles sur GitHub.
Voir les liens suivants
- La section neopixel du GitHub ESP8266-uPy
- Le GitHub ESP8266-uPy
Code d'exemple
Le script d'exemple suivant montre comment commander un NeoPixel Stick de 8 LEDs
# Utilisation de la bibliothèque neopixel avec Feather ESP8266
# sous MicroPython
#
# Shop: https://shop.mchobby.be/55-leds-neopixels-et-dotstar
# Wiki: https://wiki.mchobby.be/index.php?title=MicroPython-Accueil#ESP8266_en_MicroPython
from machine import Pin
from neopixel import NeoPixel
from time import sleep
# NeoPixel( broche_signal, nbre_de_led )
np = NeoPixel( Pin(2), 8 )
# Fixer la couleur la couleur du premier pixel
# avec un tuple (r,g,b) ou chaque valeur est
# située entre 0 et 255
np[0] = (255,0,0) # rouge
# couleur des autres pixels
np[1] = (0, 255, 0) # vert
np[2] = (0, 0, 128) # bleu (1/2 brillance)
# Voir aussi HTML Color Picker
# https://www.w3schools.com/colors/colors_picker.asp
np[3] = (255, 102, 0) # Orange
np[4] = (255, 0, 102) # Rose bonbon
np[5] = (153, 51, 255) # Violet
np[6] = (102, 153, 255) # bleu pastel
np[7] = (153, 255, 153) # vert pastel
# Envoyer l'info aux NeoPixels
np.write()
sleep(2)
# fill() permet de remplir tout
# le NeoPixel avec une seule couleur
colors = [ (255,0,0), (0, 255, 0), (0, 0, 128),
(255, 102, 0) , (255, 0, 102), (153, 51, 128),
(102, 153, 128), (153, 255, 128) ]
for color in colors:
np.fill( color )
np.write()
sleep(2)
# Eteindre les NeoPixels
np.fill( (0,0,0) )
np.write()
Effets Lumineux
Le GitHub contient également un fichier nommé fxdemo.py. Ce dernier reprend différentes fonctions d'animation NéoPixel que vous pourriez utiliser dans vos propres projets.
Il est possible de tester ces effets en faisant un import fxdemo depuis une session REPL.
A titre d'exemple, voici les différents appels de fonctions permettant de tester les effets lumineux.
# theater_chase sample
theater_chase( np, (127,0,0) ) # red
theater_chase( np, (127,127,127) ) # white
theater_chase( np, (0,0,127) ) # blue
clear( np )
sleep( 1 )
# Wipe in color
np.fill( (190, 0, 0) ) # fill in red
np.write()
wipe( np, (0,180,0), pause=0.150 ) # wipe in green
wipe( np, (0,0,255), pause=0.150 ) # wipe in blue
wipe( np, (0,0,0), pause=0.150 ) # wipe in black
sleep( 1 )
# Moving_rainbow
for i in range( 4 ):
moving_rainbow( np )
clear( np )
sleep( 1 )
# Fade In And Out
fade_inout( np, (255, 0, 0) ) # Red
fade_inout( np, (0 , 255, 0) ) # Green
fade_inout( np, (0 , 0, 255) ) # Blue
clear( np )
sleep( 1 )
# moving_wheel
moving_wheel( np )
clear( np )
sleep( 1 )
# cycle_wheel
for i in range(2):
cycle_wheel( np )
clear( np )
sleep( 1 )
# Candle Effect
candle( np )
clear( np )
sleep( 1 )
# Larson Scanner (K2000)
# execute 3 iterations
posdir = None
for i in range( 3 ):
posdir = larson_scanner( np, posdir )
clear( np )
sleep( 1 )
Ressouces
- Le GitHub ESP8266-uPy/NeoPixel avec code d'exemple et schéma de montage.
- Référence officielle NeoPixel sous ESP8266
- Le tutoriel NeoPixel pour Arduino contenant de nombreuses informations et recommandations.
Utilisation sous 3.3V
La couleur bleue est difficile à produire sous 3.3V.
Par conséquent, np.write( (0,0,255) ) ne produit pas vraiment de couleur.
C'est parce que le Forward Voltage d'une LED bleue est d'environ 2.8V (typiquement 3.2V). Avec une source d'alimentation de 3.3V, le tension est un peu faible pour activer une led bleue. Nous sommes à la limite pour pouvoir produire du Bleu.
Il est parfois plus efficace de produire un bleu en mi-brillances avec np.write( (0,0,128) ) ou bleu en quart-de-brillance avec np.write( (0,0,64) )
Limite du régulateur de tension
De même, nous avons remarqué que le régulateur de tension d'un ESP8266 ne produit pas vraiment assez de courant pour l'ESP8266 + le contrôler de 8 LEDs NeoPixels.
Placer les 8 LEDs en blanc pur (255,255,255) consomme quand même 250mA sous 5v! Par conséquent, l'utilisation d'une alimentation externe 3.3v pour alimenter les NeoPixels est le bienvenue. Si vous avez un 74AHCT125 sous ma main, vous pouvez même opter pour une alimentation NeoPixel sous 5V :-)
Ne pas oublier d'avoir une masse commune (référentiel de tension) entre l'alimentation NeoPixel et l'ESP8266. |
A noter que si le régulateur de tension peine à founir le courant nécessaire alors sa tension chutera un peu (de 3.3v à 3.1v), ce qui aura pour effet de produire un effet de scintillement sur les LEDs.
Utiliser le régulateur de l'ESP8266
Le régulateur 3.3V de la plateforme ESP8266 sera néanmoins suffisant pour commander quelques NeoPixels. Dans ce cas, il est préférable de:
- ne pas êtres pas trop exigeant sur la qualité des couleurs (utiliser des couleurs en mi-brillance)
- s'attendre à des scintillements lors d'un charge plus importante en courant (lorsque l'on affiche du blanc ou des couleurs vive).
Où acheter
- Le Feather Huzzah ESP8266 utilisé dans ce tutoriel.
- Le NeoPixel Stick utilisé dans ce tutoriel.
- La la gamme NeoPixel disponible chez MC Hobby
- Un 74AHCT125 Level Shifter
Tutoriel réaliser par Meurisse D. pour MC Hobby SPRL
Toute référence, mention ou extrait de cette traduction doit être explicitement accompagné du texte suivant : « Traduction par MCHobby (www.MCHobby.be) - Vente de kit et composants » avec un lien vers la source (donc cette page) et ce quelque soit le média utilisé.
L'utilisation commercial de la traduction (texte) et/ou réalisation, même partielle, pourrait être soumis à redevance. Dans tous les cas de figures, vous devez également obtenir l'accord du(des) détenteur initial des droits. Celui de MC Hobby s'arrêtant au travail de traduction proprement dit.