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

如何解读HAF流量传感器数据?树莓派I2C读数解析求助

解析HAF传感器I2C数据b'\x06g'的方法

1. 拆解原始字节数据

你读取到的b'\x06g'是两个字节的二进制数据:

  • 第一个字节:0x06(十进制6,对应高8位)
  • 第二个字节:0x67(十进制103,对应低8位,字符'g'的ASCII码为103)

2. 拼接成16位数值

HAF传感器采用**高字节优先(MSB first)**的字节顺序,将两个字节拼接为16位无符号整数:

raw_data = b'\x06g'
output_value = (raw_data[0] << 8) | raw_data[1]
# 计算结果:0x06左移8位得到0x0600,与0x67按位或后为0x0667,十进制为1639

3. 换算为实际流量值

根据HAF传感器的规格(译自datasheet快照):

16位输出值对应0%~100%的满量程流量:

  • 0x0000 = 0% 满量程
  • 0xFFFF = 100% 满量程

结合你设定的maxflow=100 sccm,实际流量计算公式为:

maxflow = 100  # 满量程100 sccm
flow_rate = (output_value / 65535) * maxflow

代入数值计算:(1639 / 65535) * 100 ≈ 2.5 sccm

4. 修改代码实现完整解析

把解析逻辑整合到你的代码中,修改后代码如下:

import io, fcntl

I2C_SLAVE = 0x0703
I2C_BUS = 1
HAFAddr = 0x49
maxflow = 100  # 100 sccm

# 打开I2C设备
i2c_r = io.open(f"/dev/i2c-{I2C_BUS}", "rb", buffering=0)
fcntl.ioctl(i2c_r, I2C_SLAVE, HAFAddr)

# 读取2字节数据并解析
raw_data = i2c_r.read(2)
output_value = (raw_data[0] << 8) | raw_data[1]
flow_rate = (output_value / 65535) * maxflow

print(f"原始数据: {raw_data}")
print(f"16位输出值: {output_value}")
print(f"实际流量: {flow_rate:.2f} sccm")

i2c_r.close()

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.04 10:10:34