如何使用flutter_blue在flutter BLE中获取原始制造商数据

ram*_*mar 1 dart bluetooth-lowenergy flutter

我正在制作一个应用程序来使用 flutter 读取 BLE 信标,当我扫描设备并获取制造商数据时,我使用 flutter_blue{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}

设备制造商告诉我设备数据如下:

KCBAdvDataManufacturerData =<.. .. .. .. .. .. .. .. be 21 01 00 50 08 00 00 5e ..>

当我使用 BLE Hero 等现成的 BLE 应用程序扫描设备时,我得到的制造商数据为 00 01 08 1e ac a2 00 37 8f 35 05 00 f0 08 00 00 4b 00

我不知道如何转换

{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}

00 01 08 1e ac a2 00 37 8f 35 05 00 f0 08 00 00 4b 00

ukB*_*Baz 6

正如 flutter_blue 文档中所述,制造数据作为 Map 对象返回,您似乎在询问如何获取 Map 键/值对的值。

\n

以下教程对此进行了介绍:\n https://www.tutorialspoint.com/dart_programming/dart_programming_map.htm

\n

一般情况是map_name[key]. 在您的示例中,键是256,map_name 是KCBAdvDataManufacturerData这样,要获取列表,它将是KCBAdvDataManufacturerData[256]

\n

这看起来与您之前的问题有关,因此将其放在更完整的示例中:

\n
import \'dart:typed_data\';\n\nvar bleData = {256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]};\nmain() {\n  parseManufacturerData(bleData);\n}\nparseManufacturerData(data) { \n  var manufacturerData = Uint8List.fromList(data[256]);\n  var pressure = ByteData.sublistView(manufacturerData, 6, 10);\n  var temperature = ByteData.sublistView(manufacturerData, 10, 14);\n  var battery = ByteData.sublistView(manufacturerData, 14, 15);\n  print("Pressure: ${pressure.getUint32(0, Endian.little)/100} psi");\n  print("Temperature: ${temperature.getUint32(0, Endian.little)/100} \\u{00B0}C");\n  print("Battery: ${battery.getUint8(0)} %");\n} \n
Run Code Online (Sandbox Code Playgroud)\n

当我在https://dart.dev/#try-dart上运行它时,它给出:

\n
Pressure: 46.41 psi\nTemperature: 27.14 \xc2\xb0C\nBattery: 94 %\n
Run Code Online (Sandbox Code Playgroud)\n

我无法测试以下代码,但我将尝试修改https://pub.dev/documentation/flutter_blue/latest/index.html上的扫描设备示例:

\n
Pressure: 46.41 psi\nTemperature: 27.14 \xc2\xb0C\nBattery: 94 %\n
Run Code Online (Sandbox Code Playgroud)\n

我期望 中的关键值advertisementData.manufacturerDataCompany ID。让我感到困惑的是,您的示例中的十进制 256 的值是TomTom International BV的值,它可能不是发送压力、温度和电池值的设备。如果是这种情况,那么您将需要代码中的一些逻辑,以便仅parseManufacturerData在它是感兴趣的设备时调用。

\n