树莓派用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.70C 993.53hPa 56.12%
18.71C 993.54hPa 56.06%
18.71C 993.54hPa 55.95%
我推测这是传感器初始化导致的问题,目前计划丢弃首次读数,想请教该问题的原因是什么?
原因分析
这个固定的首次读数是BME280传感器出厂默认的校准寄存器占位值,并非真实环境采样数据,具体原因如下:
- BME280内部搭载了一组校准寄存器,存储着出厂时的校准参数,这些参数会在真实采样时用来修正原始数据,提升精度。
- 传感器刚完成I2C初始化时,还未触发第一次采样转换,此时读取数据接口会直接返回校准寄存器里的默认占位数值,也就是你看到的固定值。
- 你使用的
bme280Python驱动在首次调用读取方法时,会先返回这个占位值,同时触发传感器的第一次采样转换;等转换完成后,后续的读取操作才会返回经过校准的真实环境数据。
你计划丢弃首次读数的方案完全可行,只需在初始化传感器后,先调用一次读取方法并丢弃结果,再进入循环读取即可。
内容的提问来源于stack exchange,提问作者Peter_Brown_USA
相关产品推荐
相关产品推荐

