使用 i2c、python 和 raspberry pi 读取 14 位数据

reading 14-bit data using i2c, python, and raspberry pi

我正在尝试使用 python & i2c/smbus.

从 raspberry pi 上的 this barometric pressure sensor 读取数据

传感器的数据 sheet(第 10 页)表示它将输出 0-16383 (2**14) 范围内的数字值。到目前为止,我似乎必须读取整个字节,所以我不确定如何获得 14 位值。 (我有一个 link 到数据 sheet,但是所以说我需要更多的声誉才能向帖子添加更多 link。)

此示例使用 Adafruit's I2C python library,它基本上是 SMBus 的包装器。

import Adafruit_I2C
import time

# sensor returns a 14-bit reading 
max_output = 2**14 
# per data sheet, max_output == 1.6 bar
max_bar = 1.6

# i2c address specified in data sheet
sensor = Adafruit_I2C.Adafruit_I2C(0x78)

while True:
  reading = sensor.readU16(0, little_endian=False)

  # reading is sometimes, but not always, greater than 2**14
  # this adjustment feels pretty hacky/wrong
  while reading > max_output:
    reading = reading >> 1

  bar = reading / float(max_output) * max_bar
  print bar
  time.sleep(1)

我将这些读数与我的手持式 GPS 的输出进行比较,后者包括一个气压计。有时我得到的读数有些接近(当 GPS 读数为 1001 毫巴时为 1030 毫巴),但传感器随后急剧下降(降至 930 毫巴)以获得一些读数。我怀疑这是由于我读取数据的方式造成的,但没有真正的证据支持这一点。

此时,我不确定接下来要尝试什么。

有些事情我已经猜到了,但如果您能提供更明智的帮助,我将不胜感激:

您应该屏蔽传感器的输出,而不是移动它。例如reading = reading & (max_output-1) 应该可以做到。

前两位是状态位,因此如果有时设置它们可能意味着:正常模式或陈旧数据指示器。