readBLECharacteristicValue: function (deviceId, serviceId, characteristicId, callback) {
wx.onBLECharacteristicValueChange(function (characteristic) {
console.log(‘characteristic value comed:’);
let buffer = characteristic.value;
let dataView = new DataView(buffer);
console.log(“接收字节长度:” + dataView.byteLength);
console.log(dataView.getUint8(0));
console.log(dataView.getUint8(1));
callback(dataView);
});
wx.readBLECharacteristicValue({
// 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
deviceId: deviceId,
// 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: serviceId,
// 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
characteristicId: characteristicId,
success: function (res) {
console.log(‘readBLECharacteristicValue:’, res)
}
})
}
设备一直在广播数据 ,这里的readBLECharacteristicValue 要轮询么 譬如1s钟调用一次 ,还是不需要轮询,调用一次后,只要有数据就会进wx.onBLECharacteristicValueChange
wx.onBLECharacteristicValueChange 这个函数的回调函数参数characteristic.value 该如何显示
console.log()打印信息.
app.json里debug: ture;
在手机微信里扫码预览小程序.
手机右上角有三个小点点,点击,选择打开调试.重新预览小程序.就可以在vConsole按钮上查看控制台信息
//获取蓝牙设备所有 characteristic(特征值)
getBLEDeviceCharacteristics: function (deviceId, serviceId, callback) {
wx.getBLEDeviceCharacteristics({
deviceId: deviceId,
serviceId: serviceId,
success: function (res) {
// success
console.log(res.characteristics);
wx.notifyBLECharacteristicValueChanged({
state: true, // 启用 notify 功能
deviceId: deviceId,
serviceId: serviceId,
characteristicId: res.characteristics[1].uuid,
success: function (res) {
console.log(‘notifyBLECharacteristicValueChanged success’, res)
},
fail: function (res) {
console.log(‘notifyBLECharacteristicValueChanged error’, res)
}
})
callback(res.characteristics);
},
fail: function (res) {
// fail
},
complete: function (res) {
// complete
}
})
},
characteristics[1] 支持notify 但不支持read
characteristics[2] 支持read 但不支持notify
所以
notifyBLECharacteristicValueChanged 传的参数 characteristicId 是 characteristics[1]
readBLECharacteristicValue 传的参数 characteristicId 是 characteristics[2]
这两个需要传的 characteristicId 一致么
为什么需要同时满足呢?
notifyBLECharacteristicValueChange 是用于持续监听设备某个特征值发送来的数据的。
readBLECharacteristicValue 是用于一次性读取某个特征值的数据的
按你的应用场景需求来对某个特征值调用相关接口就行了。
明白了 这是两种读数据接口
我的设备是支持notify的
wx.onBLECharacteristicValueChange(function (characteristic) {
let buffer = characteristic.value;
let dataView = new DataView(buffer);
var temp = “”;
for (var i = 0; i < dataView.byteLength; i++) {
temp += “第” + (i + 1) + “个字节:” + dataView.getUint8(i) + “;\r\n”;
}
console.log(temp);
/*
const base64 = wx.arrayBufferToBase64(characteristic.value)
console.log(base64);
*/
});
wx.notifyBLECharacteristicValueChanged({
state: true, // 启用 notify 功能
deviceId: deviceId,
serviceId: serviceId,
characteristicId: res.characteristics[1].uuid,
success: function (res) {
console.log(‘notifyBLECharacteristicValueChanged success’, res)
},
fail: function (res) {
console.log(‘notifyBLECharacteristicValueChanged error’, res)
}
});
notifyBLECharacteristicValueChanged 这个也能进入success 回调
但是 onBLECharacteristicValueChange 这个还是没有值