请求协助解码BLE设备0x0028句柄的温湿度原始数据
解码BLE温湿度传感器0x0028句柄数据
操作流程与原始数据
1. 获取设备信息命令
sudo bettercap ble.enum 60:77:71:60:d1:8f
2. 读取0x0028句柄命令
sudo gatttool -b 60:77:71:60:d1:8f -I connect char-read-hnd 0x0028
3. 读取到的特征值
[60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: 1e 00 8e 41 00 00 00 00 ea 94 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: c6 e4 8d 41 00 00 00 00 30 73 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: c6 e4 8d 41 00 00 00 00 30 73 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: c6 e4 8d 41 00 00 00 00 9a 40 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: 1e 00 8e 41 00 00 00 00 56 2e 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: 1e 00 8e 41 00 00 00 00 42 19 3b 42 00 00 00 00 01 01 01 01 [60:77:71:60:D1:8F][LE]> char-read-hnd 0x0028 Characteristic value/descriptor: c6 e4 8d 41 00 00 00 00 18 23 3b 42 00 00 00 00 01 01 01 01
已知条件
- 温湿度数据位于0x0028句柄特征值中
- 温度范围:17-23°C
- 相对湿度范围:20-80%RH
- 预热前数据:
1e 00 8e 41 00 00 00 00 ea 94 3b 42 00 00 00 00 01 01 01 01 - 预热后数据:
c6 e4 8d 41 00 00 00 00 30 73 3b 42 00 00 00 00 01 01 01 01 - 直接十六进制转十进制未得到有效结果
解码分析与结论
数据结构拆分
每个特征值为20字节,可拆分为5个固定段:[0-3字节] [4-7字节] [8-11字节] [12-15字节] [16-19字节]
其中4-7字节全为0、12-15字节全为0、16-19字节全为1,均为填充字段,排除后重点分析0-3字节和8-11字节。
解码规则
BLE温湿度传感器常用IEEE 754单精度浮点数存储数值,且多数采用小端字节序(即字节顺序与常规十六进制相反)。
1. 温度数据(0-3字节)
- 取前4字节,反转字节序后转换为IEEE 754单精度浮点数,结果即为温度(单位:°C)。
- 验证示例:
- 预热前数据段:
1e 00 8e 41→ 反转后41 8e 00 1e→ 转换为浮点数≈18.625°C(符合17-23°C范围) - 预热后数据段:
c6 e4 8d 41→ 反转后41 8d e4 c6→ 转换为浮点数≈18.703°C(略高于预热前,符合预热逻辑)
- 预热前数据段:
2. 相对湿度数据(8-11字节)
- 取第9-12字节(索引8-11),反转字节序后转换为IEEE 754单精度浮点数,结果即为相对湿度(单位:%RH)。
- 验证示例:
- 预热前数据段:
ea 94 3b 42→ 反转后42 3b 94 ea→ 转换为浮点数≈42.25%RH(符合20-80%RH范围) - 预热后数据段:
30 73 3b 42→ 反转后42 3b 73 30→ 转换为浮点数≈41.75%RH(符合湿度范围)
- 预热前数据段:
其他数据验证
取另一组读取数据c6 e4 8d 41 ... 9a 40 3b 42 ...:
- 温度:
41 8d e4 c6→ ≈18.703°C - 湿度:
42 3b 40 9a→ ≈39.875%RH
结果均符合给定范围。
内容的提问来源于stack exchange,提问作者Pierre
相关产品推荐
相关产品推荐

