BME280 环境

BME280 Temperature+Pressure+Humidity Sensor 是一个简单的温度、湿度和压力传感器,通过 I²CSPI 进行通信。 通过一些简单的数学计算,可以确定传感器的海拔高度,或者当前海平面气压。 本指南适用于同时测量温度和压力的任何传感器,例如 BMP280 Temperature+Pressure SensorBME680 Temperature+Pressure+Humidity+Gas Sensor

图片

第一步是按照 此处 的说明连接传感器。 验证传感器工作正常后,我们可以继续添加一些公式。 在下面的示例中,根据您的硬件修改 platform: bme280(要么是 bme280_i2cbme280_spi)。 查看 BME280 Temperature+Pressure+Humidity Sensor 获取具体细节。

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 海平面标准气压 = 1013.25; //以 hPa 为单位,见注释
      return ((id(bme280_temperature).state + 273.15) / 0.0065) *
        (powf((海平面标准气压 / 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 传感器之后,定义了一个 Template Sensor 来计算海拔高度,使用 lambda 表达式。 变量 海平面标准气压(以 hPa 为单位),应该根据您所在的位置进行填写。 从 finitespace/BME280 在 GitHub 上推导出的公式, 将当前测量的压力转换为包括温度补偿的海拔高度(以米为单位)。

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

ℹ️ Note

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

这可以通过用例如从互联网或通过 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 标准海拔高度 = 0.6; //以米为单位,见注释
      return id(bme280_pressure).state / powf(1 - ((0.0065 * 标准海拔高度) /
        (id(bme280_temperature).state + (0.0065 * 标准海拔高度) + 273.15)), 5.257); //以 hPa 为单位      
    update_interval: 15s
    unit_of_measurement: 'hPa'

ℹ️ Note

计算相当的海平面气压时,传感器需要安装在固定海拔高度。 因此,不可能同时计算海拔高度,反之亦然!

公式解释

参考资料见