6.7 KiB
Executable File
Sensor de Temperatura DHT11 - Guia de Uso
🌡️ Sobre o DHT11
O DHT11 é um sensor digital de temperatura e umidade de baixo custo:
- Temperatura: 0°C a 50°C (±2°C precisão)
- Umidade: 20% a 90% RH (±5% precisão)
- Interface: One-wire digital
- Tempo de resposta: 1 segundo mínimo entre leituras
- Tensão: 3.3V a 5V
🔌 Conexão de Hardware
Pinagem do DHT11
DHT11 Sensor:
┌─────────┐
│ 1 │ VCC → 3.3V (ESP32-C6)
│ 2 │ DATA → GPIO 5 (configurável)
│ 3 │ NC → Não conectar
│ 4 │ GND → GND
└─────────┘
Esquema de Ligação
ESP32-C6 DHT11
┌────────┐
3.3V ──────────────►│ VCC │
│ │
GPIO 5 ────────────►│ DATA │
│ │ │
└─── 10kΩ ───┐ │ │
│ │ │
3.3V │ │ │
│ NC │
│ │
GND ───────────────►│ GND │
└────────┘
⚠️ IMPORTANTE:
- Use resistor pull-up de 10kΩ entre DATA e VCC
- Alguns módulos DHT11 já incluem o resistor pull-up
⚙️ Configuração
1. Ativar Sensor de Temperatura
Edite main/device_config.h:
/* Descomente APENAS sensor de temperatura */
// #define DEVICE_TYPE_RELAY
#define DEVICE_TYPE_TEMP_SENSOR /* ← Ative isso */
// #define DEVICE_TYPE_DOOR_SENSOR
// #define DEVICE_TYPE_MOTION_SENSOR
2. Configurar GPIO
No mesmo arquivo:
#ifdef DEVICE_TYPE_TEMP_SENSOR
#define GPIO_SENSOR_DHT11 5 /* GPIO do DHT11 */
#define SENSOR_UPDATE_INTERVAL 10000 /* 10 segundos */
#endif
GPIOs Recomendadas: 5, 6, 7, 10, 18, 19, 20, 21
3. Ajustar Intervalo de Atualização
#define SENSOR_UPDATE_INTERVAL 10000 /* 10 segundos (recomendado) */
// #define SENSOR_UPDATE_INTERVAL 5000 /* 5 segundos (mínimo seguro) */
// #define SENSOR_UPDATE_INTERVAL 60000 /* 1 minuto (economia energia) */
⚠️ Mínimo: 2000ms (2 segundos) - DHT11 requer 1s entre leituras
🏗️ Compilar e Gravar
# Compilar
idf.py build
# Gravar
idf.py -p /dev/ttyACM0 flash monitor
📊 Formato de Dados Zigbee
O DHT11 reporta temperatura e umidade no formato Zigbee padrão:
Cluster de Temperatura (0x0402)
- Atributo:
MeasuredValue(0x0000) - Tipo:
int16_t - Unidade: 0.01°C
- Exemplo: 2350 = 23.50°C
Cluster de Umidade (0x0405)
- Atributo:
MeasuredValue(0x0000) - Tipo:
uint16_t - Unidade: 0.01% RH
- Exemplo: 6500 = 65.00% RH
Leitura no ZHA/Home Assistant
O dispositivo aparece automaticamente com dois sensores:
# Sensor de Temperatura
sensor:
- platform: zha
name: "Temperatura Sala"
device: "0x98a316fffebf43a4"
cluster_id: 0x0402 # Temperature
attribute: 0
# Sensor de Umidade
sensor:
- platform: zha
name: "Umidade Sala"
device: "0x98a316fffebf43a4"
cluster_id: 0x0405 # Humidity
attribute: 0
Aparecerá automaticamente como duas entidades:
- sensor.temperatura_sala - Temperatura em °C
- sensor.umidade_sala - Umidade relativa em %
- Atualização: A cada 10 segundos (configurável)
🔍 Logs de Funcionamento
I (1250) DHT11: DHT11 initialized on GPIO 5
I (1260) DEVICE_REGISTRY: DHT11 sensor task started (update interval: 10000 ms)
I (11260) DHT11: Temperature: 23.0°C, Humidity: 65.0%
I (11265) DEVICE_REGISTRY: Sensor updated - Temperature: 23.0°C (Zigbee: 2300), Humidity: 65.0% (Zigbee: 6500)
I (21265) DHT11: Temperature: 23.5°C, Humidity: 64.0%
I (21270) DEVICE_REGISTRY: Sensor updated - Temperature: 23.5°C (Zigbee: 2350), Humidity: 64.0% (Zigbee: 6400)
⚠️ Troubleshooting
Erro: "Timeout waiting for response"
E (12000) DHT11: Timeout waiting for response LOW
Causas:
- DHT11 não conectado corretamente
- Falta resistor pull-up de 10kΩ
- GPIO incorreta
- Sensor danificado
Solução:
- Verifique conexões (VCC, DATA, GND)
- Adicione resistor pull-up 10kΩ
- Teste com outra GPIO
- Troque o sensor
Erro: "Checksum error"
E (12000) DHT11: Checksum error: calculated=0x5A, received=0x5B
Causas:
- Interferência eletromagnética
- Cabo muito longo
- Alimentação instável
Solução:
- Use cabo curto (<30cm)
- Adicione capacitor 100nF próximo ao sensor
- Estabilize alimentação 3.3V
- Afaste de fontes de ruído
Aviso: "Read too soon"
W (5500) DHT11: Read too soon, wait at least 1 second between reads
Causa: Tentativa de leitura antes de 1 segundo
Solução: Aumente SENSOR_UPDATE_INTERVAL para no mínimo 2000ms
Temperatura Sempre 0°C
Causas:
- Sensor não inicializado
- Problema no protocolo one-wire
- GPIO em conflito
Solução:
- Verifique logs de inicialização
- Teste GPIO com
gpio_get_level() - Use outra GPIO
- Verifique se pull-up está presente
🎯 Otimizações
Economia de Energia
Para dispositivos battery-powered:
#define SENSOR_UPDATE_INTERVAL 300000 /* 5 minutos */
Configure também como End Device:
/* Em esp_zb_switch.h */
esp_zb_cfg_t zb_nwk_cfg = ESP_ZB_ZED_CONFIG(); /* End Device */
Alta Frequência de Atualização
Para monitoramento rápido (com alimentação):
#define SENSOR_UPDATE_INTERVAL 2000 /* 2 segundos (mínimo) */
📈 Próximas Melhorias
✅ Cluster de Umidade - IMPLEMENTADO!
O DHT11 agora expõe temperatura e umidade via Zigbee automaticamente!
Alertas de Temperatura/Umidade
Implementar notificação quando valores excederem limites:
Implementar notificação quando temperatura exceder limites:
if (reading.temperature > 30.0f || reading.temperature < 10.0f) {
ESP_LOGW(TAG, "Temperature out of range: %.1f°C", reading.temperature);
// Enviar alerta via Zigbee
}
📚 Referências
🔗 Compatibilidade
Home Assistant (ZHA): ✅ Funciona automaticamente
Zigbee2MQTT: ✅ Compatível (Temperature Sensor)
Amazon Alexa: ✅ Via Home Assistant
Google Home: ✅ Via Home Assistant
Apple HomeKit: ✅ Via HomeAssistant Bridge