Flutter---BLE设备通信

BLE的工作原理

概念

在 Flutter 中实现低功耗蓝牙(BLE)功能,本质上是利用手机作为中心设备(Central),与外围设备(Peripheral,如心率带、智能灯等)进行通信。

在BLE通信中,存在两个主要角色

中心设备 (Central):通常指手机。它负责扫描、连接和管理外围设备。Flutter应用就扮演这个角色。

外围设备 (Peripheral) :通常指心率监测器、智能手环等低功耗设备。它们不断发送广播包(Advertising Packets) 来宣告自己的存在。

在Flutter中,需要借助三方插件(如 flutter_blue_plus、flutter_reactive_ble)作为桥梁,通过平台通道(Platform Channel) 调用iOS的CoreBluetooth和Android的BluetoothAdapter等原生API,实现对硬件的操作。

BLE开发的核心流程

①扫描设备

原理 :外围设备会在固定的3个广播信道(37、38、39)上发送数据包,中心设备在这些信道上扫描并捕获信息。

操作 :在Flutter中,调用 FlutterBluePlus.startScan() 方法,然后监听 scanResults 流来获取设备列表。通常可以按设备名称或服务UUID进行过滤。

②连接设备

原理 :中心设备会锁定外围设备的广播信道,并开始跳频到数据信道上进行通信,从而建立一条点对点的连接。

操作 :使用 device.connect() 方法。这是一个异步操作,需要注意连接状态的处理。

③发现服务与特征

设备能做什么(服务)以及怎么做(特征)

服务 (Service):是设备功能的集合,比如"电池服务"或"心率服务"。每个服务都有一个唯一的UUID。

特征 (Characteristic):是服务内部的最小数据单元。比如"心率服务"下会有一个"心率测量"特征。读写数据都是针对特征进行的。

操作 :调用 device.discoverServices() 获取所有服务,然后遍历并找到你需要操作的特征。每个特征都有其属性(Properties),定义了它支持的操作。

比如有这些属性

read:用来读取数据

write:用来写入数据

notify:用来订阅通知

indicate:指示,功能与notify差不多,但是需要接收方确认

④数据交互

读/写操作 :对于简单的开关或一次性读取,直接调用 characteristic.read() 或 characteristic.write()。

订阅通知 :对于需要持续监控的数据(如心率),你需要先开启通知 await characteristic.setNotifyValue(true),然后监听其 onValueReceived 流,当设备端有数据更新时,你会自动收到回调。

⑤具体协调

权限处理 :在Android上,除了蓝牙权限,还必须动态申请精确定位权限 ,因为扫描蓝牙会关联到位置信息。在iOS上,则需要在Info.plist中说明使用蓝牙的目的。

MTU 协商 :BLE单次传输的数据量有限(通常20字节)。如果需要传输大量数据(如图片、固件),可以通过 requestMtu 方法协商更大的传输单元(MTU),并进行数据的分包与组包处理。

平台差异:iOS和Android在蓝牙API行为上存在一些细微差别。例如,某些Android设备在扫描时对设备名称的获取可能不稳定。测试时务必在两台真机上进行。

相关推荐
喵个咪4 小时前
GoWind ShortPlay 拆解:Flutter 沉浸式 Feed 的播放器工程——生命周期、手势状态机与游客降级
前端·flutter·架构
恋猫de小郭1 天前
Flutter 的文字为什么比 SwiftUI 更细?问题主要在 Skia 的 256 项查找表里
android·前端·flutter
好的佩奇2 天前
Dart 之类型系统
flutter·dart
恋猫de小郭2 天前
Dart 3.15 新特性:this 终于支持类型提升了
android·前端·flutter
FungLeo3 天前
成为全栈·Flutter App 篇·主题与可访问性:深浅色、大字号和触控体验
flutter·移动开发·深色模式·可访问性·成为全栈·大字号适配
用户95421573334854 天前
只是选个照片,怎么留下了这么多访问记录?Flutter 图片选择器排查与优化实录
flutter
FungLeo4 天前
成为全栈·Flutter App 篇·第四批复盘:复用了什么,移动端又新增了什么
flutter·移动开发·跨端开发·成为全栈·api契约·全栈复盘
jason.zeng@15022074 天前
使用vscode+flutter开发android程序(入门)
android·vscode·flutter
jason.zeng@15022074 天前
Flutter 项目标准分层目录(repository/dto/page,对齐后端思想)
flutter