segunda-feira, junho 24, 2024

Projeto: Controlador WiFi de LED RGB Endereçável (WS2812B) Usando ESP32-C3

Mais um "projetinho"! A ideia é controlar via WiFi uma fita de LED RGB WS2812B e a minha opção de microcontrolador é o ESP32-C3.


Já falei bastante aqui sobre o WS2812B. Resumindo o que precisamos saber para este projeto, a fita de LED tem três sinais de entrada: alimentação, terra e controle. A alimentação é 5V e o sinal de controle é uma sequência de bits codificados onde a duração do nível alto indica se o bit é '0' ou '1'.

Hardware

Uma primeira preocupação é com a corrente consumida pelos LEDs. Segundo este site, cada LED pode consumir até 50 mA quando a intensidade das três cores for máxima. Supondo que eu vá ligar até uns 40 LEDs, a corrente pode chegar a 2A (fora o consumo do microcontrolador).

É preferível que esta corrente não passe pela plaquinha do microcontrolador, então a minha decisão foi bifurcar a alimentação recebida da fonte para ir para a placa e para a fita de LED. Ao invés de ligar direto, usei um MOSFET como chave, controlado por uma saída do microcontrolador. Para acionar corretamente o MOSFET no lado da alimentação ("high-side") é necessário um transistor NPN.

A opção pelo ESP32-C3 se baseou em alguns critérios:

  • Precisa ter WiFi
  • Não precisa de muitos GPIOs
  • Não vai ter muito processamento
  • O ESP32-C3 é barato
  • Eu tenho várias plaquinhas com ele

Como a ideia é colocar tudo em uma caixa pequena, escolhi um módulo pequeno com o ESP32-C3. Minhas opções eram o XIAO e uma Core board do WeActStudio. Escolhi a segunda porque tem antena integrada.

O esquema da montagem ficou assim:


Software

Já que a ideia é controlar sem fio, porque não via browser? O ESP32-C3 serve uma única página com as seguintes opções:

  • Modo
  • Cor
  • Intensidade


Minha primeira decisão foi usar a biblioteca ESP-WiFiSettings, que simplifica a configuração do WiFi. Esta biblioteca lembra qual foi a última rede conectada e tenta reconectar nela. Na primeira vez, ou se não conseguir conectar, o ESP é reconfigurado para o modo "Ponto de Acesso", criando uma rede WiFi. Conectando nela com um browser, é apresentada uma tela onde se configura a rede que se deseja utilizar.

Para apresentar a página, a WiFiSettings usa a biblioteca WebServer. É natural que eu use a mesma biblioteca para apresentar a minha página de configuração da fita. Procurei fazer as coisas o mais simples possível:

  • A página é totalmente estática (nem sequer lembra a última seleção)
  • Os modos suportados são bem elementares
  • Coloquei apenas cinco opções de cores. Para ser preciso, onde está azul é na verdade branco-azulado e o mesmo com as outras cores.
  • Cada cor usa somente 3 bits (0 a 7) para cada componente. A intensidade, de 0 a 5, determina o shift a ser feito.

O código está em https://github.com/dquadros/FitaLedWiFi.

Notas Para Quem Quiser Reproduzir o Projeto

Em teoria não é usada nenhuma característica específica da placa da WeActStudio ou mesmo do ESP32-C3. A montagem e o código devem funcionar com outros modelos de ESP32 e até mesmo com o ESP8266, eventualmente mudando os pinos utilizados.

Os modelos dos transistores foi escolhido pelo que tinha na gaveta. O transistor NPN pode ser praticamente qualquer um. O MOSFET precisa suportar os 2 amperes (tranquilo) e chavear com 5V.

Eu tive uma incompatibilidade entre o ESP-WiFiSettings 3.8.0 e o suporte ao ESP32 3.0.1. Eu resolvi retirando a chamada a esp_task_wdt_reset()  em  WiFiSettings.cpp. Não consegui determinar se o problema está na biblioteca ou no suporte ao ESP32, espero que este problema seja resolvido logo.


Nenhum comentário: