如何在Flutter应用中通过flutter_blue_plus获取Gtech Lite血糖仪的血糖数据
实现Flutter连接Gtech Lite血糖仪获取血糖数据的方法
1. 核心问题说明
Gtech Lite遵循蓝牙医疗设备规范,其血糖测量数据对应的特征是Notify属性,而非你之前查找的Read属性,这是你没找到目标数据项的关键原因。
2. 明确设备BLE服务与特征UUID
蓝牙血糖服务的标准UUID是固定的:
- 血糖服务UUID:
00001808-0000-1000-8000-00805f9b34fb - 血糖测量特征UUID:
00002a18-0000-1000-8000-00805f9b34fb
3. 完整实现流程(基于flutter_blue_plus)
步骤1:扫描并连接设备
// 启动扫描,超时4秒 FlutterBluePlus.startScan(timeout: const Duration(seconds: 4)); // 监听扫描结果,匹配目标设备 FlutterBluePlus.scanResults.listen((results) { for (final result in results) { // 根据设备名称匹配,可根据实际设备名称调整 if (result.device.name.contains("Gtech Lite")) { FlutterBluePlus.stopScan(); // 发起设备连接 result.device.connect(); break; } } });
步骤2:发现服务并监听特征数据
连接成功后,遍历服务找到血糖服务,再启用Notify监听测量数据:
// 监听设备连接状态 device.connectionState.listen((state) { if (state == BluetoothConnectionState.connected) { // 发现设备所有服务 device.discoverServices().then((services) { for (final service in services) { // 匹配血糖服务UUID if (service.uuid.toString() == "00001808-0000-1000-8000-00805f9b34fb") { for (final characteristic in service.characteristics) { // 匹配血糖测量特征UUID if (characteristic.uuid.toString() == "00002a18-0000-1000-8000-00805f9b34fb") { // 启用Notify模式 characteristic.setNotifyValue(true); // 监听数据变化 characteristic.value.listen((bytes) { // 解析字节数据为血糖值 final glucoseValue = parseGlucoseData(bytes); // 此处可更新UI显示血糖值 print("当前血糖值:${glucoseValue} mmol/L"); }); } } } } }); } });
步骤3:解析原始字节数据
蓝牙血糖特征的字节遵循规范,解析逻辑如下:
double parseGlucoseData(List<int> bytes) { // 规范定义:第2-3位字节为血糖值(小端模式,单位mg/dL) final glucoseMgDl = (bytes[3] << 8) | bytes[2]; // 转换为常用的mmol/L单位(可选,根据需求调整) return double.parse((glucoseMgDl / 18.0).toStringAsFixed(2)); }
4. 关键注意事项
- 设备状态:Gtech Lite需处于可连接状态(如刚完成测量或进入配对模式)才能被扫描到
- 权限配置:Android需申请
BLUETOOTH_SCAN、BLUETOOTH_CONNECT权限;iOS需在Info.plist中添加NSBluetoothAlwaysUsageDescription权限 - 异常处理:添加连接失败、服务发现失败的捕获逻辑,避免程序崩溃
- 精准匹配:若设备名称不固定,可直接通过UUID匹配服务与特征,无需依赖设备名称
内容的提问来源于stack exchange,提问作者Aldama
相关产品推荐
相关产品推荐

