跳转到内容

BME280 环境监测

Bme280是一个简单的温度、湿度和气压传感器,通过I²C或SPI进行通信。 通过一些简单的数学计算,可以确定传感器的高度或当前的海平面气压。 本指南适用于任何同时测量温度和气压的传感器,例如Bmp280或Bme680。

第一步是按照这里的描述连接传感器。 确认传感器正常工作后,我们可以继续添加一些公式。 在下面的示例中,根据您的硬件修改 platform: bme280(可以是 bme280_i2c 或 bme280_spi)。 具体细节请参阅Bme280。

sensor:
- platform: bme280_i2c
temperature:
name: "BME280 Temperature"
id: bme280_temperature
pressure:
name: "BME280 Pressure"
id: bme280_pressure
humidity:
name: "BME280 Relative Humidity"
id: bme280_humidity
address: 0x77
update_interval: 15s
- platform: template
name: "Altitude"
lambda: |-
const float STANDARD_SEA_LEVEL_PRESSURE = 1013.25; //in hPa, see note
return ((id(bme280_temperature).state + 273.15) / 0.0065) *
(powf((STANDARD_SEA_LEVEL_PRESSURE / id(bme280_pressure).state), 0.190234) - 1); // in meter
update_interval: 15s
icon: 'mdi:signal'
unit_of_measurement: 'm'
- platform: absolute_humidity
name: "Absolute Humidity"
temperature: bme280_temperature
humidity: bme280_humidity
- platform: template
name: "Dew Point"
lambda: |-
return (243.5*(log(id(bme280_humidity).state/100)+((17.67*id(bme280_temperature).state)/
(243.5+id(bme280_temperature).state)))/(17.67-log(id(bme280_humidity).state/100)-
((17.67*id(bme280_temperature).state)/(243.5+id(bme280_temperature).state))));
unit_of_measurement: °C
icon: 'mdi:thermometer-alert'

第一个 sensor 块以标准的bme280传感器组件 temperature、pressure 和 humidity 开始,每个都有自己的 id。 在bme280传感器之后,定义了一个模板传感器,通过lambda计算海拔。 变量 STANDARD_SEA_LEVEL_PRESSURE(单位为hPa)应根据您的位置填写。 该公式源自GitHub上的finitespace/BME280, 将当前测量的气压转换为以米为单位的海拔,并包含温度补偿。

第二个块使用绝对湿度组件,将当前测量的温度和相对湿度转换为绝对湿度(克/立方米)。

NOTE

使用BME280传感器准确计算海拔需要知道您所在位置和当天的海平面气压值。

这可以通过将全局常量 STANDARD_SEA_LEVEL_PRESSURE 替换为例如从互联网或固定传感器通过MQTT实时获取的值来实现。

如上所述,使用固定安装的传感器计算海平面气压可以作为移动传感器的参考。

sensor:
- platform: bme280
temperature:
name: "BME280 Temperature"
id: bme280_temperature
pressure:
name: "BME280 Pressure"
id: bme280_pressure
humidity:
name: "BME280 Relative Humidity"
id: bme280_humidity
address: 0x77
update_interval: 15s
- platform: template
name: "Equivalent sea level pressure"
lambda: |-
const float STANDARD_ALTITUDE = 0.6; // in meters, see note
return id(bme280_pressure).state / powf(1 - ((0.0065 * STANDARD_ALTITUDE) /
(id(bme280_temperature).state + (0.0065 * STANDARD_ALTITUDE) + 273.15)), 5.257); // in hPa
update_interval: 15s
unit_of_measurement: 'hPa'

NOTE

计算等效海平面气压时,传感器需要安装在固定海拔高度。 因此无法同时计算海拔,反之亦然!