Led endereçável com ESP8266 ESP-01
O Led Endereçável (também chamado muitas vezes de Neopixel) é um componente que permite interessantes efeitos visuais, pois os leds RGB podem ser acionados individualmente e das mais variadas formas e cores. Neste post vamos mostrar como você conecta e programa o led endereçável com ESP8266 ESP-01.
Na imagem acima temos o Kit Módulo Wifi ESP8266 ESP-01S com anel de led RGB, que usamos para testar os leds endereçáveis.
O ESP-01S com Neopixel
O kit mencionado acima contém o cabo de conexão de 3 vias, um anel de led com 16 leds endereçáveis WS2812 e uma placa de controle com botão de reset, além do módulo ESP8266 ESP-01S.
O ESP8266 ESP-01S é uma versão mais atualizada do já conhecido ESP-01. As diferenças básicas:
- O ESP-01 tem 512 KB de memória flash e o ESP-01S tem 1 MB
- Led “Power” vermelho no ESP-01, sendo que no ESP-01S não temos led para indicar que o módulo está energizado
- No ESP-01 temos um led azul conectado no TX, e no ESP-01S o led azul está conectado na GPIO2
Isso não afeta em praticamente nada a programação do módulo, que é feita da mesma maneira nos dois modelos.
Antes de mais nada você terá que soldar o cabo de conexão no anel de leds, seguindo a seguinte ordem:
- Vermelho no pino 5V do anel de leds
- Preto no GND
- Amarelo no pino DI
Um pino vai ficar sem conexão por enquanto (o DO). Sem problemas, pois esse pino serve para ligarmos mais leds endereçáveis em sequência.
O outro lado do cabo você vai conectar na placa de controle, conforme imagem abaixo. Não tem erro, já que o cabo só encaixa de um jeito:
Na placa temos também dois pinos de alimentação, que vai de 3.7 a 5 VDC. (Preste atenção na polaridade!)
Isso permite por exemplo que você conecte uma bateria de lítio no conjunto, que assim pode funcionar de forma independente.
Instalação da biblioteca Neopixelbus
A programação do ESP-01S é feita de forma separada, ou seja, você não consegue programar o módulo diretamente, sendo necessário retirá-lo do soquete e usar um gravador externo.
Para gravação do ESP-01, recomendo que você siga os passos do post Gravando firmware NodeMCU no ESP8266 ESP-01, principalmente no que se refere a conexão do módulo e programação via serial.
Com o módulo preparado para programação, entre na IDE do Arduino e no menu Arquivo -> Preferências coloque a seguinte URL no campo URLs Adicionais de Gerenciadores de Placas:
http://arduino.esp8266.com/stable/package_esp8266com_index.json
Isso fará com que as placas da linha ESP8266 apareçam no menu Ferramentas -> Placas, onde você vai selecionar a opção Generic ESP8266 Module.
Para a programação vamos usar a biblioteca Neopixelbus, que você instala a partir da própria IDE do Arduino, em Sketch -> Incluir Biblioteca -> Gerenciar Bibliotecas. No gerenciador, procure por Neopixelbus na parte superior e depois clique em Instalar:
Agora que temos a biblioteca instalada, vamos ao programa.
Programando o led endereçável
Carregue o programa abaixo no ESP-01. Ele vai acender os 16 leds do anel de forma alternada, por meio de um laço FOR dentro do loop do programa.
Apesar de simples, algumas considerações sobre o programa e o seu funcionamento junto com essa biblioteca: apesar de definirmos na linha 10 o pino de controle (PixelPin), ele é “ignorado” pela biblioteca, pois por padrão ela usa a GPIO2 para o ESP-01.
Se você for usar outros módulos ESP8266, também tem a opção de usar a GPIO3. Deixei as duas opções no programa, para efeitos de teste. Para maiores informações confira o exemplo NeopixelTest da biblioteca Neopixelbus.
Na linha 7 definimos o número de leds no anel; no caso, 16 leds WS2812.
//Programa: Led enderecavel com ESP8266 ESP-01 //Autor: Arduino e Cia #include <NeoPixelBus.h> //Numero de leds enderecaveis no anel const uint16_t PixelCount = 16; //Pino de conexao (ignorado quando se usa ESP8266) const uint8_t PixelPin = 2; #define colorSaturation 128 //Modo DMA para ESP8266 - Usa GPIO3 //NeoPixelBus<NeoGrbFeature, NeoEsp8266Dma800KbpsMethod> strip(PixelCount, PixelPin); //NeoPixelBus<NeoRgbFeature, NeoEsp8266Dma400KbpsMethod> strip(PixelCount, PixelPin); //Modo UART para ESP8266 - Usa GPIO2 NeoPixelBus<NeoGrbFeature, NeoEsp8266Uart1800KbpsMethod> strip(PixelCount, PixelPin); //NeoPixelBus<NeoRgbFeature, NeoEsp8266Uart1400KbpsMethod> strip(PixelCount, PixelPin); RgbColor black(0); void setup() { Serial.begin(115200); //Inicializa os leds strip.Begin(); strip.Show(); } void loop() { //Acende todos os leds alternando as cores for (int i = 0; i <= 15; i++) { int cor_r = random(0, 255); int cor_g = random(0, 255); int cor_b = random(0, 255); RgbColor varios(cor_r, cor_g, cor_b); strip.SetPixelColor(i, varios); strip.Show(); delay(100); } //Aguarda 2 segundos delay(20000); //Apaga os leds for (int i = 0; i <= 15; i++) { strip.SetPixelColor(i, black); strip.Show(); delay(100); } //Aguarda 2 segundos delay(2000); }
No próximo post sobre este kit vamos acionar o ESP-01 com anel de leds usando um smartphone. Até lá!
Gostou? Confira outros posts usando o ESP8266 aqui mesmo no Arduino e Cia!