Tutorial ESP32 47/55 - Luzes CheerLights WS2812 usando MQTT pela Internet | Kit IoT ESP32 da SunFounder
Neste tutorial, criaremos um sistema de iluminação sincronizado usando o ESP32 e LEDs WS2812 que podem ser controlados remotamente via MQTT. Este sistema permite que múltiplos usuários mudem a cor das luzes simultaneamente, criando uma experiência conectada, independentemente da localização. O projeto utiliza o kit IoT SunFounder ESP32, que inclui um microcontrolador poderoso com capacidades Wi-Fi, tornando-o ideal para aplicações de IoT.
Ao longo do vídeo, iremos percorrer a configuração necessária, a fiação e a implementação do código para alcançar esse efeito. Se você precisar de mais esclarecimentos, não deixe de conferir o vídeo em momentos específicos (no vídeo em mm:ss).
Hardware Explicado
Os componentes principais deste projeto incluem o microcontrolador ESP32, a fita de LED WS2812 e um broker MQTT. O ESP32 é um microcontrolador versátil com capacidades de Wi-Fi e Bluetooth integradas, permitindo que se conecte à Internet facilmente. Ele serve como o cérebro do nosso projeto, gerenciando a comunicação e controlando a fita de LED.
A fita LED WS2812 consiste em LEDs RGB endereçáveis individualmente, que podem ser controlados para exibir uma ampla gama de cores. Cada LED pode ser ligado ou desligado e configurado para qualquer cor usando uma única linha de dados, tornando-a perfeita para efeitos de iluminação dinâmicos. O broker MQTT facilita a comunicação entre diferentes clientes, permitindo que os usuários publiquem e assinem tópicos que controlam as cores dos LEDs.
Detalhes do Ficha Técnica
| Fabricante | Adafruit |
|---|---|
| Número da peça | WS2812B |
| Tensão de lógica/IO | 3,5 - 5,5 V |
| Tensão de alimentação | 5 V |
| Corrente de saída (por canal) | 20 mA |
| Corrente de pico (por canal) | 60 mA |
| Orientação sobre frequência PWM | 400 Hz |
| Limiares de lógica de entrada | 0,2Vcc (baixo), 0,7Vcc (alto) |
| Queda de tensão / RDS(on)saturação | 0,5 V |
| Limites térmicos | Temperatura de operação: -25 a 85 °C |
| pacote | Individual 5050 SMD |
| Notas / variantes | Disponível em várias comprimentos e configurações |
- Garanta um fornecimento de energia adequado para a fita WS2812 para evitar quedas de tensão.
- Use um terra comum entre o ESP32 e a fita de LED.
- Mantenha as linhas de dados curtas para evitar a degradação do sinal.
- Considere usar um capacitor (1000μF) entre a fonte de alimentação para suavizar picos de tensão.
- Use resistores apropriados na linha de dados para prevenir a reflexão do sinal.
- Esteja atento à corrente total do LED strip; utilize alimentação externa quando necessário.
Instruções de Fiação
Para conectar o ESP32 à fita de LED WS2812, comece ligando a fonte de alimentação. Conecte o fio vermelho da fita de LED a uma fonte de 5V e o fio preto ao chão. Em seguida, conecte a linha de dados (fio amarelo) da fita WS2812 ao pino 14 do ESP32. Certifique-se de que o ESP32 também esteja conectado ao mesmo chão que a fita de LED para manter uma referência comum.
Após configurar as conexões de energia e dados, conecte o ESP32 ao seu computador usando um cabo micro USB para programação. Você precisará garantir que o ESP32 esteja ligado durante a programação para estabelecer uma conexão. Uma vez conectado, você pode prosseguir para carregar o código e testar a configuração.

Exemplos de Código e Passo a Passo
O código começa incluindo bibliotecas necessárias para funcionalidade de Wi-Fi e MQTT. Os identificadoresssidepasswordsão usados para armazenar suas credenciais de Wi-Fi, enquantomqtt_servercontém o endereço do broker MQTT.
const char* ssid = "SSID";
const char* password = "PASSWORD";
const char* mqtt_server = "mqtt.cheerlights.com";Em seguida, definimos as cores CheerLights suportadas e seus correspondentes valores RGB usando arrays. Isso permite que o programa acesse facilmente as configurações de cor com base na entrada do usuário.
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // "red"
255, 192, 203, // "pink" ...};Osetup()a função inicializa a comunicação serial, configura a conexão Wi-Fi e prepara o cliente MQTT. Ela também inicia a fita de LED.
void setup() {
Serial.begin(115200);
setup_wifi();
client.setServer(mqtt_server, 1883);
pixels.begin();
pixels.show();
}O loop principal verifica continuamente a conexão MQTT e processa as mensagens recebidas que controlam as cores do LED.callback()a função é acionada quando uma mensagem é recebida no tópico inscrito.
Demonstração / O Que Esperar
Uma vez que tudo esteja configurado e o código tenha sido enviado, você deve ser capaz de mudar a cor dos LEDs WS2812 enviando mensagens para o tópico MQTT. Se outro usuário mudar a cor, todos os dispositivos conectados refletirão a mudança simultaneamente. Tenha cuidado com problemas potenciais, como polaridade invertida ou conexões inadequadas, que podem impedir que os LEDs funcionem corretamente (no vídeo em mm:ss).
Marcadores de vídeo
- 00:00 Início
- 2:00 Introdução
- 3:48 Página de documentação
- 6:33 Explicação da fiação
- 7:35 Código Arduino explicado
- 15:03 Selecionando a placa ESP32 e a porta COMP no Arduino IDE
- 16:46 Demonstração CheerLighs
/*
* :ref: https://randomnerdtutorials.com/esp32-mqtt-publish-subscribe-arduino-ide/
* https://docs.sunfounder.com/projects/kepler-kit/pt/latest/iotproject/5.mqtt_pub.html
*/
#include <WiFi.h>
#include <PubSubClient.h>
// #include <Wire.h>
#include <Adafruit_NeoPixel.h>
// Substitua as próximas variáveis com sua combinação de SSID/Senha
const char* ssid = "SSID";
const char* password = "PASSWORD";
// Adicione o endereço do seu Broker MQTT:
const char* mqtt_server = "mqtt.cheerlights.com";
const char* unique_identifier = "sunfounder-client-sdgvsasdda";
WiFiClient espClient;
PubSubClient client(espClient);
long lastMsg = 0;
int value = 0;
// Defina as cores do CheerLights suportadas e seus valores RGB.
String colorName[] = {"red", "pink", "green", "blue", "cyan", "white", "warmwhite", "oldlace", "purple", "magenta", "yellow", "orange"};
int colorRGB[][3] = { 255, 0, 0, // vermelho
255, 192, 203, // "rosa"
0, 255, 0, // verde
0, 0, 255, // azul
0, 255, 255, // "ciano"
255, 255, 255, // branco
255, 223, 223, // "brancoquente"
255, 223, 223, // "lace antiga"
128, 0, 128, // "roxo"
255, 0, 255, // "magenta"
255, 255, 0, // amarelo
255, 165, 0}; // laranja
// iniciar faixa rgb
#define LED_PIN 13
#define NUM_LEDS 8
Adafruit_NeoPixel pixels = Adafruit_NeoPixel(NUM_LEDS, LED_PIN, NEO_GRB + NEO_KHZ800);
void setup() {
Serial.begin(115200);
// configurações padrão de wifi
setup_wifi();
client.setServer(mqtt_server, 1883);
client.setCallback(callback);
// início da fita rgb
pixels.begin();
pixels.show();
}
void setup_wifi() {
delay(10);
// Começamos conectando a uma rede WiFi.
Serial.println();
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
}
void callback(char* topic, byte* message, unsigned int length) {
Serial.print("Message arrived on topic: ");
Serial.print(topic);
Serial.print(". Message: ");
String messageTemp;
for (int i = 0; i < length; i++) {
Serial.print((char)message[i]);
messageTemp += (char)message[i];
}
Serial.println();
// Se uma mensagem for recebida sobre o tópico, você verificará essa mensagem.
// Altera o estado de saída de acordo com a mensagem
if (String(topic) == "cheerlights") {
Serial.print("Changing color to ");
Serial.println(messageTemp);
setColor(messageTemp);
}
}
void reconnect() {
// Execute um loop até que nos reconectemos.
while (!client.connected()) {
Serial.print("Attempting MQTT connection...");
// Tentar conectar
if (client.connect(unique_identifier)) {
Serial.println("connected");
// Assinar
client.subscribe("cheerlights");
} else {
Serial.print("failed, rc=");
Serial.print(client.state());
Serial.println(" try again in 5 seconds");
// Aguarde 5 segundos antes de tentar novamente.
delay(5000);
}
}
}
void setColor(String color) {
// Percorra a lista de cores para encontrar a cor correspondente.
for (int colorIndex = 0; colorIndex < 12; colorIndex++) {
if (color == colorName[colorIndex]) {
// Defina a cor de cada NeoPixel na fita.
for (int pixel = 0; pixel < NUM_LEDS; pixel++) {
pixels.setPixelColor(pixel, pixels.Color (colorRGB [colorIndex][0], colorRGB [colorIndex][1], colorRGB [colorIndex][2]));
}
pixels.show();
}
}
}
void loop() {
if (!client.connected()) {
reconnect();
}
client.loop();
}
Common Course Links
Common Course Files
Recursos e referências
-
DocumentaçãoTutoriais ESP32 47/55 - Página de documentação SunFounder para luz de alegriadocs.sunfounder.com
Arquivos📁
Nenhum arquivo disponível.