如何从字节数组中获取正确的温度值

时间:2019-04-02 08:45:29

标签: java android bluetooth-lowenergy

我试图创建一个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

有人可以帮助我读取该数组的确切值吗?

1 个答案:

答案 0 :(得分:1)

对IRULU / Guangdong Biolight Meditech 临时保姆应用程序进行反向工程后,看起来该消息具有以下格式:

            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将指示新消息的开始。
  • 长度:有效载荷长度(以字节为单位)。这是没有标记且没有校验和的长度。
  • 类型:消息的类型。 0x11似乎是温度消息。还有一条消息tpe 0x12似乎很有趣(即使我不明白它的目的)。应用会忽略其他消息类型。
  • 子类型:消息子类型。子类型0是温度测量值。子类型1和2似乎是警告/指标。
  • Low :温度值的低字节。
  • :温度值的高字节。
  • 未使用:该字节似乎未使用并设置为0。
  • 校验和:有效负载的校验和。只需通过添加有效载荷的所有字节(以 length 开头,以 unused 字段结尾)来计算。

温度值以0.01度(可能为摄氏)存储。因此,要提取它,您需要计算:

double temperature = ((message[5] & 0xff) * 256 + (message[4] & 0xff)) * 0.01;

在上面的示例中,结果为33.90°C。