我正在开发可连接健身手表的蓝牙应用程序。这是我第一次使用蓝牙。我设法使用出色的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]
我不知道这些数字是什么意思,或者我应该如何处理它们。
答案 0 :(得分:1)
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)