跳转到内容

BME280 环境监测

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

第一步是按照 此处 描述的方式连接传感器。 验证传感器工作正常后,我们可以继续添加一些公式。 在下面的示例中,根据您的硬件将 platform: bme280 修改为适当的值(bme280_i2cbme280_spi)。 有关详细信息,请参阅 BME280

sensor:
- platform: bme280_i2c
temperature:
name: "BME280 温度"
id: bme280_temperature
pressure:
name: "BME280 气压"
id: bme280_pressure
humidity:
name: "BME280 相对湿度"
id: bme280_humidity
address: 0x77
update_interval: 15s
- platform: template
name: "海拔"
lambda: |-
const float STANDARD_SEA_LEVEL_PRESSURE = 1013.25; //单位 hPa,见注释
return ((id(bme280_temperature).state + 273.15) / 0.0065) *
(powf((STANDARD_SEA_LEVEL_PRESSURE / id(bme280_pressure).state), 0.190234) - 1); // 单位:米
update_interval: 15s
icon: 'mdi:signal'
unit_of_measurement: 'm'
- platform: absolute_humidity
name: "绝对湿度"
temperature: bme280_temperature
humidity: bme280_humidity
- platform: template
name: "露点"
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 传感器组件 temperaturepressurehumidity 开始,每个都有自己的 id。 在 bme280 传感器之后,定义了一个 模板传感器 来在 lambda 中计算海拔。 变量 STANDARD_SEA_LEVEL_PRESSURE(单位 hPa)应填写您所在位置的数值。 该公式来源于 GitHub 上的 finitespace/BME280, 将当前测量的气压转换为以米为单位的海拔高度,包括温度补偿。

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

NOTE

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

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

使用静态安装的传感器计算海平面气压可用作移动传感器的参考,如上面的注释所述。

sensor:
- platform: bme280
temperature:
name: "BME280 温度"
id: bme280_temperature
pressure:
name: "BME280 气压"
id: bme280_pressure
humidity:
name: "BME280 相对湿度"
id: bme280_humidity
address: 0x77
update_interval: 15s
- platform: template
name: "等效海平面气压"
lambda: |-
const float STANDARD_ALTITUDE = 0.6; // 单位:米,见注释
return id(bme280_pressure).state / powf(1 - ((0.0065 * STANDARD_ALTITUDE) /
(id(bme280_temperature).state + (0.0065 * STANDARD_ALTITUDE) + 273.15)), 5.257); // 单位:hPa
update_interval: 15s
unit_of_measurement: 'hPa'

NOTE

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