小智音箱空气质量指数播报结合传感器联动
小智音箱空气质量指数播报结合传感器联动
你有没有过这样的经历:家里刚做完饭,厨房烟味还没散,孩子就开始咳嗽了——可你看了一眼空气检测仪,PM2.5明明“正常”?😅
问题出在哪?很多设备只测颗粒物,却忽略了TVOC(挥发性有机物)这种看不见的“隐形杀手”。而等你打开手机APP查看数据时,污染早已持续了好几分钟。
这正是我们今天要解决的问题。💡
不如让家里的
小智音箱
当你的“空气管家”——不用看屏幕,它会主动告诉你:“当前TVOC偏高,建议开启抽油烟机。”是不是瞬间安心了不少?
咱们这套系统的核心思路其实很简单:
用
PMS5003
测灰尘,用
SGP40
捕捉异味气体,再让
ESP32主控板
把这些数据揉在一起分析,最后通过局域网“喊话”给小智音箱,让它张嘴播报。整个过程在本地完成,
不依赖云端、无延迟、还保护隐私
。
听起来像黑科技?其实拆开来看,每一步都清晰可控,而且成本不高,DIY起来也超有成就感!👏
先说说那两个关键的小元件—— PMS5003 和 SGP40 ,它们就像是空气质量监测界的“左膀右臂”。
- PMS5003 是个激光颗粒物传感器,靠风扇吸气+激光散射来数空气中漂浮的微粒。它能精准告诉你 PM2.5 是 12 还是 89 μg/m³,特别适合监控做饭、扫地带来的扬尘。
- SGP40 则是个“嗅觉敏锐”的气体传感器,基于金属氧化物材料对 TVOC 做响应。但它有个小脾气:湿度一变,读数就飘。所以得配上一个 SHT30 温湿度传感器 ,做实时补偿,才能让它稳定输出可靠的 IAQ(综合空气质量指数)。
两者配合,就像眼睛和鼻子一起工作:一个看到烟雾弥漫,一个闻到焦糊味道,双管齐下,误判率大大降低。🧠👃👀
下面这段代码就是 ESP32 如何从 PMS5003 读取 PM2.5 数据的典型操作:
#include <HardwareSerial.h>
HardwareSerial sensorSerial(1);
void setup() {
Serial.begin(115200);
sensorSerial.begin(9600, SERIAL_8N1, 16, 17); // RX=16, TX=17
}
void loop() {
if (sensorSerial.available() >= 32) {
uint8_t data[32];
sensorSerial.readBytes(data, 32);
if (data[0] == 0x42 && data[1] == 0x4D) {
int pm25 = (data[6] << 8) | data[7];
Serial.printf("PM2.5: %d μg/m³\n", pm25);
if (pm25 > 35) {
triggerAirQualityAlert(pm25, "PM2.5");
}
}
}
}
别被串口协议吓到,其实就是等着传感器发来一包 32 字节的数据,校验帧头
0x42 0x4D
,然后把第6、7字节拼成 PM2.5 数值。简单直接,稳定性也不错,跑几天都没啥问题。
至于 SGP40,它是走 I²C 总线的,接线更省事。但它的原始输出是个“Raw Value”,不能直接当浓度看。你需要引入 Sensirion 官方提供的 VOC Algorithm(可以在 GitHub 找到),结合温湿度算出真正的 IAQ 指数。这个过程稍微复杂点,但一旦调通,准确率提升非常明显!
接下来重头戏来了:怎么让小智音箱“开口说话”?🗣️
很多人以为语音播报必须联网走云服务,其实不然。小智音箱支持局域网内的 HTTP 接口调用,只要你在内网里发个 POST 请求,它就能立刻播放你指定的文字内容。
比如这条请求:
POST http://xiaozhi.local/api/v1/tts
Content-Type: application/json
{"text": "当前空气质量为轻度污染,请注意开窗通风。"}
发送后不到一秒,音箱就会用清晰的普通话念出来,全程无需经过互联网,也不用唤醒词或账号登录。对于注重隐私的家庭来说,简直是刚需!🔐
实现起来也很轻松,用 ESP32 自带的
HTTPClient
库就能搞定:
#include <WiFiClient.h>
#include <HTTPClient.h>
const char* xiaozhi_ip = "192.168.31.100";
void speak(const String& message) {
if (WiFi.status() != WL_CONNECTED) return;
HTTPClient http;
http.begin("http://" + String(xiaozhi_ip) + "/api/v1/tts");
http.addHeader("Content-Type", "application/json");
String json = "{\"text\":\"" + message + "\"}";
int httpResponseCode = http.POST(json);
if (httpResponseCode > 0) {
Serial.printf("TTS播报成功: %s\n", message.c_str());
} else {
Serial.printf("TTS请求失败, 错误码: %d\n", httpResponseCode);
}
http.end();
}
你看,封装成一个
speak()
函数后,后面只需要写
speak("TVOC超标,请关闭香薰机")
就行了,开发体验非常友好。而且你可以自由控制语速、音量,甚至设置夜间静音模式,避免半夜突然来一句“甲醛浓度升高”,吓醒全家 😅。
真正让系统聪明起来的,其实是那个小小的决策逻辑—— 多传感器融合判断 。
你想啊,打扫房间时扬起一阵灰,PM2.5 瞬间飙到 90,但空气其实没啥毒气;反过来,点个蜡烛可能 PM 很低,TVOC 却悄悄爬升。如果只看单一指标,很容易“大惊小怪”或者“视而不见”。
所以我们设计了一个分级策略,参考国标 AQI 标准,把 PM2.5 和 TVOC 各自划分为四个等级:
| 等级 | PM2.5 范围 | TVOC (IAQ) 范围 |
|---|---|---|
| 优 | <35 | <25 |
| 良 | 35–75 | 25–50 |
| 轻度污染 | 75–115 | 50–75 |
| 中度及以上 | >115 | >75 |
最终结果取两者中最差的那个——也就是“短板效应”。代码实现也很直观:
enum AirQualityLevel {
EXCELLENT,
GOOD,
LIGHT_POLLUTION,
MODERATE_ABOVE
};
AirQualityLevel getAqiLevel(int pm25, int iaqIndex) {
AirQualityLevel pmLevel, tvocLevel;
if (pm25 < 35) pmLevel = EXCELLENT;
else if (pm25 < 75) pmLevel = GOOD;
else if (pm25 < 115) pmLevel = LIGHT_POLLUTION;
else pmLevel = MODERATE_ABOVE;
if (iaqIndex < 25) tvocLevel = EXCELLENT;
else if (iaqIndex < 50) tvocLevel = GOOD;
else if (iaqIndex < 75) tvocLevel = LIGHT_POLLUTION;
else tvocLevel = MODERATE_ABOVE;
return (pmLevel > tvocLevel) ? pmLevel : tvocLevel;
}
这样一来,系统就能智能区分“短暂扬尘”和“真实污染”,不会动不动就报警,用户体验自然就好多了。
顺便提一句,我还在里面加了个滑动平均滤波,防止某个异常数据点导致误触发。毕竟传感器偶尔也会“打喷嚏”嘛~🤧
整个系统的架构可以用一句话概括:
感知 → 分析 → 表达
硬件连接大概是这样:
[ PMS5003 ] →
\
→ [ ESP32主控 ] → WiFi → [ 小智音箱 ]
/ ↘
[ SGP40 + SHT30 ] → [ MQTT Broker(可选)]
↘
→ [ 手机APP / 云端后台 ]
所有核心处理都在 ESP32 上完成,每隔 30 秒采集一次数据,做补偿计算,评级,然后决定要不要“喊一声”。整个流程闭环运行,即使断网也能照常工作。
我还特意做了几个贴心设计:
- 🛌 夜间模式:晚上 10 点到早上 7 点自动关闭语音提醒;
- 🔧 OTA 升级:后续可以远程更新播报文案或调整阈值;
- 💡 扩展接口:预留 GPIO 引脚,未来接个继电器就能联动净化器自动开机;
- 🔐 隐私优先:所有数据可在本地闭环处理,完全不上云。
实际部署时建议把设备放在客厅中央或卧室床头柜,远离灶台、加湿器这些干扰源。电源最好用 5V/2A 的适配器,保证 PMS5003 的风扇稳定运转,不然会影响采样准确性。
说实话,这套方案最打动我的地方,不是技术多先进,而是它真的解决了几个“人”的问题:
- 👵 对老人和孩子来说,看不懂数字没关系,听懂一句话就够了;
- 🙈 我们常常忽略空气变化,直到喉咙不舒服才反应过来,而现在是系统提前预警;
- 🤫 不用掏出手机翻APP,信息主动送达,这才是智能家居该有的样子。
想象一下:宝宝正在熟睡,空气净化器默默启动的同时,音箱轻轻说一句:“已检测到空气质量下降,正在自动净化。”——那一刻你会觉得,科技终于有了温度。❤️
未来当然还能走得更远:
- 加个 CO₂ 传感器,提醒书房通风;
- 接入 Home Assistant,实现全屋自动化;
- 用机器学习预测趋势,比如“未来两小时TVOC将持续上升”;
- 多房间部署,形成空气地图,哪个角落脏了都知道。
但归根结底,好的智能设备不该让人去适应它,而是悄无声息地融入生活,像呼吸一样自然。
而这套“边缘感知 + 本地决策 + 语音反馈”的设计思路,或许正是下一代家庭健康监测产品的雏形。🌱
“最好的技术,是让你感觉不到它的存在。”
—— 但它一直在守护你。
更多推荐


所有评论(0)