Componentes · 6 min de leitura

Sensor de temperatura e umidade DHT11: guia para Arduino, ESP32 e Pico

O que é o sensor de temperatura e umidade DHT11 e como ele funciona? Ligação no Arduino, a biblioteca DHT, código de exemplo, DHT11 vs DHT22, uso no ESP32 e no Pico e erros comuns.

O DHT11 é um sensor digital barato, em uma caixinha de plástico azul, que lê tanto a temperatura quanto a umidade relativa por um único fio de dados. Você o encontra em quase toda estação meteorológica com Arduino, monitor de estufa e de plantas, termômetro de quarto de bebê e projeto de casa inteligente que liga um ventilador quando a umidade sobe. Ao contrário de um sensor analógico, você não precisa medir uma tensão e se virar com fórmulas: o sensor envia a leitura como um número pronto.

Sensor de temperatura e umidade DHT11
DHT11: dentro da caixa azul com grade ficam um elemento sensível à umidade e um minúsculo termistor.

O que é o DHT11 e onde ele é usado?

A umidade que ele mede é a umidade relativa: a porcentagem do máximo de vapor d'água que o ar consegue reter naquela temperatura. De 40% a 60% é considerado confortável; acima de 70% significa umidade excessiva e mofo, e abaixo de 30% significa ar seco. O DHT11 mede esse valor e a temperatura ambiente cerca de uma vez por segundo.

  • Estação meteorológica caseira: mostre a temperatura e a umidade em um display LCD ou OLED.
  • Monitoramento de estufa e plantas: avise quando a umidade cair e regue junto com um sensor de umidade do solo.
  • Alerta de umidade e mofo: dispare um alarme quando um banheiro, porão ou guarda-roupa passar de 70% de umidade.
  • Ventilador ou desumidificador automático: ligue o aparelho com um relé quando um limite de umidade for ultrapassado.
  • Registrador de dados: grave as leituras em um cartão SD e monte um gráfico diário.
  • Monitoramento remoto: use um ESP32 para publicar os valores em uma página web que você abre no celular.

Como o DHT11 funciona?

Há dois elementos sensores dentro da caixa. O elemento de umidade é um material que absorve umidade entre dois eletrodos; conforme a umidade do ar sobe, a resistência dele cai. A temperatura é medida com um termistor NTC: um pequeno resistor cuja resistência diminui à medida que ele esquenta. Um minúsculo microcontrolador dentro do sensor mede as duas resistências, corrige os valores com dados de calibração gravados na fábrica e envia o resultado em formato digital.

A comunicação acontece por um único fio. O Arduino acorda o sensor mantendo a linha de dados em LOW por pelo menos 18 milissegundos, e o sensor responde com um pacote de 40 bits: 16 bits de umidade, 16 bits de temperatura e uma soma de verificação de 8 bits para detectar leituras com erro. Você não precisa escrever essa temporização; a biblioteca que vamos instalar abaixo cuida de tudo.

Especificações: DHT11 vs DHT22

CaracterísticaDHT11DHT22 (AM2302)
Tensão de alimentação3–5,5 V3,3–6 V
Corrente durante a medição0,5–2,5 mA1–1,5 mA
Faixa de temperatura0–50 °C−40–80 °C
Precisão de temperatura±2 °C±0,5 °C
Faixa de umidade20–90%0–100%
Precisão de umidade±5%±2% (máx. ±5%)
Resolução1 °C / 1%0,1 °C / 0,1%
Taxa de amostragemUma vez por segundoUma vez a cada 2 segundos
Cor da caixaAzulBranca
Sensor de temperatura e umidade DHT22 AM2302
DHT22 (AM2302): o irmão de caixa branca, mais preciso e capaz de medir abaixo de zero.

Resumindo: se você quer uma leitura aproximada da temperatura e da umidade de um ambiente interno, o DHT11 basta e é mais barato. Ao ar livre, abaixo de zero ou onde meio grau faz diferença, escolha o DHT22. Os dois são ligados e programados do mesmo jeito; você só muda o tipo de sensor no código.

Pinagem e ligação do DHT11

O DHT11 é vendido de duas formas: como módulo de 3 pinos, com resistor e LED na placa, ou como sensor avulso de 4 terminais. No sensor avulso, conte os terminais da esquerda para a direita com a face da grade virada para você.

SinalMódulo de 3 pinosSensor de 4 terminaisLigar em
AlimentaçãoVCC (+)Terminal 15V (3V3 no ESP32 e no Pico)
DadosDATA / OUT / STerminal 2Um pino digital (D2 no Uno)
Não usado—Terminal 3Sem ligação
TerraGND (−)Terminal 4GND
Se você usa o sensor avulso, sempre coloque um resistor de pull-up de 10 kΩ entre o terminal de dados e o VCC; para cabos com mais de alguns metros, use 4,7 kΩ. As placas de módulo já têm esse resistor, então não é preciso nada extra. Para ler o valor de um resistor pelas faixas coloridas, use a ferramenta Código de cores de resistores.

Instalando a biblioteca DHT

  1. Abra o Gerenciador de Bibliotecas na Arduino IDE (o ícone de livro na barra lateral esquerda da Arduino IDE 2).
  2. Digite DHT sensor library na caixa de busca e instale a biblioteca da Adafruit.
  3. Quando ela perguntar sobre as dependências, escolha Instalar tudo para que a Adafruit Unified Sensor também seja instalada.
  4. Se quiser, experimente o exemplo pronto em Arquivo > Exemplos > DHT sensor library > DHTtester.

Código de exemplo para Arduino: temperatura, umidade e índice de calor

O código abaixo faz uma leitura a cada dois segundos, avisa quando uma leitura falha e combina temperatura e umidade para calcular o índice de calor (a sensação térmica). Abra o Monitor Serial em 9600 baud para ver os resultados.

C++ (Arduino IDE)
1#include <DHT.h>
2
3#define DHT_PIN 2          // veri pini / data pin
4#define DHT_TYPE DHT11     // DHT22 kullanıyorsan DHT22 yaz / write DHT22 for a DHT22
5
6DHT dht(DHT_PIN, DHT_TYPE);
7
8void setup() {
9  Serial.begin(9600);
10  dht.begin();
11}
12
13void loop() {
14  delay(2000);                                // ölçümler arası bekleme / wait between readings
15
16  float humidity = dht.readHumidity();        // % bağıl nem / % relative humidity
17  float temperature = dht.readTemperature();  // °C
18
19  if (isnan(humidity) || isnan(temperature)) {
20    Serial.println("Okuma hatası / read error");
21    return;
22  }
23
24  // hissedilen sıcaklık / heat index (°C)
25  float heatIndex = dht.computeHeatIndex(temperature, humidity, false);
26
27  Serial.print("Sicaklik / Temp: ");
28  Serial.print(temperature);
29  Serial.print(" C  Nem / Humidity: %");
30  Serial.print(humidity);
31  Serial.print("  Hissedilen / Feels like: ");
32  Serial.print(heatIndex);
33  Serial.println(" C");
34}
O DHT11 consegue fazer no máximo uma leitura por segundo, e o DHT22 uma a cada dois segundos. Esperar 2 segundos entre as leituras é seguro para os dois. Ler com mais frequência não traz um valor novo; a biblioteca devolve a última medição de novo ou um erro.

Usando o DHT11 com o ESP32

O mesmo código roda no ESP32; basta definir DHT_PIN como, por exemplo, 4. Alimente o sensor pelo pino 3V3 do ESP32 para que a linha de dados também fique em 3,3 V; o DHT11 funciona bem com essa tensão. Os GPIO 34–39 são somente de entrada, então não servem para o DHT, porque a linha de dados é bidirecional. Na hora de escolher o pino, confira quais pinos do ESP32 são seguros na ferramenta Pinagem. Você pode mostrar as leituras em uma página web via Wi-Fi e acompanhá-las pelo celular.

DHT11 com o Raspberry Pi Pico (MicroPython)

O MicroPython tem um módulo dht integrado para sensores DHT, então não há biblioteca para instalar. Ligue o sensor ao pino 3V3 do Pico, ao GND e ao pino GP15:

MicroPython
1import dht
2from machine import Pin
3import time
4
5sensor = dht.DHT11(Pin(15))   # GP15 veri pini / data pin (DHT22 için dht.DHT22)
6
7while True:
8    try:
9        sensor.measure()
10        t = sensor.temperature()   # °C
11        h = sensor.humidity()      # %
12        print("Sicaklik:", t, "C  Nem: %", h)
13    except OSError:
14        print("Okuma hatası / read error")
15    time.sleep(2)

Ideias de projetos com DHT11

  • Termômetro digital com LCD: escreva os valores em um display 16x2; veja como em Como usar um display LCD I2C.
  • Ventilador controlado pela umidade: acione um ventilador por um relé quando a umidade passar de 65%; para a ligação, veja O que é módulo relé?
  • Alarme de umidade: toque um buzzer quando o limite for ultrapassado; O que é buzzer? explica os alertas sonoros.
  • Registrador de temperatura: salve uma leitura a cada 10 minutos com um módulo de relógio e um cartão SD.
  • Estação meteorológica Wi-Fi: publique as leituras com um ESP32 em uma página que qualquer dispositivo da sua rede doméstica pode abrir.

Erros comuns e como resolver

  • NaN constante ou “Failed to read”: o fio de dados pode estar em um pino diferente do que está no código, o resistor de pull-up pode estar faltando ou o código pode usar o tipo de sensor errado (DHT22 em vez de DHT11).
  • Ler com muita frequência: um sensor lido em intervalos menores que 2 segundos devolve o valor antigo ou um erro.
  • Temperatura mais alta do que deveria: o sensor pode estar perto demais do regulador de tensão do Arduino ou exposto ao sol; coloque-o a alguns centímetros da placa.
  • Leituras perdidas com cabos longos: o sinal enfraquece depois de alguns metros; reduza o pull-up para 4,7 kΩ, alimente o sensor com 5 V e use um cabo de boa qualidade.
  • Instabilidade no ESP32: se o sensor é alimentado com 5 V, a linha de dados é puxada para 5 V; alimente-o pelo 3V3 e use um GPIO que possa ser entrada e saída (por exemplo, o 4).
  • Esperar resposta instantânea: ele leva alguns segundos para registrar uma mudança de umidade; o DHT11 foi feito para monitorar um ambiente, não para medições rápidas.

Se você quer saber que outros sensores pode usar, dê uma olhada no Guia de sensores para Arduino e, para medir distância, veja Sensor de distância HC-SR04. No app BlueGrays você encontra projetos passo a passo com DHT11 e DHT22, com esquemas de circuito e código.

Perguntas frequentes

Devo comprar um DHT11 ou um DHT22?

Para uma leitura aproximada da temperatura e da umidade de um ambiente interno, o DHT11 basta e é mais barato. Escolha o DHT22 para uso ao ar livre, temperaturas abaixo de zero ou precisão de ±0,5 °C. A única mudança no código é definir o tipo de sensor como DHT22.

Por que meu DHT11 retorna NaN ou “Failed to read from DHT sensor”?

As causas mais comuns são o pino de dados errado, a falta do resistor de pull-up, o tipo de sensor errado no código e leituras frequentes demais. Confira a ligação, adicione um resistor de 10 kΩ no sensor avulso e espere 2 segundos entre as leituras.

Meu DHT11 mostra a temperatura errada. Como calibrar?

Um erro de ±2 °C é normal no DHT11. Coloque o sensor ao lado de um termômetro em que você confia, anote a diferença e some ou subtraia esse valor fixo da leitura no seu código. Garanta que o sensor fique longe de componentes que esquentam.

O DHT11 funciona com 3,3 V?

Sim, o DHT11 funciona de 3 a 5,5 V. Em placas de 3,3 V como o ESP32 e o Raspberry Pi Pico, o ideal é alimentá-lo pelo pino 3V3, assim a linha de dados nunca recebe 5 V.

O DHT11 pode ser usado ao ar livre ou perto de água?

O DHT11 não é à prova d'água; chuva, condensação e sol direto o danificam ou fazem com que ele leia errado. Ao ar livre, mantenha-o em uma caixa ventilada na sombra; para temperatura da água, um DS18B20 à prova d'água é mais adequado.

Posso ligar mais de um DHT11 em um Arduino?

Sim, mas cada sensor precisa de um pino de dados próprio; eles não podem compartilhar a mesma linha de dados. No código você define um objeto DHT separado para cada um, por exemplo DHT dht1(2, DHT11) e DHT dht2(3, DHT11).

Ver todos os projetos
Temperatura e umidade com DHT11
#55Intermediário

Temperatura e umidade com DHT11

Qual é a temperatura do seu quarto? O ar está úmido ou seco? O sensor DHT11 mede a temperatura e a umidade, e o Arduino mostra os valores em um display LCD de duas linhas, atualizando a cada poucos se

4.7(47)
73
Temperatura e umidade com ESP32 e DHT22 (com display LCD)
#117Intermediário

Temperatura e umidade com ESP32 e DHT22 (com display LCD)

Este projeto mede a temperatura e a umidade do ambiente com um sensor DHT22 e exibe os dados em tempo real em um LCD I2C 16x2. Os dados são lidos do sensor pelo protocolo de um fio (one-wire) com a biblioteca Adafruit DHT. Este projeto serve de base para estações meteorológicas IoT, automação residencial ou sistemas de monitoramento ambiental em estufas. A comunicação com o DHT22 é feita pelo pino GPIO 4 do ESP32.

4.8(38)
56
Registrador de temperatura com ESP32 (DHT22 + DS1307 RTC + microSD + OLED)
#144Avançado
Premium

Registrador de temperatura com ESP32 (DHT22 + DS1307 RTC + microSD + OLED)

Monte um registrador de temperatura com data e hora usando ESP32! Leia a temperatura e a umidade do DHT22 a cada minuto, obtenha a hora real do DS1307 RTC e grave os dados em CSV no cartão microSD. O OLED exibe a temperatura atual em letras grandes, a porcentagem de umidade, a data e a hora e o contador de registros. O arquivo /temp_log.csv no cartão SD pode ser aberto no Excel, Google Sheets ou pandas do Python para análise — ideal para monitorar estufas, acompanhar a temperatura de casa ou…

4.7(7)
12
Relógio, calendário e estação meteorológica de matriz de pontos (MAX7219, DS1307)
#85Intermediário
Premium

Relógio, calendário e estação meteorológica de matriz de pontos (MAX7219, DS1307)

Um painel com texto em rolagem para sua mesa ou parede que mostra, em sequência, a hora, a data e as condições do ambiente. No display LED 8x32, você vê primeiro a temperatura em Celsius e Fahrenheit,

5.0(50)
66
Medição de temperatura com NTC e display LCD 2x16
#44Iniciante
Premium

Medição de temperatura com NTC e display LCD 2x16

Meça a temperatura ao seu redor com um sensor que parece uma pequena conta. Esse componente, chamado NTC, deixa a eletricidade passar com mais facilidade à medida que aquece; o Arduino lê essa mudança

4.5(33)
44
ESP32 HTTPClient + API de clima (com display LCD)
#133Avançado
Premium

ESP32 HTTPClient + API de clima (com display LCD)

Neste projeto, usamos o ESP32 para fazer uma chamada REST à API de clima wttr.in pela internet com HTTPClient.h. Interpretamos a resposta JSON com ArduinoJson v7 e mostramos cidade, temperatura, umidade, condições do tempo e vento em um display LCD I2C, em turco e inglês. O wttr.in é grátis e não exige chave de API — basta informar o nome de uma cidade para consultar o clima atual. Os dados se atualizam sozinhos a cada 30 minutos, e o LED dá um retorno visual diferente para cada tela.

4.7(13)
20
Estação de irrigação inteligente
#83Avançado
Premium

Estação de irrigação inteligente

Um jardineiro que rega suas plantas sozinho para que elas não sequem enquanto você está de férias. Um sensor de umidade do solo mede o quanto a terra está úmida; quando ela seca, o Arduino aciona a bo

5.0(42)
57