Tutorial ESP32 48/55 - Monitoramento Remoto de Temperatura e Controle de LED MQTT | Kit IoT ESP32 da SunFounder
Neste tutorial, exploraremos como utilizar o módulo ESP32 em conjunto com a placa de extensão ESP32 da SunFounder para monitorar temperatura e umidade remotamente usando a plataforma Adafruit IO. Além disso, implementaremos a funcionalidade para controlar um LED através de uma interface web. Ao final deste projeto, você será capaz de visualizar dados de temperatura e umidade em tempo real e ativar ou desativar um LED a partir do seu navegador.
Este projeto aproveita o protocolo MQTT para uma comunicação eficiente entre o ESP32 e o serviço Adafruit IO. O MQTT é leve e bem adequado para aplicações de IoT, permitindo-nos publicar facilmente os dados do sensor e assinar os comandos para o controle do LED. Para mais esclarecimentos sobre o código e a fiação, não esqueça de conferir o vídeo que acompanha este tutorial (no vídeo às 00:00).
Hardware Explicado
Os principais componentes deste projeto incluem o microcontrolador ESP32, um sensor de temperatura e umidade DHT11 e um LED. O ESP32 é um microcontrolador poderoso que possui capacidades Wi-Fi e Bluetooth integradas, tornando-o uma escolha ideal para projetos de IoT. Ele pode lidar com várias tarefas e se conectar à internet de forma contínua.
O sensor DHT11 é responsável por medir a temperatura e a umidade. Ele emite sinais digitais que podem ser lidos pelo ESP32. O LED serve como um indicador e pode ser controlado remotamente para demonstrar a eficácia do protocolo MQTT na gestão de dispositivos pela internet.
Detalhes da Ficha Técnica
| Fabricante | Adafruit |
|---|---|
| Número da peça | DHT11 |
| Tensão lógica/IO | 3,3 V |
| Tensão de alimentação | 3,3 V |
| Corrente de saída (por canal) | 20 mA |
| Corrente de pico (por canal) | 50 mA |
| Orientação sobre frequência PWM | N/A |
| Limiares de lógica de entrada | 0,3 V (baixo), 0,7 V (alto) |
| Queda de tensão / RDS(on)/ saturação | N/A |
| Limites térmicos | 0 a 50 °C |
| Pacote | 3-pinos |
| Notas / variantes | Use DHT22 para maior precisão. |
- Certifique-se de que a fiação está correta para evitar danos.
- Use um resistor de 220 Ohms com o LED para limitar a corrente.
- Use resistores de pull-up para o pino de dados do DHT11, se necessário.
- Verifique as credenciais do Wi-Fi quanto a maiúsculas e minúsculas.
- Monitore a saída serial para depurar problemas de conexão.
- Mantenha os tópicos MQTT únicos para evitar conflitos.
- Teste as leituras do sensor para garantir que são válidas.
- Tenha cuidado com o tempo de resposta do DHT11; pode levar um tempo para estabilizar as leituras.
LED= controle LED;temperature= publicar dados de temperatura;humidity= publicar dados de umidade.
Instruções de Fiação
Para ligação dos componentes, comece conectando o sensor DHT11. Conecte o pino esquerdo do DHT11 ao trilho de alimentação de 3,3V na placa de ensaio usando um fio vermelho. O pino do meio do DHT11 deve ser conectado ao pino 13 no ESP32 usando um fio amarelo. Por fim, conecte o pino direito do DHT11 ao trilho de terra usando um fio azul.
Em seguida, para o LED, conecte o ânodo (perna mais longa) ao pino 15 do ESP32 através de um resistor de 220 Ohms. Conecte o cátodo (perna mais curta) diretamente ao barramento de terra na placa de ensaio. Certifique-se de que todas as conexões estejam seguras e verifique se há fios soltos.
Configurando o Painel de Controle
-
VisitaAdafruit IO, então clique emComece grátispara criar uma conta gratuita.

-
Preencha o formulário para criar uma conta.

-
Após criar uma conta Adafruit, você precisará reabrir o Adafruit io. Clique emPainéis de controle, em seguida clique emNovo Painel de Controle.

-
Criar umNovo Painel de Controle.

-
Insira o recém-criadoPainel de Controlee criar um novo bloco.

-
Criar 1Alternarbloco.

-
Em seguida, você precisará criar um novo feed aqui. Este interruptor será usado para controlar o LED, e chamaremos este feed de "LED".

-
Verifique oLEDalimente, então passe para a próxima etapa.

-
Complete as configurações do bloco (principalmente Título do Bloco, Texto Ligado e Texto Desligado), em seguida clique noCriar blocobotão no canto inferior direito para finalizar.

-
Também precisamos criar doisBlocos de Textopróximo. Eles serão usados para exibir temperatura e umidade. Então, crie dois feeds nomeadostemperaturaeumidade.

-
Após a criação, seu Painel deve parecer algo assim:

-
Você pode ajustar o layout usando oEditar Layoutopção no Painel.

-
Clique emCHAVE DA API, e você verá seu nome de usuário eCHAVE DA APIanotados. Lembre-se deles, pois você vai precisar para o seu código.

Exemplos de Código e Passo a Passo
O código começa incluindo as bibliotecas necessárias, configurando as credenciais do Wi-Fi e definindo os parâmetros MQTT. Identificadores-chave comoAIO_USERNAMEeAIO_KEYsão usados para autenticar com o serviço Adafruit IO.
#define AIO_USERNAME "YourUsername"
#define AIO_KEY "YourKey"Essas linhas definem seu nome de usuário e chave do Adafruit IO, que são essenciais para se conectar ao broker MQTT. Certifique-se de que esses valores estejam corretos para estabelecer uma conexão bem-sucedida.
No textosetup()função, a conexão Wi-Fi é inicializada e o cliente MQTT é configurado com o certificado CA raiz para comunicação segura.
WiFi.begin(WLAN_SSID, WLAN_PASS);
client.setCACert(adafruitio_root_ca);Este código conecta o ESP32 à rede Wi-Fi especificada e define a CA raiz para conexões MQTT seguras. Manipular corretamente essas conexões é crítico para uma transmissão de dados confiável.
Finalmente, oloop()a função gerencia a conexão MQTT e publica leituras de temperatura e umidade em intervalos regulares.
mqtt.processPackets(5000);Esta linha permite que o ESP32 processe mensagens recebidas para tópicos assinados, garantindo que o dispositivo permaneça responsivo a comandos enviados a partir da interface web.
Para o código completo, consulte o programa completo carregado abaixo do artigo.
Demonstração / O que Esperar
Após a configuração bem-sucedida, você deverá ver atualizações em tempo real da temperatura e umidade no seu painel do Adafruit IO. Você também pode ligar e desligar o LED através da interface web. Se o LED não responder como esperado, verifique sua fiação e garanta que os nomes dos tópicos MQTT correspondam aos definidos no código.
Esteja ciente de que certos erros de conexão MQTT podem ocorrer devido a certificados expirados. Certifique-se de ter o último certificado CA raiz em seu código para evitar esses problemas (no vídeo às 15:30).
Timestamps de Vídeo
- 00:00 Início
- 1:50 Introdução ao projeto
- 3:16 O que é MQTT
- 6:36 Configuração do Adafruit IO
- 11:13 fiação
- 13:38 Código Arduino explicado
- 22:03 Selecionando a placa ESP32 e a porta COM
- 23:44 Demonstração do projeto
- 27:05 Atualizando painel
/*
* Biblioteca MQTT Adafruit ESP32 Exemplo Adafruit IO SSL/TLS
*
* Use a versão mais recente do núcleo Arduino ESP32:
* https://github.com/espressif/arduino-esp32
*
* Funciona perfeitamente com Adafruit Huzzah32 Feather e Breakout Board:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* A Adafruit investe tempo e recursos fornecendo este código aberto,
* por favor, apoiem a Adafruit e o hardware de código aberto comprando
* produtos da Adafruit!
*
* Escrito por Tony DiCola para a Adafruit Industries.
* Modificado por Brent Rubell para a Adafruit Industries
* Licença MIT, todo o texto acima deve ser incluído em qualquer redistribuição
* /
*
* /// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* Ponto de Acesso WiFi *********************************/
*
* #define WLAN_SSID "SSID"
* #define WLAN_PASS "SENHA"
*
* /************************* Configuração do 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 "SEU_ADAFRUIT_IO_KEY"
#define AIO_USERNAME "JimmyKernel"
#define AIO_KEY "aio_Mxiv12i74b5jKfKNSKLYjlhPmoHC"
/*
* Estado Global (você não precisa mudar isso!) ******************/
*
* // WiFiClientSecure para suporte SSL/TLS
* WiFiClientSecure cliente;
*
* // Configura a classe do cliente MQTT passando o cliente WiFi e os detalhes do servidor MQTT e login.
* Adafruit_MQTT_Client mqtt(&cliente, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // Root CA do io.adafruit.com
* 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";
*/
// Configure um feed chamado 'test' para publicação e 'test2' para assinatura.
// Observe que os caminhos MQTT para AIO seguem a forma: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
Adafruit_MQTT_Publish humidity = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
Adafruit_MQTT_Publish temperature = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperature");
/*
* Aula 1 Básica de MQTT da Adafruit
* Assista à instrução em vídeo para este código no YouTube https://youtu.be/M9BQweAsHJM
* Página de recursos para esta aula e código:
* 📚⬇️ Página de download e recursos https://robojax.com/RJT670
* Tutorial por https://youTube.com/@robojax
*
* Biblioteca Adafruit MQTT exemplo SSL/TLS para ESP32 Adafruit IO
*
* Use a versão mais recente do ESP32 Arduino Core:
* https://github.com/espressif/arduino-esp32
*
* Funciona muito bem com o Adafruit Huzzah32 Feather e Breakout Board:
* https://www.adafruit.com/product/3405
* https://www.adafruit.com/products/4172
*
* A Adafruit investe tempo e recursos fornecendo este código open source,
* por favor, apoie a Adafruit e o hardware open-source comprando
* produtos da Adafruit!
*
* Escrito por Tony DiCola para a Adafruit Industries.
* Modificado por Brent Rubell para a Adafruit Industries
* Licença MIT, todo o texto acima deve ser incluído em qualquer redistribuição
* /
*
* /// ref: https://www.electronicwings.com/esp32/esp32-mqtt-client
*/
#include <WiFi.h>
#include "WiFiClientSecure.h"
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"
/*
* Ponto de Acesso WiFi *********************************/
*
* #define WLAN_SSID "dars"
* #define WLAN_PASS "5152535455"
*
* /************************* Configuração do 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 "SEU_AADAFRUIT_IO_KEY"
#define AIO_USERNAME "robojax"
#define AIO_KEY "aio_wCyL33EVKLcGoAotGNEQ4dGQYOLZ"
/*
* Estado Global (você não precisa mudar isso!) ******************/
*
* // WiFiFlientSecure para suporte SSL/TLS
* WiFiClientSecure cliente;
*
* // Configura a classe de cliente MQTT passando o cliente WiFi e os detalhes do servidor e login MQTT.
* Adafruit_MQTT_Client mqtt(&cliente, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
*
* // CA raiz do io.adafruit.com
* const char* adafruitio_root_ca =
* "-----BEGIN CERTIFICATE-----\n"
* "MIIDrzCCApegAwIBAgIQCDvgVpBCRrGhdWrJWZHHSjANBgkqhkiG9w0BAQUFADBh\n"
* "MQswCQYDVQQGEwJVUzEVMBMGA1UEChMMRGlnaUNlcnQgSW5jMRkwFwYDVQQLExB3\n"
* "d3cuZGlnaWNlcnQuY29tMSAwHgYDVQQDExdEaWdpQ2VydCBHbG9iYWwgUm9vdCBD\n"
* "QTAeFw0wNjExMTAwMDAwMDBaFw0zMTExMTAwMDAwMDBaMGExCzAJBgNVBAYTAlVT\n"
* "MRUwEwYDVQQKEwxEaWdpQ2VydCBJbmMxGTAXBgNVBAsTEHd3dy5kaWdpY2VydC5j\n"
* "b20xIDAeBgNVBAMTF0RpZ2lDZXJ0IEdsb2JhbCBSb290IENBMIIBIjANBgkqhkiG\n"
* "9w0BAQEFAAOCAQ8AMIIBCgKCAQEA4jvhEXLeqKTTo1eqUKKPC3eQyaKl7hLOllsB\n"
* "CSDMAZOnTjC3U/dDxGkAV53ijSLdhwZAAIEJzs4bg7/fzTtxRuLWZscFs3YnFo97\n"
* "nh6Vfe63SKMI2tavegw5BmV/Sl0fvBf4q77uKNd0f3p4mVmFaG5cIzJLv07A6Fpt\n"
* "43C/dxC//AH2hdmoRBBYMql1GNXRor5H4idq9Joz+EkIYIvUX7Q6hL+hqkpMfT7P\n"
* "T19sdl6gSzeRntwi5m3OFBqOasv+zbMUZBfHWymeMr/y7vrTC0LUq7dBMtoM1O/4\n"
* "gdW7jVg/tRvoSSiicNoxBN33shbyTApOB6jtSj1etX+jkMOvJwIDAQABo2MwYTAO\n"
* "BgNVHQ8BAf8EBAMCAYYwDwYDVR0TAQH/BAUwAwEB/zAdBgNVHQ4EFgQUA95QNVbR\n"
* "TLtm8KPiGxvDl7I90VUwHwYDVR0jBBgwFoAUA95QNVbRTLtm8KPiGxvDl7I90VUw\n"
* "DQYJKoZIhvcNAQEFBQADggEBAMucN6pIExIK+t1EnE9SsPTfrgT1eXkIoyQY/Esr\n"
* "hMAtudXH/vTBH1jLuG2cenTnmCmrEbXjcKChzUyImZOMkXDiqw8cvpOp/2PV5Adg\n"
* "06O/nVsJ8dWO41P0jmP6P6fbtGbfYmbW0W5BjfIttep3Sp+dWOIrWcBAI+0tKIJF\n"
* "PnlUkiaY4IBIqDfv8NZ5YBberOgOzW6sRBc4L0na4UU+Krk2U886UAb3LujEV0ls\n"
* "YSEY1QSteDwsOoBrp+uvFRTp2InBuThs4pFsiv9kuXclVzDAGySj4dzp30d8tbQk\n"
* "CAUw7C29C79Fv1C5qfPrmAESrciIxpg0X40KPMbp1ZWVbd4=\n"
* "-----END CERTIFICATE-----\n";
*
* /****************************** Alimentações
*/
// Configure um feed chamado 'test' para publicação e 'test2' para assinatura.
// Observe que os caminhos MQTT para AIO seguem a forma: <username>/feeds/<feedname>
Adafruit_MQTT_Subscribe LED = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/LED");
// Adafruit_MQTT_Publish umidade = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/humidity");
// Adafruit_MQTT_Publish temperatura = Adafruit_MQTT_Publish(&mqtt, AIO_USERNAME "/feeds/temperatura");
Common Course Links
Common Course Files
Recursos e referências
-
Documentação
Arquivos📁
Nenhum arquivo disponível.