跳转到内容

BME680 温度压力湿度气体传感器

bme680 传感器平台允许您在 ESPHome 中使用 BME680 (数据手册, Adafruit) 温度、压力和湿度传感器。需要在配置中设置 I²C 才能使此传感器工作。

BME680 温度、压力和湿度传感器。
# 示例配置条目
sensor:
- platform: bme680
temperature:
name: "BME680 温度"
oversampling: 16x
pressure:
name: "BME680 压力"
humidity:
name: "BME680 湿度"
gas_resistance:
name: "BME680 气体阻值"
address: 0x77
update_interval: 60s
  • temperature (可选): 温度传感器的信息。

    • oversampling (可选): 温度传感器的过采样参数。请参阅 过采样选项

    • 传感器的所有其他选项。

  • pressure (可选): 压力传感器的信息。

    • oversampling (可选): 温度传感器的过采样参数。请参阅 过采样选项

    • 传感器的所有其他选项。

  • humidity (可选): 湿度传感器的信息。

    • oversampling (可选): 温度传感器的过采样参数。请参阅 过采样选项

    • 传感器的所有其他选项。

  • gas_resistance (可选): 气体传感器的信息。

  • address (可选, 整数): 手动指定传感器的 I²C 地址。默认为 0x76。另一个地址可以是 0x77

  • iir_filter (可选): 设置无限脉冲响应滤波器以提高精度。可选值为 OFF1x3x7x15x31x63x127x。默认为 OFF

  • heater (可选): 气体传感器内部加热器的设置。设置此项可禁用内部加热器。

    • temperature (可选, 整数): 加热器的目标温度,在 200 到 400 °C 之间。默认为 320

    • duration (可选, 时间): 加热器应处于活动状态的持续时间。最大值为 4032ms。默认为 150ms

  • update_interval (可选, 时间): 检查传感器的时间间隔。默认为 60s

默认情况下,BME680 传感器在请求新值时会对每个值测量 16 次。但是,您可以配置此数量。可能的过采样值:

  • NONE (跳过该值)
  • 1x
  • 2x
  • 4x
  • 8x
  • 16x (默认)

基于 BME680 BSEC 组件 索引中的值,添加室内空气质量 (IAQ) 计算和 IAQ 标签。

# 示例配置条目
sensor:
- platform: bme680
temperature:
name: "BME680 温度"
oversampling: 16x
pressure:
name: "BME680 压力"
humidity:
id: "humidity"
name: "BME680 湿度"
gas_resistance:
id: "gas_resistance"
name: "BME680 气体阻值"
address: 0x77
update_interval: 60s
- platform: template
name: "BME680 室内空气质量"
id: iaq
icon: "mdi:gauge"
# 计算: comp_gas = log(R_gas[ohm]) + 0.04 log(Ohm)/%rh * hum[%rh]
lambda: |-
return log(id(gas_resistance).state) + 0.04 * id(humidity).state;
state_class: "measurement"
text_sensor:
- platform: template
name: "BME680 IAQ 分类"
icon: "mdi:checkbox-marked-circle-outline"
lambda: |-
if (int(id(iaq).state) <= 50) {
return {"优秀"};
}
else if (int(id(iaq).state) <= 100) {
return {"良好"};
}
else if (int(id(iaq).state) <= 150) {
return {"轻度污染"};
}
else if (int(id(iaq).state) <= 200) {
return {"中度污染"};
}
else if (int(id(iaq).state) <= 250) {
return {"重度污染"};
}
else if (int(id(iaq).state) <= 350) {
return {"严重污染"};
}
else if (int(id(iaq).state) <= 500) {
return {"极度污染"};
}
else {
return {"未知"};
}