Sobre o projeto

TaupunktLueftung é um sistema baseado em ESP32 para controle inteligente de ventilação baseado na diferença de ponto de orvalho. É ideal para secagem direcionada de ambientes úmidos, como porões, lavanderias ou áreas de armazenamento – eficiente e totalmente automático. O sistema mede temperatura e umidade interna e externa (via sensores como SHT31 ou DHT22 – ou via MQTT), calcula os pontos de orvalho e ativa a ventilação somente quando existem condições de secagem – ou seja, quando o ar externo é capaz de absorver umidade em vez de introduzi-la. No modo de controle de umidade, tenta manter um nível de umidade desejado, desumidificando ou umidificando. A ventilação é comutada via relé – idealmente em uma configuração com dois ventiladores: um puxa ar seco para dentro, o outro exaure ar úmido. Isso cria um fluxo de ar eficaz para desumidificação direcionada. ## Recursos - Ventilação controlada por ponto de orvalho para desumidificação direcionada – um algoritmo de análise de ponto de orvalho controla a ventilação com base na diferença. - As credenciais WiFi são configuradas via ponto de acesso (`TaupunktLueftung-Setup`) no navegador e armazenadas permanentemente. Não é necessária edição manual em `secrets.h`. - Interface web com exibição de dados ao vivo, gráficos em tempo real (visualizações horárias, diárias e mensais) e área de configuração. - **Design claro/escuro (Claro/Escuro/Sistema)**, alternável via menu suspenso – a escolha é salva no navegador. - **Proteção por login (HTTP Basic Auth)** para toda a interface web, nome de usuário e senha alteráveis durante a operação. - Proteção opcional contra resfriamento excessivo. - Proteção opcional contra secura excessiva (umidade muito baixa). - Modo opcional de controle de umidade para manter um nível de umidade desejado. - **À prova de falhas em falha de sensor**: Se um erro de sensor persistir, a ventilação desliga automaticamente como medida de segurança, em vez de funcionar indefinidamente no último estado. - Tempos de atraso ajustáveis para proteção de ventiladores/relés em áreas de limite. - Interface MQTT (publicar e assinar) + descoberta automática do Home Assistant. - Modular: fonte de sensor selecionável (hardware ou dados MQTT), alternável diretamente na área "Fonte do sensor". - Backup de firmware: o firmware atual em execução pode ser salvo como `.bin` antes de uma atualização. - As credenciais WiFi podem ser redefinidas via botão na interface web sem perder outras configurações. - Suporta atualizações de firmware over-the-air (OTA). Após a gravação inicial via USB a partir do Arduino IDE, variantes de firmware personalizadas podem ser atualizadas via OTA a partir do Arduino IDE ou enviadas de um arquivo de firmware via interface web. - Otimizações de desempenho (desde v4.2): CSS/JavaScript são armazenados em cache pelo navegador em vez de serem recarregados do ESP32 a cada visita à página; uma correção de WiFi mantém o modo de suspensão do modem permanentemente desativado (evita atrasos perceptíveis após reconexões WiFi); as tentativas de reconexão MQTT são limitadas para que um broker inacessível não bloqueie a interface web. ## Componentes Necessários e Configuração ### Componentes de Hardware | Componente | Descrição | Preço Aprox. (EUR) | | --- | --- | --- | | **Placa de Desenvolvimento ESP32** (ex.: DOIT) | Microcontrolador com WiFi | 6–10 EUR | | **Sensor SHT31 (interno, opcionalmente externo)** | Temperatura e umidade, I2C, alta precisão | 5–8 EUR cada | | **Sensor DHT22 (externo, alternativa)** | Temperatura e umidade, single-wire digital, mais barato | 3–5 EUR | | **LEDs (3x)** + resistores (220–470 ohm) | Indicadores de status: verde, amarelo, vermelho | 1–2 EUR | | **Módulo de relé (1 canal)** | Para controlar a ventilação | 2–4 EUR | | **Fios jumper / protoboard** | Para configuração e teste | 2–5 EUR | | **Gabinete (opcional)** | Proteção para ESP32 e fiação | 3–8 EUR | **Custo total:** aprox. **20–30 EUR**, dependendo da configuração e da fonte. ### Configuração e Fiação **Pinagem do ESP32:** | Pino ESP32 | Função | Conectado a | | --- | --- | --- | | GPIO17 | Linha de dados DHT22 | DHT22 (com pull-up de 10 kohm) para GND – somente para variante DHT22 | | GPIO16 | Relé | Relé IN | | GPIO2 | LED verde | Resistor + LED | | GPIO18 | LED vermelho | Resistor + LED | | GPIO19 | LED amarelo | Resistor + LED | | GPIO21 | SDA (dados I2C) | SHT31 interno **e** SHT31 externo (barramento compartilhado) | | GPIO22 | SCL (clock I2C) | SHT31 interno **e** SHT31 externo (barramento compartilhado) | | 3.3V/GND | Alimentação | Todos os componentes | ### Esquema ASCII Simplificado ``` +----------------------------+ | ESP32 Dev | | | | GPIO17 --> DHT22 data | (somente variante DHT22) | GPIO16 --> Relé IN | | GPIO2 --> LED verde | | GPIO18 --> LED vermelho | | GPIO19 --> LED amarelo | | GPIO21 --> SDA (SHT31) | | GPIO22 --> SCL (SHT31) | +-------------+--------------+ | 3.3V / GND ``` LEDs: Ânodo (pino longo) → resistor → GPIO / Cátodo (pino curto) → GND ### Seleção do Sensor Externo Este projeto suporta dois tipos de sensor para o sensor externo: - **SHT31 (recomendado)** – sensor digital I2C, significativamente mais preciso e estável que o DHT22 (tipicamente ±2% UR vs ±2–5% UR para DHT22), responde mais rápido a mudanças, fornece valores confiáveis mesmo em baixas temperaturas e usa I2C, que é um protocolo de transmissão mais robusto e menos suscetível a interferências do que o timing single-wire proprietário do DHT22. Para controle baseado em pequenas diferenças de ponto de orvalho, maior precisão do sensor impacta diretamente a qualidade das decisões de ventilação. - **DHT22** – mais barato, menos preciso, mas com fiação mais simples de 3 fios sem endereçamento I2C. **Nota especial para dois sensores SHT31:** Como tanto o SHT31 interno quanto o externo opcional usam I2C, ambos os sensores podem operar no **barramento compartilhado** (SDA = GPIO21, SCL = GPIO22) – sem necessidade de linhas de dados adicionais. Para permitir que o ESP32 distinga entre os dois sensores, o SHT31 tem um pino `AD`/`ADR` para seleção de endereço: | Sensor | Pino ADDR/AD | Endereço I2C resultante | | --- | --- | --- | | SHT31 interno | aberto ou para GND | `0x44` (padrão) | | SHT31 externo | ligado a **3.3V** | `0x45` | *(Alguns módulos SHT31 têm um pino adicional `AL`/`ALR` – esta é uma saída de alarme/interrupção e não tem nada a ver com seleção de endereço; deixe-o desconectado.)* **Definindo o tipo de sensor externo:** Ao contrário do modo interno/externo (hardware ou MQTT), que pode ser definido na interface web, a escolha entre SHT31 e DHT22 para o sensor externo é intencionalmente uma **decisão em tempo de compilação** diretamente no código-fonte – desta forma, apenas a biblioteca de sensor realmente necessária é incluída durante a compilação, economizando memória flash e evitando comunicação I2C desnecessária com um possível segundo sensor inexistente. Para alterar o tipo de sensor: 1. Abra `TaupunktLueftung.ino`. 2. Encontre a linha `//#define SENSOR_TYP_AUSSEN_SHT31`. 3. Para **SHT31 externo** (padrão no repositório): mantenha a linha ativa (não comentada). 4. Para **DHT22 externo**: adicione o marcador de comentário `//` de volta no início e certifique-se de que o DHT22 esteja conectado ao pino 17. **Variantes de firmware pré-compiladas sem compilar você mesmo:** Cada [release](https://github.com/mallewski/TaupunktLueftung/releases) no GitHub contém automaticamente **dois arquivos `.bin` prontos** – `TaupunktLueftung_dht22.bin` e `TaupunktLueftung_sht31.bin`. Basta escolher o arquivo correspondente ao seu hardware durante a atualização OTA na interface web, sem necessidade de instalação do Arduino IDE. ### Notas - **Módulo de relé:** Pode ser usado para comutar um ventilador de ventilação de 230V. **Cuidado:** A tensão de rede só deve ser conectada por pessoal qualificado. - **MQTT:** Para receber dados de sensores externos, é necessário um broker MQTT (ex.: Mosquitto ou Home Assistant). A descoberta automática é suportada (compatível com Home Assistant). - **Interface web:** Todas as configurações, como MQTT, fontes de sensor e limites, são diretamente configuráveis via interface do navegador, protegidas por login (nome de usuário/senha). - **Credenciais padrão após a primeira gravação:** Nome de usuário `admin`, senha de `secrets.h` (`CONFIG_PASSWORD`) para firmware compilado por você mesmo, ou [...] Ambos podem ser alterados posteriormente na interface web em Configurações → Acesso (Login). ### Recomendação de Ventilador 100–150 m³/h para pequenos porões. Uma tomada inteligente WiFi integrada via sistema de automação residencial (como Home Assistant) também pode ser usada. ### Fonte de Alimentação e Desacoplamento Coloque 3.3V para GND o mais próximo possível dos pinos de alimentação, mais eficazmente como uma combinação de dois capacitores em paralelo: um **capacitor eletrolítico (470–1000 µF)** para quedas curtas de tensão, mais um **capacitor cerâmico (100 nF)** para picos curtos de ruído de alta frequência – o eletrolítico sozinho não lida adequadamente com componentes de alta frequência. ### Integração com Home Assistant (MQTT) Sensores existentes do Home Assistant podem ser alimentados como fonte de sensor via automação (veja [Guia: Sensores HA via MQTT](https://github.com/mallewski/TaupunktLueftung/blob/main/docs/Anleitung_HA_Sensoren_via_MQTT.md)). Se você gosta deste projeto ou o acha útil, pode me comprar um café.