FlutterBlue特性

时间:2019-02-12 16:44:49

标签: bluetooth dart flutter

我正在开发可连接健身手表的蓝牙应用程序。这是我第一次使用蓝牙。我设法使用出色的FlutterBlue库将我的应用程序与设备连接起来。

但是,我无法理解我从阅读中获得的结果。这就是我阅读特征的方式:

_readCharacteristic(BluetoothCharacteristic c) async {
    var results = await widget.device.readCharacteristic(c);
    print("${results.toList()}");
    //setState(() {});
  }

这是结果:

[7, 133, 0, 0, 1, 0, 0, 124, 92, 1]

我不知道这些数字是什么意思,或者我应该如何处理它们。

1 个答案:

答案 0 :(得分:1)

来自documentation

var characteristics = service.characteristics;
for(BluetoothCharacteristic c in characteristics) {
    List<int> value = await device.readCharacteristic(c);
    print(value);
}

// Writes to a characteristic
await device.writeCharacteristic(c, [0x12, 0x34])

我们可以看到该库适用于List(int)类型,并且它发送/接收“ 32位”值。

最有可能发送了成对的字节,因此16位值表示为列表中的数字;这些是characters。这意味着您可以发送带有utf8表示形式的字符。

在上面的示例中,特征是先写入0x12,然后写入0x34。在指向ascii字符表的链接中,这表示为“((设备控制2)(4)”)。

您的工作是将它们解码为字符(UTF8),并在将它们发送回手表时对其进行编码。手表的软件需要这样做,它可以根据接收到的值来响应某些特征写入。

您可能需要对正在使用的手表的文档/蓝牙规格进行深入研究。

签出dart:convert lib的UTF8Decoder类。它应该可以帮助您将其翻译为易于阅读的文本。如果没有,则必须进行一些挖掘。

String decoded = UTF8Decoder().convert(value) // value == List<int>, Uint8List, etc.
print(decoded)