BLE 蓝牙连接智能硬件流程
微信小程序蓝牙模块只支持 BLE,通常说的蓝牙 4.0(及以上版本)。
特点在于低功耗,高速率,距离短,数据量小,以字节流传输。
可以通过手机下载对应 APP 应用来模拟被连接的硬件设备
- iOS lightblue
- Android BLE 调试宝
官方文档
通讯流程
- 初始化蓝牙适配器。
- 搜索蓝牙设备获取设备 UUID(deviceId)。(占用资源较多,不搜索要及时停止搜索)(另部分安卓机可能需要获取位置权限才能搜索到蓝牙设备)
- 配对绑定设备,建立连接。
- 通过设备 UUID(deviceId),获取该设备的设备所有服务(services)。
- 通过设备 UUID(deviceId)、服务 UUID(serviceId),获取蓝牙设备指定服务的所有特征值(characteristic)。
- 通过特征值(characteristic)的属性,获取该特征值的读、写、广播权限。
- 通过设备 UUID(deviceId)、服务 UUID(serviceId)、特征值 UUID(characteristicId),来对该特征值进行读写操作。(传输类型只支持 ArrayBuffer)
- 通过监听特征值的回调,获取特征值的变化情况。进而实现小程序蓝牙与智能硬件设备的通讯。
- 由于 BLE 低功耗蓝牙的连接非常不稳定。比如:比如刚连接上就断开、连接成功之后传输数据随机断开等情况。所以要做好断线重连等底层通讯异常的对应处理。
参数示意图
蓝牙常用 API 及返回值
- 初始化蓝牙适配器
wx.openBluetoothAdapter - 开始搜寻附近的蓝牙外围设备
wx.startBluetoothDevicesDiscovery - 获取搜索发现到的蓝牙设备的具体信息
wx.onBluetoothDeviceFound
返回值:
信号强度:RSSI: number,
该设备启动服务的 UUID:advertisServiceUUIDs: array,
设备 UUID:deviceId: string,
设备名称:localName: string,
设备名称:name: string,
serviceData: array object - 通过设备 UUID(deviceId),来连接对应的设备。
wx.createBLEConnection
若小程序在之前已有搜索过某个蓝牙设备,并成功建立连接,可直接传入之前搜索获取的 deviceId 直接尝试连接该设备,无需进行搜索操作。 - 通过设备 UUID(deviceId),获取指定蓝牙设备所有服务(service)
wx.getBLEDeviceServices
返回值:
设备 UUID:deviceId: string,
开启的服务列表:service: array, - 通过设备 UUID(deviceId)和服务 UUID(serviceId),获取蓝牙设备指定服务的所有特征值(characteristic)。
wx.getBLEDeviceCharacteristics
返回值:
设备 UUID:deviceId: string,
服务 UUID:serviceId: string,
特征值列表:characteristic: array object
特征值 UUID:characteristic[0].uuid
该特征值是否支持 read 操作:characteristic[0].properties.read
该特征值是否支持 write 操作:characteristic[0].properties.write
该特征值是否支持 notify 操作:characteristic[0].properties.notify
该特征值是否支持 indicate 操作:characteristic[0].properties.indicate - 开启 notify。必须先启用 notifyBLECharacteristicValueChange 接口才能接收到设备推送的 notification
wx.notifyBLECharacteristicValueChange - 监听低功耗蓝牙设备的特征值变化
wx.onBLECharacteristicValueChange
返回值:
设备 UUID:deviceId: string,
服务 UUID:serviceId: string,
特征值 UUID:characteristicId: string,
特征值: value: ArrayBuffer, - 发送数据到设备中
wx.writeBLECharacteristicValue - 关闭蓝牙模块。
wx.closeBluetoothAdapter - 停止搜寻附近的蓝牙外围设备。
wx.stopBluetoothDevicesDiscovery