如何从字节数组中获取正确的温度值
Posted
技术标签:
【中文标题】如何从字节数组中获取正确的温度值【英文标题】:How to get the correct temperature value from byte array 【发布时间】:2019-04-02 08:45:28 【问题描述】:我正在尝试创建一个 BLE 应用程序,我想在其中捕获设备的温度值。我正在使用临时保姆设备。
我有这个 UUID=0000ffe1-0000-1000-8000-00805f9b34fb。从这里我得到一个字节数组。
// For all other profiles, writes the data formatted in HEX.
final byte[] data = characteristic.getValue();
if (data != null && data.length > 0)
final StringBuilder stringBuilder = new
StringBuilder(data.length);
for(byte byteChar : data)
stringBuilder.append(String.format("%02X ", byteChar));
intent.putExtra(EXTRA_DATA, new String(data) + "\n" +
stringBuilder.toString());
以下是一些十六进制结果:
AA 06 11 00 3E 0D 00 62 ---
AA 06 11 00 43 0D 00 67 ---
AA 06 11 00 49 0D 00 6D
谁能帮助我如何读取这个数组的确切值?
【问题讨论】:
很可能,设备以二进制格式发送数据。请将您当前代码的十六进制结果添加到您的问题中。你最喜欢double temp = data[3] / 100.0 + data[2];
我尝试过,但我一直有相同的值 17.0:此十六进制值 AA 06 11 00 3E 0D 00 62 的 TEMPERATUREEE 17.0 ----- 此十六进制值 AA 06 也有 TEMPERATUREEE 17.0 11 00 3E 0D 00 62
如果你的最终结果是像字符串一样显示字节数组的值,那么我建议你使用stringbuilder。遍历字节数组并将每个值附加到 stringbuilder 并最终使用 stringbuilder 显示值。
似乎没有关于传感器使用的协议的任何文档。所以我们必须对其进行逆向工程。您能否在三个相当不同的温度(例如 20、30 和 40 摄氏度)下进行温度测量,并将近似温度以及您从传感器获得的数据相加?
查看下面的问题,那里有答案***.com/questions/54829004/…
【参考方案1】:
在对 IRULU /广东生物光医疗临时保姆应用程序进行逆向工程后,消息看起来好像具有以下格式:
0 1 2 3 4 5 6 7
+------+------+------+------+------+------+------+------+
|Marker|Length|Type |Subtyp|Low |High |Unused|Chksum|
+------+------+------+------+------+------+------+------+
Example AA 06 11 00 3E 0D 00 62
这些字段是:
标记:始终为 0xAA。用于描述消息的标记。消息格式似乎旨在发送消息流。 0xAA 表示新消息的开始。 Length:负载长度,以字节为单位。这是没有标记和没有校验和的长度。 类型:消息的类型。 0x11 似乎是温度消息。还有一条消息 tpe 0x12 看起来很有趣(尽管我不明白它的目的)。应用会忽略其他消息类型。 子类型:消息子类型。子类型 0 是温度测量值。子类型 1 和 2 似乎是 high 和 low 警告/指标。 Low:温度值的低字节。 High:温度值的高字节。 未使用:此字节似乎未使用并设置为 0。 校验和:有效载荷的校验和。它只是通过添加有效负载的所有字节(以 length 开始并以 unused 字段结束)来计算。温度值以 0.01 度(可能是摄氏度)存储。所以要提取它,你计算:
double temperature = ((message[5] & 0xff) * 256 + (message[4] & 0xff)) * 0.01;
在上面的例子中,结果是 33.90 °C。
【讨论】:
在这个公式中,这个 256 乘数是什么意思?你能解释一下在那里使用 256 的目的及其来源吗? @TechyTee 该值被分成两个字节。每个字节可以有一个从 0 到 255 的值。因此通过将该值除以 256 将其拆分,将整数结果(商)放入一个字节,将余数放入另一个字节。要加入它们,必须撤消操作:将商乘以 256,然后将余数相加。以上是关于如何从字节数组中获取正确的温度值的主要内容,如果未能解决你的问题,请参考以下文章
Python:如何从 4 字节字节数组中获取 4 字节大小的整数?