这个项目能做什么

TaupunktLueftung 是一个基于 ESP32 的智能通风控制系统,通过露点差来控制通风。它非常适合对潮湿房间(如地下室、洗衣房或储藏室)进行有针对性的干燥——高效且全自动。 系统测量室内外的温度和湿度(通过 SHT31 或 DHT22 等传感器,或通过 MQTT),计算露点,并仅在存在干燥条件时启动通风——即室外空气能够吸收水分而非引入水分时。在湿度控制模式下,它通过除湿或加湿来维持目标湿度水平。 通风通过继电器切换——最佳配置是使用两个风扇:一个吸入干燥空气,另一个排出潮湿空气。这能产生有效气流,实现有针对性的除湿。 ## 功能 - 露点控制通风,实现有针对性的除湿——露点分析算法根据差值控制通风。 - WiFi 凭据通过接入点(`TaupunktLueftung-Setup`)在浏览器中配置并永久存储。无需手动编辑 `secrets.h`。 - 网页界面,包含实时数据展示、实时图表(小时、日和月视图)以及配置区域。 - **浅色/深色设计(浅色/深色/系统)**,可通过下拉菜单切换——选择保存在浏览器中。 - **登录保护(HTTP 基本认证)**,覆盖整个网页界面,用户名和密码可在运行期间更改。 - 可选的过冷温度保护。 - 可选的过低湿度干燥保护。 - 可选的湿度控制模式,用于维持目标湿度水平。 - **传感器故障时安全失效**:如果传感器错误持续存在,通风将自动关闭作为安全措施,而不是在最后状态下无限运行。 - 可调节的延迟时间,用于边界区域的风扇/继电器保护。 - MQTT 接口(发布与订阅)+ Home Assistant 自动发现。 - 模块化:可选择的传感器源(硬件或 MQTT 数据),可在“传感器源”区域直接切换。 - 固件备份:更新前可将当前运行的固件保存为 `.bin` 文件。 - 可通过网页界面中的按钮重置 WiFi 凭据,而不会丢失其他设置。 - 支持空中(OTA)固件更新。首次通过 USB 从 Arduino IDE 烧录后,可通过 OTA 从 Arduino IDE 更新定制固件变体,或通过网页界面上传固件文件。 - 性能优化(自 v4.2 起):CSS/JavaScript 由浏览器缓存,而非每次访问页面时从 ESP32 重新加载;WiFi 修复使调制解调器休眠模式永久禁用(防止 WiFi 重连后出现明显延迟);MQTT 重连尝试被限制,因此不可达的代理不会阻塞网页界面。 ## 所需组件和设置 ### 硬件组件 | 组件 | 描述 | 大约价格(欧元) | | --- | --- | --- | | **ESP32 开发板**(例如 DOIT) | 带 WiFi 的微控制器 | 6–10 欧元 | | **SHT31 传感器(室内,可选室外)** | 温度与湿度,I2C,高精度 | 每个 5–8 欧元 | | **DHT22 传感器(室外,替代方案)** | 温度与湿度,数字单线,更便宜 | 3–5 欧元 | | **LED(3 个)** + 电阻(220–470 欧姆) | 状态指示灯:绿色、黄色、红色 | 1–2 欧元 | | **继电器模块(1 通道)** | 用于控制通风 | 2–4 欧元 | | **跳线/面包板** | 用于搭建和测试 | 2–5 欧元 | | **外壳(可选)** | 保护 ESP32 和接线 | 3–8 欧元 | **总成本:** 约 **20–30 欧元**,取决于配置和来源。 ### 设置和接线 **ESP32 引脚分配:** | ESP32 引脚 | 功能 | 连接到 | | --- | --- | --- | | GPIO17 | DHT22 数据线 | DHT22(带 10 千欧上拉电阻)到 GND——仅适用于 DHT22 变体 | | GPIO16 | 继电器 | 继电器 IN | | GPIO2 | 绿色 LED | 电阻 + LED | | GPIO18 | 红色 LED | 电阻 + LED | | GPIO19 | 黄色 LED | 电阻 + LED | | GPIO21 | SDA(I2C 数据) | SHT31 室内 **和** SHT31 室外(共享总线) | | GPIO22 | SCL(I2C 时钟) | SHT31 室内 **和** SHT31 室外(共享总线) | | 3.3V/GND | 电源 | 所有组件 | ### 简化 ASCII 示意图 ``` +----------------------------+ | ESP32 Dev | | | | GPIO17 --> DHT22 data | (仅 DHT22 变体) | GPIO16 --> Relay IN | | GPIO2 --> Green LED | | GPIO18 --> Red LED | | GPIO19 --> Yellow LED | | GPIO21 --> SDA (SHT31) | | GPIO22 --> SCL (SHT31) | +-------------+--------------+ | 3.3V / GND ``` LED:阳极(长脚)→ 电阻 → GPIO / 阴极(短脚)→ GND ### 室外传感器选择 此项目支持两种室外传感器类型: - **SHT31(推荐)** – 数字 I2C 传感器,比 DHT22 更准确、更稳定(通常 ±2% RH,而 DHT22 为 ±2–5% RH),响应变化更快,在低温下也能提供可靠值,并且使用 I2C,这是一种比 DHT22 专有单线时序更稳健、更不易受干扰的传输协议。对于基于小露点差的控制,更高的传感器精度直接影响通风决策的质量。 - **DHT22** – 更便宜,精度较低,但接线更简单(3 线),无需 I2C 寻址。 **两个 SHT31 传感器的特别说明:** 由于室内和可选的室外 SHT31 都使用 I2C,两个传感器可以在**共享总线**(SDA = GPIO21,SCL = GPIO22)上运行——无需额外数据线。为了让 ESP32 区分两个传感器,SHT31 有一个 `AD`/`ADR` 引脚用于地址选择: | 传感器 | ADDR/AD 引脚 | 产生的 I2C 地址 | | --- | --- | --- | | SHT31 室内 | 悬空或接 GND | `0x44`(默认) | | SHT31 室外 | 接 **3.3V** | `0x45` | *(某些 SHT31 模块有额外的 `AL`/`ALR` 引脚——这是报警/中断输出,与地址选择无关;保持不连接。)* **设置室外传感器类型:** 与可在网页界面中设置的室内/室外模式(硬件或 MQTT)不同,室外传感器选择 SHT31 还是 DHT22 是源代码中的**编译时决策**——这样编译时只包含实际需要的传感器库,节省闪存并避免与可能不存在的第二个传感器进行不必要的 I2C 通信。 要更改传感器类型: 1. 打开 `TaupunktLueftung.ino`。 2. 找到行 `//#define SENSOR_TYP_AUSSEN_SHT31`。 3. 对于 **SHT31 室外**(仓库默认):保持该行激活(未注释)。 4. 对于 **DHT22 室外**:在行首添加注释标记 `//`,并确保 DHT22 连接到引脚 17。 **无需自行编译的预构建固件变体:** GitHub 上的每个[发布版本](https://github.com/mallewski/TaupunktLueftung/releases)自动包含**两个现成的 `.bin` 文件**——`TaupunktLueftung_dht22.bin` 和 `TaupunktLueftung_sht31.bin`。在网页界面进行 OTA 更新时,只需选择与硬件匹配的文件,无需安装 Arduino IDE。 ### 注意事项 - **继电器模块:** 可用于切换 230V 通风风扇。**注意:** 市电电压只能由合格人员连接。 - **MQTT:** 要接收外部传感器数据,需要 MQTT 代理(例如 Mosquitto 或 Home Assistant)。支持自动发现(兼容 Home Assistant)。 - **网页界面:** 所有设置(如 MQTT、传感器源和阈值)均可直接通过浏览器界面配置,并受登录(用户名/密码)保护。 - **首次烧录后的默认凭据:** 用户名 `admin`,密码来自 `secrets.h`(`CONFIG_PASSWORD`)用于自行编译的固件,或 [...] 两者均可稍后在网页界面的“设置 → 访问(登录)”中更改。 ### 风扇推荐 小型地下室房间建议使用 100–150 m³/h 的风扇。也可以使用通过智能家居系统(如 Home Assistant)集成的 WiFi 智能插头。 ### 电源和去耦 将 3.3V 到 GND 的电容尽可能靠近电源引脚放置,最有效的方式是并联两个电容的组合:一个**电解电容(470–1000 µF)**用于短时电压跌落,加上一个**陶瓷电容(100 nF)**用于短时高频噪声尖峰——仅用电解电容无法充分处理高频分量。 ### Home Assistant 集成(MQTT) 现有的 Home Assistant 传感器可通过自动化作为传感器源输入(参见[指南:通过 MQTT 使用 HA 传感器](https://github.com/mallewski/TaupunktLueftung/blob/main/docs/Anleitung_HA_Sensoren_via_MQTT.md))。 如果你喜欢这个项目或觉得它有用,可以请我喝杯咖啡。