如何从Bluetooth LE(SIG)十六进制值提取温度十进制值

问题描述 投票:0回答:2

我正在开发xamarin android应用,以连接到蓝牙低能耗温度计。我已经可以连接并读取其值。我的问题是,它采用十六进制格式,但是我还没有找到一种以十进制(摄氏度)格式提取其值的方法。

以下是一些示例读数:

  • 对于36.0摄氏度,我得到06-68-01-00-FF-E2-07-03-0A-15-34-00-02
  • 对于36.2摄氏度,我得到06-6A-01-00-FF-E2-07-03-0A-14-14-00-02
  • 对于36.8摄氏度,我得到06-70-01-00-FF-E2-07-03-0A-14-1B-00-02
  • 对于34.6摄氏度,我得到06-5A-01-00-FF-E2-07-03-0A-14-1F-00-02

据我了解,它必须是上面2º的“列”(十六进制值68、6A,70、5A)。 10º和11º“柱”接缝中的值与测量时间(hh-mm)有关。

我如何提取价值?我可以使用通用公式吗?有没有办法知道它的度量单位,以便我可以转换为摄氏温度(如果还没有)?

xamarin.android bluetooth-lowenergy
2个回答
1
投票

“我的问题是它采用十六进制格式”。我确定您会收到一个字节数组,您只是以十六进制格式读取或打印它。

要获得有用的东西,您必须从原始字节数组中获取相关数据。

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]] >

第一个字节(字节[0] = 6是一个位标志:00000110。

bit 0最右边= 0,表示温度测量值,以摄氏度为单位。 (如果为1华氏度)。位1 = 1,表示时间戳字段存在(如果不存在0时间戳字段)。位2 = 1,表示存在温度类型字段,如果不存在0温度类型字段。

所有其他位均不相关,它们保留供将来使用。

Bites [1](104)和[2](1)是摄氏* 10的温度,以FLOAT表示。要获得temp乘以256的字节[2]并加上字节[1],将总数除以10。结果:1 * 256 + 104 =360。温度为36.0

Bite3和4在这里没有意义。通常它们是4字节温度浮动的一部分。

位[5](226)和[6](7)是作为INT16的年份:7 * 256 + 226 = 2018。

字节[7](3)是月份。 0表示未知,1 = 1月,此处3 = 3月。

字节[8](10)是一个月中的某天,这里是10。

[Byte [10](21)是小时(午夜之后的小时数),这里是21。

字节[11](52)是分钟,这里是52。

字节[12](0)是秒,这里是0。

[Byte [13](2)是温度类型,这里是主体(常规)。

1腋窝2身体(一般)

3耳朵(通常是耳垂)

4手指

5胃肠道

6口

7直肠

8趾

9鼓膜(耳鼓)

10-255保留供将来使用

0保留供将来使用


© www.soinside.com 2019 - 2024. All rights reserved.