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'海拔与绝对湿度
Section titled “海拔与绝对湿度”第一个 sensor 块以标准的bme280传感器组件 temperature、pressure 和 humidity 开始,每个都有自己的 id。
在bme280传感器之后,定义了一个模板传感器,通过lambda计算海拔。
变量 STANDARD_SEA_LEVEL_PRESSURE(单位为hPa)应根据您的位置填写。
该公式源自GitHub上的finitespace/BME280,
将当前测量的气压转换为以米为单位的海拔,并包含温度补偿。
第二个块使用绝对湿度组件,将当前测量的温度和相对湿度转换为绝对湿度(克/立方米)。
NOTE
使用BME280传感器准确计算海拔需要知道您所在位置和当天的海平面气压值。
这可以通过将全局常量 STANDARD_SEA_LEVEL_PRESSURE 替换为例如从互联网或固定传感器通过MQTT实时获取的值来实现。
等效海平面气压
Section titled “等效海平面气压”如上所述,使用固定安装的传感器计算海平面气压可以作为移动传感器的参考。
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
计算等效海平面气压时,传感器需要安装在固定海拔高度。 因此无法同时计算海拔,反之亦然!