Files

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:

  1. Verifique conexões (VCC, DATA, GND)
  2. Adicione resistor pull-up 10kΩ
  3. Teste com outra GPIO
  4. 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:

  1. Use cabo curto (<30cm)
  2. Adicione capacitor 100nF próximo ao sensor
  3. Estabilize alimentação 3.3V
  4. 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:

  1. Verifique logs de inicialização
  2. Teste GPIO com gpio_get_level()
  3. Use outra GPIO
  4. 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