Tutorial ESP32 50/55 - Controle o LED RGB de qualquer lugar do mundo | Kit ESP32 da SunFounder
Neste tutorial, aprenderemos como controlar a cor de um LED RGB usando o microcontrolador ESP32 via Wi-Fi, utilizando o protocolo MQTT e o serviço Adafruit IO. Esta configuração permite que você mude a cor do LED RGB de qualquer lugar do mundo, oferecendo uma aplicação prática da tecnologia IoT. Também exploraremos como usar deslizadores e um seletor de cores para escolher a cor desejada.

O ESP32 é um microcontrolador poderoso que possui capacidades embutidas de Wi-Fi e Bluetooth, tornando-o ideal para projetos de IoT. Neste projeto, conectaremos um LED RGB ao ESP32 e controlaremos sua cor através de um broker MQTT fornecido pela Adafruit. O tutorial irá guiá-lo através da configuração de hardware, instruções de fiação e o código necessário para fazer tudo funcionar perfeitamente (no vídeo às :00).
Hardware Explicado
Para este projeto, os componentes principais que usaremos são o microcontrolador ESP32 e o LED RGB. O ESP32 é capaz de se conectar a redes Wi-Fi, permitindo que ele se comunique com o serviço Adafruit IO. O LED RGB contém três LEDs individuais (vermelho, verde e azul) que podem ser misturados para criar uma ampla variedade de cores.
O LED RGB opera com o princípio do ânodo comum ou do cátodo comum, o que significa que o ânodo (positivo) ou o cátodo (negativo) dos LEDs individuais devem ser conectados corretamente para que funcionem. Cada cor pode ser controlada usando Modulação por Largura de Pulso (PWM), que ajusta o brilho de cada LED variando o ciclo de trabalho.
Detalhes da Ficha Técnica
| Fabricante | SunFounder |
|---|---|
| Número da peça | LED RGB |
| Tensão de polarização (V)F) | 2,0-3,4 V |
| Corrente de avanço (IF) | 20 mA |
| Comprimento de onda de pico (nm) | Vermelho: 620, Verde: 525, Azul: 465 |
| Pacote | Pino padrão de 4 pinos |
| Notas / variantes | Opções de ânodo comum ou cátodo comum disponíveis |
- Use resistores de 220 ohms para cada cor de LED para limitar a corrente.
- Assegure a fiação correta para configuração de ânodo ou cátodo comum.
- Verifique a fonte de alimentação do ESP32 para evitar quedas de tensão.
- Mantenha a frequência PWM dentro dos limites para transições de cor suaves.
- Verifique se as credenciais do Wi-Fi estão corretas para se conectar ao serviço Adafruit IO.
Instruções de Fiação

Para conectar o LED RGB ao ESP32, comece identificando os pinos do LED RGB. O pino mais longo é o pino comum. Para uma configuração de anodo comum, conecte este pino à fonte de tensão positiva (3,3V). Os outros três pinos correspondem aos LEDs vermelho, verde e azul. Conecte o pino vermelho ao GPIO 27, o pino verde ao GPIO 26 e o pino azul ao GPIO 25. Cada uma dessas conexões deve ser feita através de um resistor de 220 ohms para limitar a corrente que passa pelos LEDs.
Em seguida, conecte o terra (GND) do ESP32 ao fio de terra do seu circuito. Certifique-se de que a fiação esteja segura para evitar conexões intermitentes. Se estiver usando um LED RGB de cátodo comum, conecte o pino comum ao terra e conecte os pinos de cores individuais à fonte positiva através dos resistores. Verifique todas as conexões antes de energizar o circuito.
Exemplos de Código e Tutoriais
No código Arduino, começamos definindo os pinos para os LEDs vermelho, verde e azul usando os identificadores.redPin,greenPin, ebluePin. Além disso, definimos os canais PWM para cada cor usandoredChannel,greenChannel, eblueChannelA frequência PWM é definida como 5000 Hz com uma resolução de 8 bits.
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;In thesetup()função, inicializamos os canais PWM e conectamos os pinos correspondentes. Também nos conectamos à rede Wi-Fi usando as credenciais definidas e configuramos o cliente MQTT para comunicação com o Adafruit IO.
void setup() {
ledcSetup(redChannel, freq, resolution);
ledcAttachPin(redPin, redChannel);
// Connect to WiFi
WiFi.begin(WLAN_SSID, WLAN_PASS);
}O loop principal verifica a conexão MQTT e processa as mensagens recebidas. Ele também imprime os valores RGB atuais no monitor serial. A cor da LED é atualizada com base nos valores recebidos através das assinaturas MQTT.
void loop() {
MQTT_connect();
mqtt.processPackets(500);
setColor();
}Para mais detalhes sobre o código completo, consulte o código completo carregado abaixo do artigo.
Demonstração / O que Esperar
Uma vez que tudo esteja configurado e o código esteja carregado, você deve ver o LED RGB respondendo às mudanças de cor feitas através do painel do Adafruit IO. À medida que você ajusta os controles deslizantes para vermelho, verde e azul, o LED deve mudar sua cor de acordo. Se você tiver algum problema, certifique-se de que a conexão Wi-Fi esteja estável e que os nomes dos tópicos MQTT correspondam àqueles definidos no código (no vídeo às 17:30).
Os erros comuns incluem fiação incorreta, nomes de tópicos incompatíveis e esquecer de definir as credenciais corretas do Wi-Fi. Se o LED não acender, verifique novamente as conexões do resistor e certifique-se de que o ESP32 está alimentado corretamente.
Marcações de vídeo
- 00:00 Início
- 2:23 Introdução ao projeto
- 4:43 O que é MQTT
- 7:55 Configuração do Adafruit IO
- 14:09 Fiação explicada
- 16:07 Código explicado
- 27:03 Selecionando a placa ESP32 e a porta COM no Arduino IDE
- 29:12 Demonstração do projeto
- O que é LED RGB?
- 35:26 Cor RGB
/*
* Este é um esboço do Arduino para ESP32 para controlar LED RGB usando o serviço MQTT da Adafruit
* instrução em vídeo https://youtu.be/-9q1GfGsnr0
* 📚⬇️ Página de download e recursos https://robojax.com/RJT672
* Escrito por Ahamd Shamshiri
* em 18 de fevereiro de 2024
*
* Biblioteca MQTT da Adafruit exemplo de SSL/TLS ESP32 Adafruit IO
*
* /// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
* //
* // Defina os pinos do LED RGB
*/
const int redPin = 27;
const int greenPin = 26;
const int bluePin = 25;
// Defina canais PWM
const int redChannel = 0;
const int greenChannel = 1;
const int blueChannel = 2;
// Defina a frequência e a resolução do PWM.
const int freq = 5000;
const int resolution = 8;
int colorR, colorG, colorB;
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* Ponto de Acesso WiFi *********************************/
*
* #define WLAN_SSID "Book"
* #define WLAN_PASS "888-888"
*
* ************************* Configuração Adafruit.io
*/
#define AIO_SERVER "io.adafruit.com"
// Usando a porta 8883 para MQTTS
#define AIO_SERVERPORT 8883
// Configuração da Conta Adafruit IO
// (para obter esses valores, visite https://io.adafruit.com e clique em Chave Ativa)
// #define AIO_USERNAME "SEU_NOME_DE_USUÁRIO_ADAFRUIT_IO"
// #define AIO_KEY "SUA_CHAVE_ADAFRUIT_IO"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_NBQQ75Rn7liRNcRn5uGUBMsBYmjD"
/*
* Estado Global (você não precisa mudar isso!) ******************/
*
* // WiFiClientSecure para suporte SSL/TLS
* WiFiClientSecure client;
*
* // Configure a classe do cliente MQTT passando o cliente WiFi e os detalhes do servidor e login MQTT.
* Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // io.adafruit.com raiz CA
* const char* adafruitio_root_ca = \
* "-----BEGIN CERTIFICATE-----\n"
* "MIIEjTCCA3WgAwIBAgIQDQd4KhM/xvmlcpbhMf/ReTANBgkqhkiG9w0BAQsFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBH\n"
* "MjAeFw0xNzExMDIxMjIzMzdaFw0yNzExMDIxMjIzMzdaMGAxCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xHzAdBgNVBAMTFkdlb1RydXN0IFRMUyBSU0EgQ0EgRzEwggEiMA0GCSqGSIb3\n"
* "DQEBAQUAA4IBDwAwggEKAoIBAQC+F+jsvikKy/65LWEx/TMkCDIuWegh1Ngwvm4Q\n"
* "yISgP7oU5d79eoySG3vOhC3w/3jEMuipoH1fBtp7m0tTpsYbAhch4XA7rfuD6whU\n"
* "gajeErLVxoiWMPkC/DnUvbgi74BJmdBiuGHQSd7LwsuXpTEGG9fYXcbTVN5SATYq\n"
* "DfbexbYxTMwVJWoVb6lrBEgM3gBBqiiAiy800xu1Nq07JdCIQkBsNpFtZbIZhsDS\n"
* "fzlGWP4wEmBQ3O67c+ZXkFr2DcrXBEtHam80Gp2SNhou2U5U7UesDL/xgLK6/0d7\n"
* "6TnEVMSUVJkZ8VeZr+IUIlvoLrtjLbqugb0T3OYXW+CQU0kBAgMBAAGjggFAMIIB\n"
* "PDAdBgNVHQ4EFgQUlE/UXYvkpOKmgP792PkA76O+AlcwHwYDVR0jBBgwFoAUTiJU\n"
* "IBiV5uNu5g/6+rkS7QYXjzkwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsG\n"
* "AQUFBwMBBggrBgEFBQcDAjASBgNVHRMBAf8ECDAGAQH/AgEAMDQGCCsGAQUFBwEB\n"
* "BCgwJjAkBggrBgEFBQcwAYYYaHR0cDovL29jc3AuZGlnaWNlcnQuY29tMEIGA1Ud\n"
* "HwQ7MDkwN6A1oDOGMWh0dHA6Ly9jcmwzLmRpZ2ljZXJ0LmNvbS9EaWdpQ2VydEds\n"
* "b2JhbFJvb3RHMi5jcmwwPQYDVR0gBDYwNDAyBgRVHSAAMCowKAYIKwYBBQUHAgEW\n"
* "HGh0dHBzOi8vd3d3LmRpZ2ljZXJ0LmNvbS9DUFMwDQYJKoZIhvcNAQELBQADggEB\n"
* "AIIcBDqC6cWpyGUSXAjjAcYwsK4iiGF7KweG97i1RJz1kwZhRoo6orU1JtBYnjzB\n"
* "c4+/sXmnHJk3mlPyL1xuIAt9sMeC7+vreRIF5wFBC0MCN5sbHwhNN1JzKbifNeP5\n"
* "ozpZdQFmkCo+neBiKR6HqIA+LMTMCMMuv2khGGuPHmtDze4GmEGZtYLyF8EQpa5Y\n"
* "jPuV6k2Cr/N3XxFpT3hRpt/3usU/Zb9wfKPtWpoznZ4/44c1p9rzFcZYrWkj3A+7\n"
* "TNBJE0GmP2fhXhP1D/XVfIW/h0yCJGEiV9Glm/uGOa3DXHlmbAcxSyCRraG+ZBkA\n"
* "7h4SeM6Y8l/7MBRpPCz6l8Y=\n"
* "-----END CERTIFICATE-----\n";
*
* /****************************** Feeds
*/
// Configure um feed chamado 'teste' para publicação e 'teste2' para assinatura.
// Observe que os caminhos MQTT para AIO seguem a forma: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe COLOR_R = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.red");
Adafruit_MQTT_Subscribe COLOR_G = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.green");
Adafruit_MQTT_Subscribe COLOR_B = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/rgb-led-color.blue");
Adafruit_MQTT_Subscribe COLOR_RGB = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/color-picker");
Common Course Links
Common Course Files
Recursos e referências
Ainda não há recursos.
Arquivos📁
Nenhum arquivo disponível.