搭建个人智能家居 7 - 空气颗粒物检测
- 前言
- 说明
- PMS5003
- ESPHome
- HomeAssistant
- 结束
前言
到目前为止,我们这个只能家居系统添加了4个外设,分别是:LED灯、RGB灯、DHT11温度传感器和SGP30。今天继续添加环境测量类传感器“PMS5003空气颗粒物检测传感器”,可检测周围环境空气中的颗粒物浓度,比如PM2.5。
前文回顾:
搭建个人智能家居 6 -SGP30 CO₂与TVOC测量
搭建个人智能家居 5 -DHT11温湿度测量
搭建个人智能家居 4 -WS2812B-RGB灯
搭建个人智能家居 3 -第一个设备“点灯”
搭建个人智能家居 2 -安装ESPHome
搭建个人智能家居 开篇(搭建Home Assistant)
说明
步骤和前面文章一样,都是先在ESPHome仪表台编辑.yaml文件,让后在HomeAssistant的控制台看结果,一般都是这样的步骤,后续的文章就不在啰嗦的做说明了。
本次实验需要用到:ESP32开发板、PMS5003激光颗粒物检测传感器和一个电源模块。
进入主题。
PMS5003
由PMS5003的手册可知,PMS5003是通过uart串口进行通讯的,默认主动上传数据,每帧32字节,传输协议如下:
一帧数据包含了PM1.0、PM2.5和PM10这三个大小颗粒物的两个标注测量数据,并且还包含了大于0.3um、0.5um、1.0um等6个颗粒物大小的计数输出。由于我们是用在房间这样的室内小空间,只取大气环境下PM2.5的数据。
ESPHome
PMS5003激光颗粒物检测传感器是通过UART串口通讯的,所以我们需要用到ESP32上的UART串口,由于ESP32的串口UART0被Logger组件占用了,我们可以另外定义UART串口使用。
官方的UART组件提供了以下可修改参数:
tx_pin — 写引脚定义
rx_pin — 读引脚定义
baud_rate — 波特率设置
data_bits — 数据位
stop_bits — 停止位
parity — 校验位
id — 总线ID
rx_buffer_size — 接收缓冲区
PMS5003的UART通讯参数为“默认波特率:9600bps、校验位:无、停止位:1 位”。定义UART串口时需要主要些参数,默认是一样的不需要改。
以下是串口定义的代码:
#UART串口定义
uart:
tx_pin: GPIO19
rx_pin: GPIO18
baud_rate: 9600
id: uart_1
定义的是软件UART,IO口可改,只要IO口可以正常读写高低电平就可以。
注意,id不能是数字开头。
PMS5003可以输出PM1.0-PM10的数据,由于在室内使用,所以只输出大气环境下PM2.5浓度数据
PMS5003输出PM2.5数据代码:
#PMS5003
- platform: pmsx003
type: PMSX003
pm_2_5:
name: "PM2.5 concentration"
uart_id: uart_1
工业生产车间等环境的测量需要用标准颗粒物质量浓度值测量可以用pm_2_5_std
替换掉pm_2_5
这个语句,其他大小颗粒物数据输出可以按下面方法修改:
如输出大气环境下PM1.0:pm_1_0
输出0.1 升空气中直径在 2.5um 以上颗粒物个数:pm_2_5um
上面代码是传感器主动上传数据,并实时更新在HomeAssistant的,如果需要调节数据上传间隔的即传感器被动上传数据,可以在代码后面加上update_interval:
+数字来控制数据更新间隔。
这里不做演示,有需要的可以自行更改。
目前项目整合代码:
captive_portal:
#I2C总线定义
i2c:
- id: bus_a
sda: GPIO12
scl: GPIO13
scan: true
#UART串口定义
uart:
tx_pin: GPIO19
rx_pin: GPIO18
baud_rate: 9600
id: uart_1
#Bin_LED
light:
- platform: binary
name: "led"
output: bin_led
#WS2812_RGB
- platform: neopixelbus
type: GRB
variant: WS2812
pin: GPIO4
num_leds: 25
name: "RGB_LED"
output:
- id: bin_led
platform: gpio
pin: GPIO2
#DHT11
sensor:
- platform: dht
pin: GPIO5
temperature:
name: "Current temperature"
humidity:
name: "Current humidity"
model: DHT11
update_interval: 10s
#SGP30
- platform: sgp30
i2c_id: bus_a
address: 0x58
eco2:
name: "Roome eCO2"
accuracy_decimals: 1
tvoc:
name: "Roome TVOC"
accuracy_decimals: 1
baseline:
eco2_baseline: 0x86C5
tvoc_baseline: 0x8B38
#store_baseline: yes
update_interval: 1s
#PMS5003
- platform: pmsx003
type: PMSX003
pm_2_5:
name: "PM2.5 concentration"
uart_id: uart_1
编译.yaml文件,并生成.bin文件
烧录进ESP32
HomeAssistant
进入HomeAssistant控制台,怎么进入HomeAssistant控制台可参考前面的文章,这里不做赘述。
在浏览器输入相应的域名进入
进去后可以看到HomeAssistant的控制台已经把刚才添加的PMS5003的PM2.5测量实体更新输出了。
由于传感器还没连接到ESP32开发板上,所以上面的实体都没有数据或不可用,现在按.yaml文件里的定义接好线供电,重启一下即可获取数据。
我们这个智能家居系统的第5个外设添加完成,PMS5003用于其他环境、或者其他大小颗粒物的测量根据上文说的方法更改变量即可。
系统现状:(线有点乱)
结束
在前面的文章里,有收到一些小伙伴的反馈,说HomeAssistant的控制台在浏览器上打开是空白的,或者可以尝试重置浏览器看看是否能解决,这边用的是"扣扣"浏览器和“Chrome”打开正常,如果大家也有这样的问题可以换浏览器或者重置浏览器试一下。