手机:iPhone 11Pro
小程序开发工具版本:1.05.2111300
接收设备:单片机
现象:
wx.writeBLECharacteristicValue 发送一个比较大的数据,均返回OK
但接收设备只收到只是部分数据,某些情况却是完整的:
接收尺寸 发送尺寸
34799 362474
9900 75431
34555 34555【完整】
我感觉稍微小的文件发送没问题,超过一个阈值,小程序会只发送一个很小的百分比。
我猜这个值可能是65535。难道是蓝牙底层限制的?那应该发送前就可以判断吧?不用给我返回成功啊!
而且不符合wx.writeBLECharacteristicValue文档的描述,文档说,iOS发送太长数据,可能会无响应,但是我是有响应,告诉我成功了,实际却没发完整。浏览了很多历史问题,没有我这种情况,故提此新帖。
下面是日志,白底是小程序控制台(buff length比byteLength多5个字节是加了协议头),黑底是设备的BLE日志(含每个包的尺寸和偏移及总长度)
ble write done 后面的0是errCode,再后是errMsg
你好,麻烦提供出现问题的具体机型、微信版本号、系统版本号,以及能复现问题的代码片段(https://developers.weixin.qq.com/miniprogram/dev/devtools/minicode.html)
机型在问题中已提供。代码很简单,打开图片文件,BLE发送
wx.chooseMedia({count: 1,mediaType: ['image'],sourceType: ['album'],sizeType: ['original'],
success:(res)=>{
console.log(res.tempFiles[0])
wx.getFileSystemManager().readFile({
filePath:res.tempFiles[0],
success:_=>{
console.log("file byteLength",_.data.byteLength)
var buff = new Uint8Array([_.data])
console.log("buff length", buff.length)
wx.writeBLECharacteristicValue({
characteristicId: "your ble char id",
serviceId: "your ble service id",
deviceId: "your ble device id",
value: buff.buffer,
success: (res) => {
console.log("ble write done", res.errCode, res.errMsg)
},
fail: (res) => {
console.log("ble write fail", res.errCode, res.errMsg)
}
})
}
}
关键是误导,根本没发送完,就提示成功,太坑!