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.

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ística | DHT11 | DHT22 (AM2302) |
|---|---|---|
| Tensão de alimentação | 3–5,5 V | 3,3–6 V |
| Corrente durante a medição | 0,5–2,5 mA | 1–1,5 mA |
| Faixa de temperatura | 0–50 °C | −40–80 °C |
| Precisão de temperatura | ±2 °C | ±0,5 °C |
| Faixa de umidade | 20–90% | 0–100% |
| Precisão de umidade | ±5% | ±2% (máx. ±5%) |
| Resolução | 1 °C / 1% | 0,1 °C / 0,1% |
| Taxa de amostragem | Uma vez por segundo | Uma vez a cada 2 segundos |
| Cor da caixa | Azul | Branca |

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ê.
| Sinal | Módulo de 3 pinos | Sensor de 4 terminais | Ligar em |
|---|---|---|---|
| Alimentação | VCC (+) | Terminal 1 | 5V (3V3 no ESP32 e no Pico) |
| Dados | DATA / OUT / S | Terminal 2 | Um pino digital (D2 no Uno) |
| Não usado | — | Terminal 3 | Sem ligação |
| Terra | GND (−) | Terminal 4 | GND |
Instalando a biblioteca DHT
- Abra o Gerenciador de Bibliotecas na Arduino IDE (o ícone de livro na barra lateral esquerda da Arduino IDE 2).
- Digite DHT sensor library na caixa de busca e instale a biblioteca da Adafruit.
- Quando ela perguntar sobre as dependências, escolha Instalar tudo para que a Adafruit Unified Sensor também seja instalada.
- 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.
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}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:
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).
Projetos para montar depois desta leitura
Ver todos os projetos
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

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.

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…

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,

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

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.

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
Mais artigos
App BlueGrays
Monte este circuito passo a passo pelo celular
Esquema do circuito, código e lista de componentes em uma só tela. Mais de 200 projetos com Arduino, ESP32 e Pico prontos para montar.
Escaneie com seu celular
Aponte a câmera para o código para abrir a loja de aplicativos do seu celular.
ou abrir a loja

