use*_*747 1 xamarin.android bluetooth-lowenergy
我正在开发一个 xamarin android 应用程序来连接到蓝牙低功耗温度计。\n我已经可以连接并读取其值。我的问题是它是十六进制格式,而且我还没有找到以十进制(摄氏度)格式提取其值的方法。
\n\n以下是一些示例读数:
\n\n据我了解,它一定是上面的 2\xc2\xba“列”(十六进制值 68、6A、70、5A)。10\xc2\xba 和 11\xc2\xba“列”接缝中的值与测量时间 (hh-mm) 相关。
\n\n我怎样才能提取价值?\n有我可以使用的通用公式吗?\n有没有办法知道它的测量单位,以便我可以转换为摄氏度(如果还没有)?
\n小智 6
“我的问题是它是十六进制格式”。我确信您收到了一个字节数组,您只是以十六进制格式读取或打印它。
为了获得有用的东西,您必须从原始字节数组中获取相关数据。
06-68-01-00-FF-E2-07-03-0A-15-34-00-02是[6,104,1,0,255,226,7,3,10,21,52,0,2]。
第一个字节 (byte[0] = 6) 是位标志:00000110。
位 0 是最右边的 = 0,表示温度测量值(以摄氏度为单位)。(如果是 1 华氏度)。
位 1 = 1,表示存在时间戳字段。0如果时间戳字段不存在。
位 2 = 1,表示存在温度类型字段。0如果温度类型字段不存在。
所有其他位都不相关,它们被保留以供将来使用。
Bytes[1] (104) 和 [2] (1) 是 FLOAT 形式的温度(以摄氏度 * 10 为单位)。要获得温度,请将 byte[2] 乘以 256 并添加 byte[1],然后将总计除以 10。结果:1 * 256 + 104 = 360。温度为 36.0
字节3和字节4在这里没有任何意义。通常它们是 4 字节温度浮点的一部分。
字节 [5] (226) 和 [6] (7) 是年份,如 INT16:7 * 256 + 226 = 2018。
Byte[7] (3) 是月份。0 表示未知,1 = 一月,这里 3 = 三月。
Byte[8] (10) 是一月中的第几天,这里是 10。
Byte[10] (21) 是小时(午夜过后的小时数),此处为 21。
Byte[11] (52) 是分钟,这里是 52。
Byte[12] (0) 是第二个,这里是 0。
Byte[13] (2) 是温度类型,这里是 Body(一般)。该字节的其他选项有:
1 Armpit
2 Body (general)
3 Ear (usually ear lobe)
4 Finger
5 Gastro-intestinal Tract
6 Mouth
7 Rectum
8 Toe
9 Tympanum (ear drum)
10 - 255 Reserved for future use
0 Reserved for future use```
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1967 次 |
| 最近记录: |