这个项目能做什么
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))。
如果你喜欢这个项目或觉得它有用,可以请我喝杯咖啡。
评论
0 评分人数达到10人后显示
登录后参与讨论。