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设备在扫描时对设备名称的获取可能不稳定。测试时务必在两台真机上进行。

相关推荐
见山是山-见水是水34 分钟前
鸿蒙flutter第三方库适配 - 页面转场应用
flutter·华为·harmonyos
恋猫de小郭1 小时前
Flutter PC 多窗口最新进展,底层原生窗口句柄支持已合并
android·前端·flutter
见山是山-见水是水2 小时前
鸿蒙flutter第三方库适配 - 主题切换应用
flutter·华为·harmonyos
牛马1112 小时前
Flutter BoxDecoration boxShadow 完整用法
flutter
见山是山-见水是水2 小时前
鸿蒙flutter第三方库适配 - 多语言应用
flutter·华为·harmonyos
麒麟ZHAO2 小时前
Flutter 框架跨平台鸿蒙开发 - 匿名真心话
flutter·华为·harmonyos
langyuejing3 小时前
Flutter 原生能力集成指南
flutter
麒麟ZHAO3 小时前
鸿蒙flutter第三方库适配 - 新闻阅读应用
flutter·华为·harmonyos
麒麟ZHAO3 小时前
鸿蒙flutter第三方库适配 - 服务端驱动UI应用
flutter·ui·华为·harmonyos
空中海3 小时前
5.4 WebSocket 与实时通信
网络·websocket·网络协议·flutter