BME280 环境监测
BME280 是一个简单的温度、湿度和气压传感器,通过 I²C 或 SPI 进行通信。 通过一些简单的数学运算,可以确定传感器的高度或当前的海平面气压。 本指南适用于任何同时测量温度和气压的传感器,如 BMP280 或 BME680。
第一步是按照 此处 描述的方式连接传感器。
验证传感器工作正常后,我们可以继续添加一些公式。
在下面的示例中,根据您的硬件将 platform: bme280 修改为适当的值(bme280_i2c 或 bme280_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'海拔和绝对湿度
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 温度" 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
要计算等效海平面气压,传感器需要安装在固定高度。 因此,无法同时计算海拔,反之亦然!