El NeoPixel és un LED RGB (és a dir, un LED tricolor) que incorpora un circuit intern que permet controlar si està encès o no i el seu color.
El control dels NeoPixels es fa des d'una única sortida digital del microcontrolador de manera que deixa totes les altres potes lliures per a altres funcions. A més, els NeoPixels es poden posar en cadena (connectant la sortida de l'un amb l'entrada del següent) i això permet controlar individualment un nombre elevat de LED fent servir una única sortida.
Per fer servir els NeoPixels cal la biblioteca neopixel. A la part inicial, hem de carregar la biblioteca corresponent:
import neopixel
Hem de crear un objecte NeoPixel per a la cadena de LED. Considerem que formen una cadena tots els que estan connectats un després de l'altra a una mateixa sortida del microcontrolador. En el nostre cas, tots els de la placa (un o cinc) ho estaran.
cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.3) # Cinc NeoPixel al 30 % de lluminositat
En aquest cas l'objecte s'anomena cadena i correspon a un conjunt de cinc NeoPixels (segon paràmetre dins el parèntesi) connectats a la pota NEOPIXEL del microcontrolador (primer paràmetre dins el parèntesi). El tercer paràmetre ens permet ajustar la lluminositat amb un valor entre 0 i 1.
Per encendre un LED d'un determinat color podem fer servir la instrucció següent:
cadena[0] = (255, 0, 0) # Pixel 0 vermell
Els tres paràmetres són la codificació RGB del color, és a dir les quantitats de vermell, verd i blau desitjades (valors entre 0, apagat, i 255).
Aquest mètode és senzill però implica anar definint els colors cada cop a base de tres nombres. Hi ha una altra manera més compacta que consisteix en definir un tuple que guardi un color concret.
groc = (255, 255, 0)
cadena[0] = groc # Pixel 0 groc
El programa següent fa una seqüència de colors sobre dos dels NeoPixel de la placa. Si la placa només en té un, aquest farà la seqüència corresponent a l'índex 0.
import board import neopixel import time
cadena = neopixel.NeoPixel(board.NEOPIXEL, 5, brightness=0.3) # Dos NeoPixel a la pota D2
groc = (255, 255, 0)
while True:
cadena[0] = (255, 0, 0) # Pixel 0 vermell
cadena[1] = (0, 255, 0) # Pixel 1 verd
time.sleep(1)
cadena[0] = (0, 255, 0) # Pixel 0 verd
cadena[1] = (0, 0, 255) # Pixel 1 blau
time.sleep(1)
cadena[0] = (0, 0, 255) # Pixel 0 blau
cadena[1] = groc # Pixel 1 groc
time.sleep(1)
cadena[0] = groc # Pixel 0 groc
cadena[1] = (255, 0, 0) # Pixel 1 vermell
time.sleep(1)
En qualsevol moment, al llarg del programa, podem modificar la brillantor:
cadena.brightness = 0.8
Si volem posar tots els NeoPixel del mateix color podem fer servir la funció fill, com en aquests casos:
cadena.fill((255, 0, 0))
cadena.fill(groc)
En CircuitPithon, en principi, els NeoPixel s'actualitzen en el mateix moment en el que se'ls canvia el color. Això es pot desactivar afegint una opció quan es defineix l'objecte:
cadena = neopixel.NeoPixel(board.D2, 2, brightness=0.3, auto_write=False)
Llavors podem controlar quan s'envia el color als NeoPixel amb les funcions write o show, totes dues fan el mateix.
while True:
cadena[0] = (255, 0, 0) # Pixel 0 vermell
cadena.write()
time.sleep(1)
cadena[0] = (0, 255, 0) # Pixel 0 verd
cadena.show()
time.sleep(1)
Això permet ajustar els colors en llocs diferents del programa però fer que es mostrin tots de cop.

Esta obra de Oriol Boix está licenciada bajo una licencia no importada Creative Commons Reconocimiento-NoComercial-SinObraDerivada 3.0.