主要分三大块功能:
- 开始扫描附近的蓝牙设备列表
- 建立连接
- 断开连接
开始扫描:1. 初始化蓝牙模块
接口:wx.openBluetoothAdapter
开始扫描:2. 开始搜寻附近的蓝牙外围设备
接口:wx.startBluetoothDevicesDiscovery
注意事项:
- 此操作比较耗费系统资源,请在搜索并连接到设备后调用 wx.stopBluetoothDevicesDiscovery 方法停止搜索
- 参数 services:如果设置此参数,则只搜索广播包有对应 uuid 的主服务的蓝牙设备。建议主要通过该参数过滤掉周边不需要处理的其他蓝牙设备。主服务 uuid 都是四位的。
- 在调用此接口之前,先调用 wx.getConnectedBluetoothDevices 查看已连接的设备。因为搜索接口不会返回已连接的设备; 调用顺序,先查已连接设备,后查新设备。目的,既展示已连接的设备,也展示未连接的设备。
服务 UUID 的格式:
参考:https://zhuanlan.zhihu.com/p/133981948
蓝牙技术联盟SIG定义UUID共用了一个基本的UUID:0x0000xxxx-0000-1000-8000-00805F9B34FB。总共128位,为了进一步简化基本UUID,每一个蓝牙技术联盟定义的属性有一个唯一的16位UUID,以代替上面的基本UUID的‘x’部分
开始扫描:3. 监听寻找到新设备的事件
接口:wx.onBluetoothDeviceFound
由其他设备的广播数据中获取。
能获取到:
- deviceId
- Service UUIDs
- 设备名称
- ServiceData
体验优化:缓存最后一次连接成功的 deviceId, 下次发现新设备的 deviceId 与此相同时,自动建立连接。
建立连接:1. 连接低功耗蓝牙设备
接口:wx.createBLEConnection
注意:此时为了节省资源,需主动调用停止搜寻附近的蓝牙外围设备。wx.stopBluetoothDevicesDiscovery
建立连接:2. 获取蓝牙设备所有服务(service)
接口:wx.getBLEDeviceServices
建立连接:3. 判断是否是主服务?
如果是主服务,获取蓝牙设备某个服务中所有特征值(characteristic)。接口:wx.getBLEDeviceCharacteristics。
遍历特征值:
- 如果可读:读取低功耗蓝牙设备的特征值的二进制数据值。wx.readBLECharacteristicValue
- 如果可写:向低功耗蓝牙设备特征值中写入二进制数据。wx.writeBLECharacteristicValue
- 如果可订阅:启用低功耗蓝牙设备特征值变化时的 notify 功能,订阅特征值
- wx.notifyBLECharacteristicValueChange
- wx.onBLECharacteristicValueChange
- 操作之前先监听,保证第一时间获取数据
断开连接
何时断开:
- 切换蓝牙设备时
- 关闭系统蓝牙时
不断开连接,是否会影响其他人接入?
被动断开连接的情况
- kill 小程序后,连接即断开?实际测试结果,确实是。但是断开有大概 2~3 秒的延迟。在手机上杀掉小程序,可以看到 2~3 后,蓝牙设备的蓝灯即熄灭,说明连接断开。
- 离开座位,去上厕所回来,也会断开连接。应该是超出了蓝牙通信的距离。
微信关注我哦 👍
我是来自山东烟台的一名开发者,有感兴趣的话题,或者软件开发需求,欢迎加微信 zhongwei 聊聊, 查看更多联系方式