gpt4 book ai didi

python - 使用 i2c、python 和树莓派读取 14 位数据

转载 作者:太空宇宙 更新时间:2023-11-03 17:13:32 25 4
gpt4 key购买 nike

我正在尝试从 this barometric pressure sensor 读取数据在树莓派上使用 python 和 i2c/smbus。

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

此示例使用 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 毫巴)以获得一些读数。我怀疑这是由于我读取数据的方式造成的,但没有真正的证据支持这一点。

此时,我不确定下一步要尝试什么。

我猜测了一些事情,但希望获得一些更明智的帮助:

  • 如何只读取传感器输出的 14 位?
  • 返回值的字节顺序是什么?假设大尾数产生的值看起来更理智,但我可能在这里混淆了多个问题。
  • 我如何知道从哪个寄存器读取?数据表中的任何地方都没有提到这一点。我猜想寄存器 0 可能是唯一的一个。

最佳答案

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

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

关于python - 使用 i2c、python 和树莓派读取 14 位数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33860574/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com