本文章 是记录的第五步中的内容点
wx.getBLEDeviceCharacteristics 用来获取
获取蓝牙设备某个服务中所有特征值(characteristic)
关键核心代码如下
我这一步是已经扫描到了可用的蓝牙设备,获取到其中的一个设备的 deviceId,callBack是我设置的一个回调函数
//获取蓝牙设备所有服务(service)
function getBLEDeviceServices(deviceId, callBack) {console.log("连接低功耗蓝牙设备成功 开始获取蓝牙服务"+deviceId)wx.getBLEDeviceServices({deviceId,success: (res) => {console.log("连接低功耗蓝牙设备成功 获取蓝牙服务成功"+deviceId)console.log("getBLEDeviceServices success")for (let i = 0; i < res.services.length; i++) {if (res.services[i].isPrimary) {getBLEDeviceCharacteristics(deviceId, res.services[i].uuid, callBack)}}},fail: (res) => {console.log("连接低功耗蓝牙设备成功 获取蓝牙服务失败"+deviceId)console.log("getBLEDeviceServices fail")console.log("获取蓝牙服务失败:" + JSON.stringify(res))}})
}
微信官方文档这里有有问题的,我的实践是在部分安卓手机有,是有多个服务在可用状态,如果这里return 回去了,会导致下一步中判断不可输出数据问题,实际上是可以输出的
需要根据蓝牙设备的 deviceId 与 serviceId 服务ID来获取特征值,如是否支持读取蓝牙设备的数据或者是否支持向蓝牙设备中写数据,都是通过特征值来判断的
在部分安卓手机中,可能会有多个 可用服务,也就是多个 serviceId,每个serviceId中提供的特征值不一样,需要组合起来使用
function getBLEDeviceCharacteristics(deviceId, serviceId, callBack) {wx.getBLEDeviceCharacteristics({deviceId,serviceId,success: (res) => {console.log('getBLEDeviceCharacteristics success', res.characteristics)for (let i = 0; i < res.characteristics.length; i++) {let item = res.characteristics[i]console.log("characteristics "+gloableBlueName+" read "+item.properties.read)console.log("characteristics "+gloableBlueName+" write "+item.properties.write)console.log("characteristics "+gloableBlueName+" notify "+item.properties.notify)console.log("characteristics "+gloableBlueName+" indicate "+item.properties.indicate)if (item.properties.read) {//可读数据wx.readBLECharacteristicValue({deviceId,serviceId,characteristicId: item.uuid,})}if (item.properties.write) {// 可写数据}}}},fail(res) {console.error('获取特征值失败:', res)},complete() {if (callBack) {console.log('回调 canWrite '+canWrite.toString());//我这里主要是用到了可写数据操作callBack(canWrite);}}})
版权声明:本站所有资料均为网友推荐收集整理而来,仅供学习和研究交流使用。
工作时间:8:00-18:00
客服电话
电子邮件
admin@qq.com
扫码二维码
获取最新动态