You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

树莓派用Python3驱动BME280传感器首读异常问题求助

问题描述

我有两个Pimoroni BME280传感器,使用以下Python 3代码读取数据时,两者首次读取的数值均固定为21.95*C、698.09hPa、76.34%湿度,后续读取的数值则恢复正常。

使用的代码如下:

import time
from smbus2 import SMBus
from bme280 import BME280
bus = SMBus(1)
bme280 = BME280(i2c_dev=bus)
while True:
    temperature = bme280.get_temperature()
    pressure = bme280.get_pressure()
    humidity = bme280.get_humidity()
    print('{:05.2f}*C {:05.2f}hPa {:05.2f}%'.format(temperature, pressure, humidity))
    time.sleep(1)

首次输出示例:

21.95*C 698.09hPa 76.34%

后续正常输出示例:

18.70C 993.54hPa 55.88%
18.70
C 993.53hPa 56.12%
18.71C 993.54hPa 56.06%
18.71
C 993.54hPa 55.95%

我推测这是传感器初始化导致的问题,目前计划丢弃首次读数,想请教该问题的原因是什么?

原因分析

这个固定的首次读数是BME280传感器出厂默认的校准寄存器占位值,并非真实环境采样数据,具体原因如下:

  • BME280内部搭载了一组校准寄存器,存储着出厂时的校准参数,这些参数会在真实采样时用来修正原始数据,提升精度。
  • 传感器刚完成I2C初始化时,还未触发第一次采样转换,此时读取数据接口会直接返回校准寄存器里的默认占位数值,也就是你看到的固定值。
  • 你使用的bme280 Python驱动在首次调用读取方法时,会先返回这个占位值,同时触发传感器的第一次采样转换;等转换完成后,后续的读取操作才会返回经过校准的真实环境数据。

你计划丢弃首次读数的方案完全可行,只需在初始化传感器后,先调用一次读取方法并丢弃结果,再进入循环读取即可。

内容的提问来源于stack exchange,提问作者Peter_Brown_USA

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.10 18:10:27