工具:微信开发者工具
背景:通过小程序蓝牙连接低功率设备,小程序获取wifi账号密码后,以json格式发送给设备,使之能够联网
问题:
1、尝试使用onBLECharacteristicValueChange监听变化,接口返回的value一直为空
characteristic xxxxxxxx-0000-1000-8000-00805F9B34FB has changed, now is {"value":{},"deviceId":"xxx","serviceId":"xxx","characteristicId":""xxx}
2、查看文档,发现调用onBLECharacteristicValueChange前需要调用notifyBLECharacteristicValueChange
3、尝试调用notifyBLECharacteristicValueChange,接口报错,打印如下
notifyBLECharacteristicValueChange fail {"errno": 1500104, "errCode": 10008, "errMsg": "notifyBLECharacteristicValueChange:fail:no descriptor"}
demo代码片段:
wx.getBLEDeviceCharacteristics({
// 这里的 deviceId 需要已经通过 wx.createBLEConnection 与对应设备建立链接
deviceId: this.data.deviceId,
serviceId: this.data.serviceId,
success: (resCharacteristics) => {
console.log("device getBLEDeviceCharacteristics:", resCharacteristics);
for (let i = 0; i < resCharacteristics.characteristics.length; i++) {
let item = resCharacteristics.characteristics[i];
console.log("characteristics-item", item);
if (item.properties.notify) {
wx.notifyBLECharacteristicValueChange({
state: true, // 启用 notify 功能
deviceId: this.data.deviceId,
serviceId: this.data.serviceId,
characteristicId: item.uuid,
success: (res) => {
console.log(
"notifyBLECharacteristicValueChange success",
res.errMsg
);
},
fail: (err) => {
console.log("notifyBLECharacteristicValueChange fail", err);
},
});
}
wx.onBLECharacteristicValueChange(function (res) {
console.log(
`characteristic ${
res.characteristicId
} has changed, now is ${JSON.stringify(res)}`
);
// console.log(ab2hex(res.value))
});
wx.readBLECharacteristicValue({
deviceId: this.data.deviceId,
serviceId: this.data.serviceId,
characteristicId: item.uuid,
success: (rr) => {
console.log("readBLECharacteristicValue", rr);
},
});
}
},
fail: (err) => {
console.log("device getBLEDeviceCharacteristics-err:", err);
},
});