wx.writeBLECharacteristicValue连接蓝牙打印写入数据成功 但是设备没反应,
点击设备可以接收到wx.onBLECharacteristicValueChange设备返回值?
代码 https://developers.weixin.qq.com/s/jlMOOhm87NBs
writeBLECharacteristicValue() {
// 向蓝牙设备发送一个0x00的16进制数据
var senddata = strToHexCharCode('ATK001#');
let buffer = new ArrayBuffer(senddata.length)
let dataView = new DataView(buffer)
//dataView.setUint8(0, Math.random() * 255 | 0)
for (var i = 0; i < senddata.length; i++) {
dataView.setUint8(i, senddata.charAt(i).charCodeAt())
}
/// let aa=this.strToArrayBuffer()
console.log('获取二进制数据',buffer)
//向低功耗蓝牙设备特征值中写入二进制数据。
wx.writeBLECharacteristicValue({
deviceId: this._deviceId,
serviceId: this._serviceId,
characteristicId: this._characteristicId,
value: buffer,
success (res) {
console.log('成功写数据writeBLECharacteristicValue success', res)
//如果 uni.writeBLECharacteristicValue 走 success ,证明你已经把数据向外成功发送了,但不代表设备一定就收到了。通常设备收到你发送过去的信息,会返回一条消息给你,而这个回调消息会在 uni.onBLECharacteristicValueChange 触发
},
fail(res) {
console.error('失败写数据getBLEDeviceCharacteristics', res)
}
})
},
解决了 字符串 转 ArrayBufer 问题影响
改成如下就可以了
//将字符串转换成ArrayBufer function string2buffer(str) { if (!str) return; var val = ""; for (var i = 0; i < str.length; i++) { val += str.charCodeAt(i).toString(16); } str = val; val = ""; let length = str.length; let index = 0; let array = [] while (index < length) { array.push(str.substring(index, index + 2)); index = index + 2; } val = array.join(","); // 将16进制转化为ArrayBuffer return new Uint8Array(val.match(/[\da-f]{2}/gi).map(function (h) { return parseInt(h, 16) })).buffer }
可以查一下硬件日志,看一下传输给硬件的内容是什么,还有一种可能是因为微信小程序字节限制的问题(默认最大字节是20)传输内容超过20字节,被拦截,小程序报传输成功,实际硬件没有收到
对于指令发出但是设备没响应的,换一个特征发指令试试,把能查到的都挨个试一下
为什么你能发送数据啊?你获取第一个服务就return 第一个服务又全是read
兄弟,我也是一样,success走了,但是设备没有给到任何的反应
搞个代码片段吧
var senddata = strToHexCharCode('ATK001#'); 发送一个 0x00 的16进制数据, 为什么发送的是 ATK001 啊