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
正如 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]
这看起来与您之前的问题有关,因此将其放在更完整的示例中:
\nimport \'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} \nRun Code Online (Sandbox Code Playgroud)\n当我在https://dart.dev/#try-dart上运行它时,它给出:
\nPressure: 46.41 psi\nTemperature: 27.14 \xc2\xb0C\nBattery: 94 %\nRun Code Online (Sandbox Code Playgroud)\n我无法测试以下代码,但我将尝试修改https://pub.dev/documentation/flutter_blue/latest/index.html上的扫描设备示例:
\nPressure: 46.41 psi\nTemperature: 27.14 \xc2\xb0C\nBattery: 94 %\nRun Code Online (Sandbox Code Playgroud)\n我期望 中的关键值advertisementData.manufacturerData是Company ID。让我感到困惑的是,您的示例中的十进制 256 的值是TomTom International BV的值,它可能不是发送压力、温度和电池值的设备。如果是这种情况,那么您将需要代码中的一些逻辑,以便仅parseManufacturerData在它是感兴趣的设备时调用。