打造智能家居空气卫士:ESPHome多合一空气质量监测方案
打造智能家居空气卫士:ESPHome多合一空气质量监测方案
你是否曾担心家中空气质量却苦于专业设备价格高昂?是否想实时掌握PM2.5、甲醛和TVOC(总挥发性有机物)浓度却不知从何入手?本文将带你用ESPHome构建一套经济实用的空气质量监测系统,仅需百元成本即可实现专业级监测功能。通过简单配置文件,你能在30分钟内完成从硬件接线到数据显示的全流程,让呼吸健康尽在掌握。
核心监测模块选型
ESPHome支持多种空气质量传感器,我们精选三类高性价比模块构建全方位监测网络:
1. PM2.5传感器:PMSX003系列
PMSX003是一款经典的激光粉尘传感器,能同时检测PM1.0、PM2.5和PM10浓度。其UART接口输出标准数据格式,ESPHome已内置完整驱动支持。
# PM2.5传感器配置示例 [tests/components/pmsx003/common.yaml](https://link.gitcode.com/i/03514137549f648e6d5967ba766cc28d)
sensor:
- platform: pmsx003
type: PMSX003
pm_2_5:
name: "室内PM2.5浓度"
pm_10_0:
name: "室内PM10浓度"
update_interval: 30s
该传感器提供两种检测模式:主动模式(默认)每30秒自动输出数据,被动模式需手动触发。建议在配置中添加uart组件指定波特率为9600。
2. 甲醛与TVOC传感器:SM300D2
SM300D2是一款突破性的多参数传感器,集成了甲醛、TVOC、CO₂和温湿度检测功能,通过UART接口输出所有数据。这意味着只需一个传感器即可完成多种气体监测。
# 多合一气体传感器配置 [tests/components/sm300d2/common.yaml](https://link.gitcode.com/i/c062beb0ad58227df028fa5a9709da40)
sensor:
- platform: sm300d2
formaldehyde:
name: "甲醛浓度"
unit_of_measurement: "mg/m³"
accuracy_decimals: 3
tvoc:
name: "TVOC浓度"
unit_of_measurement: "ppb"
pm_2_5:
name: "PM2.5浓度"
update_interval: 60s
SM300D2的独特之处在于内置了温度补偿算法,即使在温差较大的环境中也能保持测量精度。其甲醛检测范围为0-5mg/m³,分辨率达0.001mg/m³,完全满足室内环境监测需求。
3. 高精度TVOC传感器:SGP30
对于追求更高精度TVOC检测的场景,SGP30是理想选择。这款I²C接口传感器能检测低至0-60000ppb的TVOC浓度,并内置基线自动校准功能。
# SGP30传感器配置 [tests/components/sgp30/common.yaml](https://link.gitcode.com/i/3a6d9c712b320f210f36bf4a98749e4c)
sensor:
- platform: sgp30
i2c_id: i2c_bus
tvoc:
name: "室内TVOC"
accuracy_decimals: 1
eco2:
name: "等效CO₂"
update_interval: 5s
SGP30需要预热15分钟才能达到最佳检测状态,建议在配置中添加auto_calibration: true启用自动校准。
完整硬件接线方案
根据选择的传感器类型,以下是两种推荐的接线方案:
方案A:单传感器精简版(SM300D2)
如果追求极简配置,SM300D2单传感器即可实现全部功能:
| ESP32引脚 | SM300D2引脚 | 功能说明 |
|---|---|---|
| 3.3V | VCC | 电源输入 |
| GND | GND | 接地 |
| GPIO16 | TX | 传感器数据输出 |
| GPIO17 | RX | 传感器指令输入 |
| GPIO4 | SET | 模式控制(可选) |
这种方案只需4根线即可完成连接,适合空间有限的场景。传感器默认波特率为9600bps,无需额外配置。
方案B:专业监测版(PMSX003+SGP30)
如需更高精度监测,可组合使用PMSX003(PM2.5)和SGP30(TVOC):
ESP32 PMSX003 SGP30
┌───┐ ┌───┐ ┌───┐
│ │ │ │ │ │
│ 5V├──────────┤VCC│ │ │
│GND├──────────┤GND├───────────┤GND│
│16 ├──────────┤TX │ │ │
│17 ├──────────┤RX │ │ │
│21 ├──────────────────────────┤SDA│
│22 ├──────────────────────────┤SCL│
│ │ │ │ │ │
└───┘ └───┘ └───┘
PMSX003需要5V电源供电,而SGP30使用3.3V,注意不要接错电压。I²C总线上还可同时连接其他I²C设备(如OLED显示屏),但总电流不应超过ESP32的3.3V输出能力(通常为500mA)。
配置文件编写详解
ESPHome采用YAML配置文件定义设备行为,以下是完整的空气质量监测配置示例:
esphome:
name: air-monitor
platform: ESP32
board: nodemcu-32s
# 启用I²C总线(用于SGP30等设备)
i2c:
sda: GPIO21
scl: GPIO22
scan: true
# 启用UART(用于PMSX003/SM300D2)
uart:
- id: uart_bus
tx_pin: GPIO17
rx_pin: GPIO16
baud_rate: 9600
sensor:
# PM2.5传感器配置
- platform: pmsx003
uart_id: uart_bus
type: PMSX003
pm_2_5:
name: "PM2.5浓度"
device_class: "pm25" # 设备类别标识 [esphome/components/sensor/__init__.py](https://link.gitcode.com/i/f8faba1db1d379e8241152d3a6ae4c7b)
state_class: "measurement"
pm_10_0:
name: "PM10浓度"
device_class: "pm10" # 设备类别标识 [esphome/components/sensor/__init__.py](https://link.gitcode.com/i/f4e71d5bef0e1da73dd67fb67f40f35d)
# 甲醛传感器配置
- platform: sm300d2
uart_id: uart_bus
formaldehyde:
name: "甲醛浓度"
unit_of_measurement: "mg/m³"
accuracy_decimals: 3
tvoc:
name: "TVOC浓度"
device_class: "volatile_organic_compounds" # 设备类别标识 [esphome/components/sensor/__init__.py](https://link.gitcode.com/i/91baa5df05222411b16d00c2daedaa35)
# WiFi配置
wifi:
ssid: "你的WiFi名称"
password: "你的WiFi密码"
# 启用OTA更新
ap:
ssid: "AirMonitor Fallback"
password: "fallbackpassword"
# 启用Web服务器查看实时数据
web_server:
port: 80
# 启用Home Assistant API
api:
password: "api_password"
# 启用日志输出
logger:
level: INFO
配置文件中的device_class参数非常重要,它定义了传感器类型,使Home Assistant等系统能正确识别和处理数据。ESPHome支持多种空气质量相关的设备类别,完整列表可查看传感器组件源码。
数据可视化与告警设置
收集到数据后,我们需要直观展示和及时告警:
Web服务器实时监控
配置中的web_server组件会在设备上创建一个小型网页服务器,访问ESP32的IP地址即可查看实时数据:
http://[设备IP地址]/
网页界面会显示所有已配置的传感器数据,并自动刷新。这对于调试和临时查看非常方便。
Home Assistant集成
通过api组件,设备可与Home Assistant无缝集成。添加后,你可以:
- 在仪表盘添加空气质量卡片,设置不同污染物的颜色告警阈值
- 创建自动化规则,如当PM2.5超过75μg/m³时自动开启空气净化器
- 生成历史趋势图表,分析空气质量变化规律
本地告警(可选)
如需脱离Home Assistant使用,可添加LED和蜂鸣器实现本地告警:
# 本地告警配置示例
binary_sensor:
- platform: template
name: "PM2.5超标"
lambda: return id(pm25).state > 75;
switch:
- platform: gpio
name: "告警LED"
pin: GPIO2
automation:
- trigger:
platform: state
entity_id: binary_sensor.pm2_5超标
to: "on"
then:
- switch.turn_on: 告警LED
- delay: 5s
- switch.turn_off: 告警LED
安装与调试技巧
固件刷写
完成配置文件后,通过以下命令编译并刷写固件:
esphome run air_monitor.yaml
如果使用Docker,可通过项目提供的Dockerfile构建环境:
cd docker && docker build -t esphome . # [docker/Dockerfile](https://link.gitcode.com/i/d297811a4cb2630760a271f80c75c50d)
常见问题排查
-
传感器无数据输出:检查UART波特率是否匹配,PMSX003默认9600,SM300D2默认9600或115200。
-
数据波动过大:增加
filters: sliding_window_moving_average平滑数据:
sensor:
- platform: pmsx003
pm_2_5:
name: "PM2.5浓度"
filters:
- sliding_window_moving_average:
window_size: 5
send_every: 5
- WiFi连接不稳定:尝试将
power_save_mode: none添加到wifi配置中。
总结与进阶方向
本文介绍的ESPHome空气质量监测系统具有以下优势:
- 低成本:全套硬件成本不到200元,仅为专业设备的1/10
- 易扩展:可添加更多传感器如CO₂、温湿度等
- 本地化:数据处理本地完成,保护隐私
- 跨平台:支持Home Assistant、OpenHAB等主流智能家居系统
进阶探索方向:
- 电池供电:使用DeepSleep模式实现低功耗运行,搭配太阳能板实现永久续航
- 数据记录:添加SD卡模块实现本地数据存储
- 多节点网络:使用ESP-NOW协议组建传感器网络,覆盖更大面积
- AI预测:结合历史数据预测空气质量变化趋势
希望本文能帮助你构建属于自己的空气质量监测系统。如有任何问题,欢迎查阅ESPHome官方文档或在社区寻求帮助。呼吸健康,从实时监测开始!
如果你觉得这个项目有用,请点赞收藏,关注作者获取更多智能家居DIY教程。下期我们将介绍如何用这些数据控制空气净化器自动运行。
更多推荐

所有评论(0)