先打开
wx.notifyBLECharacteristicValueChange(OBJECT)
这个功能 然后再写入
wx.writeBLECharacteristicValue(OBJECT)
就会写入失败吗?
我试过先写入 再打开notify就可以写入成功 可是这样的话 第一写入时的特征值变化是监听到了吗
wx.onBLECharacteristicValueChange(function(characteristic) {
console.log('characteristic value changed:', characteristic)
})
// 向蓝牙设备发送一个0x00的16进制数据
let buffer = new ArrayBuffer(1)
let dataView = new DataView(buffer)
dataView.setUint8(0, 0)
wx.writeBLECharacteristicValue({ // 这里的 deviceId 需要在上面的 getBluetoothDevices 或 onBluetoothDeviceFound 接口中获取
deviceId: deviceId, // 这里的 serviceId 需要在上面的 getBLEDeviceServices 接口中获取
serviceId: serviceId, // 这里的 characteristicId 需要在上面的 getBLEDeviceCharacteristics 接口中获取
characteristicId: characteristicId, // 这里的value是ArrayBuffer类型
value: buffer,
success: function (res) { console.log('writeBLECharacteristicValue success', res.errMsg)
}
})
还有一个问题就是 小程序的蓝牙接口是不会自动跟蓝牙设备认证的吗?还是要自己手动写一个跟设备握手的过程?
谢谢~
姗姗来迟,
1.
wx.readBLECharacteristicValue 是在特征值数据没有变化的时候也可以直接读取到里面的数据吗
---------
可以的。
2.
所以我想问,如果设备是连接之后一直在向外发送数据的话,是从打开notify之后才算正式开始,还是说从create连接上就开始了,如果是从create就开始的话 ,我还是必须打开notify才能读取到这些数据是嘛.
----------
不是很明白这里开始的意思,是指认证开始的意思嘛?如果是这个意思的话,那应该是取决于设备开始认证的业务逻辑吧。
方便提供一下微信号,我添加一下您微信,仔细找找这个问题嘛?
感谢。
之前说的不太 是打开notify之后 会收到 要求认证的指令串,然后我这时候就要write过去 一些对应的指令
————————
看到这里,不能收到指令串后才write对应的指令吗?收到指令是通过这个接口收到的吧?
wx.onBLECharacteristicValueChange(function(res) { console.log(`characteristic ${res.characteristicId} has changed, now is ${res.value}`) })
这里想知道与蓝牙设备认证是什么流程?我理解蓝牙接口与蓝牙设备认证是业务流程,小程序只提供读写的能力;
对notify之后,设备不一定是notify完了(可以查一下Android BluetoothGatt.writeDescriptor接口,本质上是通过这个接口配合系统接口BluetoothGatt.setCharacteristicNotification),所以需要增加一定的延时去规避这个问题,notify后延时200ms(可调整)再去写入。
监听也是认证流程的一部分吗?为什么监听后无法延时去写入?
小程序这边notify是一个异步接口,当没有notify写入成功时,再调write接口会失败,建议在notify后加上延时规避这个问题。
请问解决了吗
哈哈哈 姗姗来迟too 我的wx号是wuhancrazy 麻烦您加我一下 我还有些小程序蓝牙上的问题想请教一下嘻嘻
你好,谢谢你的回答:
“认证过程”是 设备方分析了打开notify之后 在wx.onBLECharacteristicValueChange 这个接口里拿到的数据 得出的:设备需要二到三个来回的数据获取和对应的数据写入 以达到认证的目的 此时才能正常地写入和读取数据,否则设备会一直向外发送要求认证的指令。
正常是 只有打开了notify之后 ,才能监听到设备向外发送的数据吧? 还有一点不太明白就是:有read属性的特征值的数据变化可以通过 wx.onBLECharacteristicValueChange 这个接口监听到是吧,这样的话 wx.readBLECharacteristicValue 是在特征值数据没有变化的时候也可以直接读取到里面的数据吗?我的这个read接口一直在报10008的错误,是不能单独使用还是必须也要在notify之后加上延时调用?
因为设备是一直在向外发送认证指令,所以我需要打开监听,而之前经过测试是 大概收到指令500ms之后 再向设备发送认证数据 就会没有效果了。所以我想问,如果设备是连接之后一直在向外发送数据的话,是从打开notify之后才算正式开始,还是说从create连接上就开始了,如果是从create就开始的话 ,我还是必须打开notify才能读取到这些数据是嘛.
谢谢~~
之前说的不太 是打开notify之后 会收到 要求认证的指令串,然后我这时候就要write过去 一些对应的指令 , 如果延时调用write的话 ,我就会错过发送的时机,有没有什么办法 能在开启notify之后 可以直接调用write呢?
意思是在notify打开后 再延时调用write吗?
我这个应该是需要一个小程序和蓝牙设备握手的过程 ,搜索到设备后, 设备就一直在广播信息,这时候我就必须写入一些指令,如果延时调用了write接口 ,就会错过发送指令的时机,如果是直接写入,之后再打开notify的话,又会监听不到特征值的改变;
或者就是说,不做操作的时候read的接口能直接读取到特征值的数据吗,也需要在notify之后延时调用吗?!