FEATHER-MICROPYTHON-NEOPIXEL

De MCHobby - Wiki
Sauter à la navigation Sauter à la recherche


MCHobby investit du temps et de l'argent dans la réalisation de traduction et/ou documentation. C'est un travail long et fastidieux réalisé dans l'esprit Open-Source... donc gratuit et librement accessible.
SI vous aimez nos traductions et documentations ALORS aidez nous à en produire plus en achetant vos produits chez MCHobby.

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.

NeoPixel-UserGuide-01.jpg

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-UserGuide-21.jpg

NeoPixel-UserGuide-22.jpg

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.

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

FEATHER-MICROPYTHON-NEOPIXEL-10.jpg

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.

FEATHER-MICROPYTHON-NEOPIXEL-11.jpg

Sources

Les sources et exemples sont disponibles sur GitHub.

Voir les liens suivants

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

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 :-)

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


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.