我有一个使用 IC2 接口(地址 0x76)连接到 Raspberry Pi 3的 BMP280( GYBMP280 数据表)。GYBMP280 连接到 3.3V(引脚 1)。
压力读数似乎很好——它的波动和预期的一样小。
但是,温度读数始终为 [255,255,0] = 0x000FFFF0。我用红外温度计确认我的传感器有一个合理的温度(大约 70F),在检测范围内。
我已经将我计划使用的库提炼成一个简短的测试程序,它只是初始化 GYBMP280 并读取适当的寄存器,见下文。
Bosch 数据表的第 24页显示了内存映射。
我做错了什么还是模块缺陷?
import smbus
import time
# Get I2C bus
bus = smbus.SMBus(1)
# BMP280 address, 0x76(118)
# Select Control measurement register, 0xF4(244)
# 0x27(39) Normal mode, Pressure and Temperature Oversampling rate = 1
bus.write_byte_data(0x76, 0xF4, 0x27) # 0b11 + (0b001 << 2) + (0b001 << 5)
# BMP280 address, 0x76(118)
# Select Configuration register, 0xF5(245)
# 0xA0(00) Stand_by time = 1000 ms
bus.write_byte_data(0x76, 0xF5, 0xA0)
time.sleep(0.5)
# BMP280 address, 0x76(118)
# Read data back from 0xF7(247), 8 bytes
# Pressure MSB, Pressure LSB, Pressure xLSB, Temperature MSB, Temperature LSB Temperature xLSB
data = bus.read_i2c_block_data(0x76, 0xF7, 6)
print(data) # OUTPUT: [102, 217,0, 255, 255,0], Press: [102,217,0] Temp: [255,255,0]
# Extract Pressure and Temperature
adc_p = (data[0]<<16 | data[1]<<8 | data[2]) >> 4
adc_t = (data[3]<<16 | data[4]<<8 | data[5]) >> 4
print("press=0x{0:08X}".format(adc_p)) #press = 0x00066D90
print("temp= 0x{0:08X}".format(adc_t)) #temp = 0x000FFFF0