簡體   English   中英

如何從 BLE 制造商數據抖動中獲取所需值

[英]How to get desired values from BLE manufacturer data flutter

我是 Flutter 的新手,我正在開發一個從 BLE 信標讀取數據的應用程序。 我已掃描設備並將制造商數據設為{256:[0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]}

設備制造商告訴我設備數據如下:

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

UUID - kCBAdvDataManufacturerData 數據包包含傳感器數據,如下所示:

字節索引 8 – 11 = 壓力 32 位值

字節索引 12 – 15 = 溫度 32 位值

字節索引 16 = 電池電量百分比

我完全不知道在 Dart 中如何實現它

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

字節索引 8 – 11 = 壓力 32 位值

字節索引 12 – 15 = 溫度 32 位值

字節索引 16 = 電池電量百分比

然后以人類可以理解的形式,這里的溫度以 PSI 的 C 壓力為單位,電池以 % 為單位。

有一個字節列表,因此您可以使用https://api.dart.dev/stable/2.9.1/dart-core/List/sublist.html從該列表中獲取子列表

該子列表可以從 4 個字節轉換為壓力和溫度值的有符號整數:

將 4 字節轉換為有符號整數

我不確定您獲得的索引值是否正確。 我假設數據是小端格式,所以我對數據的假設是:

壓力 = [33,18,0,0] = 4641(您是否期望值約為 46.41psi?)

溫度 = [154,10,0,0] = 2714(您期望的值約為 27.14c 嗎?)

電池 = [94] = 94(您期望值為 94% 嗎?)

這可能會像下面這樣完成:

import 'dart:typed_data';

var manufacturerData = Uint8List.fromList([0,0,0,16,1,57,33,18,0,0,154,10,0,0,94,0]);
var pressure = ByteData.sublistView(manufacturerData, 6, 10);
var temperature = ByteData.sublistView(manufacturerData, 10, 14);
var battery = ByteData.sublistView(manufacturerData, 14, 15);
main() {
  print(pressure.getUint32(0, Endian.little));
  print(temperature.getUint32(0, Endian.little));
  print(battery.getUint8(0));
}

給我輸出:

4641
2714
94

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM