Internet de les coses amb ESP32 i ESP8266

Exemples Referència Plaques   Recursos CITCEA
Projectes Programació Perifèrics   Inici

NeoPixel

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.

NeoPixel  Fotografia: Adafruit

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 un NeoPixel cal connectar el born + (superior a la foto) al born positiu de l'alimentació, el born - (central a la foto) al negatiu de l'alimentació i el born In (el de baix a l'esquerra a la foto) amb una sortida digital del microcontrolador. Si fem una cadena connectarem el born marcat O d'un amb el born marcat In del següent.

Per fer servir els NeoPixels ens caldrà la NeoPixel library. Si ja hem instal·lat la versió de l'entorn de programació Arduino que proporciona Adafruit és probable que ja tinguem aquesta biblioteca instal·lada. Podem comprovar-ho en la pestanya Sketch del menú:

Mira si hi ha la biblioteca

Un cop ja tinguem la biblioteca, podem fer els nostres programes. A la part inicial, hem de carregar la biblioteca corresponent:

#include <Adafruit_NeoPixel.h>

A la part de declaració de variables, hem de crear un objecte Adafruit_NeoPixel per a cada 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.

Adafruit_NeoPixel cadena = Adafruit_NeoPixel(3, 1, NEO_GRB + NEO_KHZ800);

En aquest cas l'objecte s'anomena cadena i correspon a un conjunt de 3 NeoPixels (primer valor dins el parèntesi) connectats a la pota 1 del microcontrolador (segon paràmetre dins el parèntesi). El tercer paràmetre (NEO_GRB + NEO_KHZ800) indica quin tipus de NeoPixels fem servir i com es comuniquen. Els que estan actualment disponibles són els NeoPixel v2 que es corresponen amb els indicats en el programa d'exemple. Actualment hi ha també NeoPixel (especialment en combinacions) que incorporen un quart LED de color blanc. En aquests casos serà necessari posar NEO_RGBW + NEO_KHZ800 o bé NEO_GRBW + NEO_KHZ800. Si no tenim clar quina de les tres opcions és, les podem anar provant fins trobar la que dóna el resultat esperat.

Encara que no és imprescindible, es recomana inicialitzar els NeoPixels de la cadena. Això ho podem fer a la inicialització (setup) del programa amb les següents instruccions:

void setup() {
    cadena.begin();  // Inicialitza els NeoPixels				
    cadena.show();
}

El nostre programa s'encarregarà d'anar encenent els NeoPixels amb els colors desitjats. Per exemple les instruccions:

void loop() {
    cadena.setPixelColor(0, 255, 0, 0);  // Pixel 0 vermell
    cadena.setPixelColor(1, 0, 255, 0);  // Pixel 1 verd
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
    cadena.setPixelColor(0, 0, 255, 0);  // Pixel 0 verd
    cadena.setPixelColor(1, 0, 0, 255);  // Pixel 1 blau
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
    cadena.setPixelColor(0, 0, 0, 255);  // Pixel 0 blau
    cadena.setPixelColor(1, 255, 0, 0);  // Pixel 1 vermell
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
}

Les dues primeres instruccions serveixen per indicar el color d'un Pixel concret. El primer paràmetre és el número de Pixel (0 és el més proper al microcontrolador, 1 el segon, etc.) i els altres tres són la codificació RGB del color, és a dir les quantitats de vermell, verd i blau desitjades (valors entre 0, apagat, i 255). La tercera instrucció transfereix de cop tots els canvis; d'aquesta manera, tots els Pixels canviaran simultàniament. Després d'un segon, es modifiquen els colors seguint una seqüència.

A continuació tenim el programa complet:

#include <Adafruit_NeoPixel.h>
Adafruit_NeoPixel cadena = Adafruit_NeoPixel(3, 1, NEO_GRB + NEO_KHZ800);
void setup() {
    cadena.begin();  // Inicialitza els NeoPixels				
    cadena.show();
}
void loop() {
    cadena.setPixelColor(0, 255, 0, 0);  // Pixel 0 vermell
    cadena.setPixelColor(1, 0, 255, 0);  // Pixel 1 verd
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
    cadena.setPixelColor(0, 0, 255, 0);  // Pixel 0 verd
    cadena.setPixelColor(1, 0, 0, 255);  // Pixel 1 blau
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
    cadena.setPixelColor(0, 0, 0, 255);  // Pixel 0 blau
    cadena.setPixelColor(1, 255, 0, 0);  // Pixel 1 vermell
    cadena.show(); // Actualitza
    delay(1000);  // Espera un segon
}

 

 

 

 

 

 

 

 

 

 

Llicència de Creative Commons
Aquesta obra d'Oriol Boix està llicenciada sota una llicència no importada Reconeixement-NoComercial-SenseObraDerivada 3.0.