Medindo Temperatura e Umidade com ESP8266 e DHT11

Se você está começando com IoT e quer um projeto simples, barato e que já entrega resultado na primeira tentativa, o combo ESP8266 + DHT11 é praticamente obrigatório. Neste post eu mostro como montei esse circuito e explico linha por linha o código que li os dados de temperatura e umidade no Monitor Serial.

O que vamos usar

  • 1x placa ESP8266 (modelo D1, compatível com Wemos/NodeMCU)
  • 1x sensor DHT11 de 3 pinos (o de 4 pinos funciona igual, só muda a pinagem)
  • 3 fios jumper (macho-macho ou conforme seu módulo)
  • Cabo micro USB para alimentação e upload do código

O DHT11 é um sensor digital que já entrega temperatura e umidade relativa do ar prontas, sem precisar de conversão analógica nem resistores adicionais — o módulo azul de 3 pinos já vem com o resistor de pull-up embutido, o que facilita bastante a vida de quem está aprendendo.

image Medindo Temperatura e Umidade com ESP8266 e DHT11

Ligação do circuito

A versão de 3 pinos do DHT11 é bem direta:

Pino do DHT11Onde ligar no ESP8266
GNDGND
DATA (S)D1 (GPIO 5)
3.3V (VCC)3.3V

No meu circuito, o fio de dados vai para o pino D1, que corresponde ao GPIO 5 — é exatamente esse pino que declaramos no código. Um detalhe importante: o DHT11 trabalha bem tanto em 3.3V quanto em 5V, mas como o ESP8266 já opera nativamente em 3.3V, prefiro alimentar o sensor direto nessa saída para manter tudo no mesmo nível de tensão e evitar qualquer sobrecarga no pino de dados.

O código

Aqui está o sketch que uso para testar o sensor. Ele é enxuto de propósito — a ideia é validar a leitura antes de partir para qualquer lógica mais elaborada (like enviar os dados para a nuvem, por exemplo).

Prompt Sugerido (Toque para selecionar)
#include <DHT.h> // Inclui a biblioteca para o sensor DHT// ▼▼▼ PROF. WASHINGTON PAIVA ▼▼▼// --- Configuração do Sensor DHT11 ---#define DHTPIN 5 // Define o pino D1 (GPIO 5) como pino de dados do sensor. #define DHTTYPE DHT11 // Define o tipo do sensor.// Inicializa o objeto do sensor. DHT dht(DHTPIN, DHTTYPE);void setup() { // Inicia a comunicação com o computador para podermos ver os resultados. Serial.begin(115200);Serial.println("Iniciando teste do sensor DHT11...");// Inicia o sensor DHT.dht.begin(); }void loop() { // Espera 2 segundos entre as medições. delay(2000);// Lê a umidade e a temperatura do sensor. float h = dht.readHumidity(); float t = dht.readTemperature();// Verifica se a leitura falhou. É importante para garantir dados válidos. if (isnan(h) || isnan(t)) { Serial.println("Falha ao ler os dados do sensor DHT!"); return; }// Se a leitura foi bem-sucedida, imprime os valores no Monitor Serial. Serial.print("Umidade: "); Serial.print(h); Serial.print("% | "); Serial.print("Temperatura: "); Serial.print(t); Serial.println(" °C"); }

Entendendo o código por partes

Biblioteca e configuração inicial

Tudo começa com #include <DHT.h>, a biblioteca que faz o trabalho pesado de decodificar o sinal digital do sensor (o DHT11 se comunica por um protocolo próprio de um único fio, e ler isso “na mão” seria bem chato). Se você ainda não tem essa biblioteca instalada, basta ir em Sketch > Incluir Biblioteca > Gerenciar Bibliotecas na IDE do Arduino e procurar por “DHT sensor library” (da Adafruit).

Em seguida, defino duas constantes: DHTPIN 5, que é o GPIO ligado ao fio de dados, e DHTTYPE DHT11, que informa à biblioteca qual variante de sensor estamos usando (existe também o DHT22, mais preciso, mas com o mesmo princípio de uso).

A função setup()

Aqui eu inicio a comunicação serial em 115200 bps — velocidade padrão para ESP8266 — e chamo dht.begin(), que prepara o sensor para começar a receber leituras.

A função loop()

Esse é o coração do código. Repare no delay(2000): o DHT11 é um sensor relativamente lento e não deve ser lido com intervalo menor que 1 segundo entre uma leitura e outra (o datasheet recomenda pelo menos 1 segundo; eu uso 2 segundos por segurança). Se você tentar ler mais rápido que isso, vai começar a receber valores inválidos.

As linhas dht.readHumidity() e dht.readTemperature() fazem a leitura propriamente dita, retornando valores do tipo float. Logo depois vem uma verificação essencial: isnan(h) || isnan(t). Essa checagem existe porque sensores DHT falham leitura com uma certa frequência (interferência, fio solto, timing) — e sem esse tratamento, seu programa acabaria trabalhando com valores lixo sem perceber.

Testando na prática

Depois de subir o código, abra o Monitor Serial (configurado em 115200 bps) e você deve ver algo assim, atualizando a cada 2 segundos:

Umidade: 58.00%  |  Temperatura: 24.00 °C

Se aparecer “Falha ao ler os dados do sensor DHT!” repetidamente, os culpados mais comuns são:

  • Fio de dados solto ou mal encaixado no D1
  • Sensor alimentado com tensão insuficiente
  • DHTPIN configurado errado no código (confira o GPIO real da sua placa)

Próximos passos

Com a leitura funcionando, o caminho natural é dar utilidade a esses dados: exibir em um display, publicar via MQTT, enviar para o ThingSpeak ou montar um mini dashboard web hospedado no próprio ESP8266. Se você tiver interesse em algum desses próximos passos, me conta nos comentários que eu posso preparar a continuação do Projeto X-9 do Tempo.


Gostou do projeto? Acompanhe mais conteúdos sobre eletrônica, ESP8266 e automação aqui no blog.

Compartilhe:

Profissional engajado com as últimas tendências tecnológicas e de gestão, buscando continuamente aprimorar suas competências e compartilhar seu conhecimento.

Publicar comentário