uni-app中uni.setBLEMTU设置传输单元为512返回成功后仍只能接收20个字节
uni-app中uni.setBLEMTU设置传输单元为512返回成功后仍只能接收20个字节
测试过的手机:
- 华为 Mate 30
- HUAWEI Pura 70 Pro+
- iQOO11
- 小米15
- iQOO12
操作步骤:
- 使用华为手机连接蓝牙后,设置uni.setBLEMTU,并使用uni.writeBLECharacteristicValue向低功耗蓝牙设备特征值中写入30个字节的数据
预期结果:
- uni.writeBLECharacteristicValue发送的字节设备端能完整收到,并且能接受设备返回的数据
实际结果:
- 只能发送22个字节左右的数据,设置的uni.setBLEMTU不生效,也无法完整接收到设备回复的数据,最大也只有22个字节左右,其他的安卓手机正常
bug描述:
- 【报Bug】华为手机 uni.setBLEMTU 设置传输单元为512,返回成功后还是只能接收到20个字节。其余安卓手机正常
1 回复
在uni-app中使用uni.setBLEMTU
设置蓝牙低功耗(BLE)的最大传输单元(MTU)时,理论上应该能够调整BLE设备的MTU大小以支持更大的数据传输。然而,如果遇到设置MTU为512字节后仍然只能接收20个字节的情况,这可能是由于BLE设备的固件限制、设备兼容性问题或代码实现问题。
以下是一个使用uni-app进行BLE通信,包括设置MTU的示例代码。请注意,如果设备本身不支持大于20字节的MTU,即使代码正确,也无法接收更大的数据包。
// 初始化蓝牙适配器
uni.openBLEAdapter({
success: function (res) {
console.log('蓝牙适配器初始化成功', res)
// 开始扫描蓝牙设备
uni.startBLEDevicesDiscovery({
allowDuplicatesKey: false,
success: function (res) {
console.log('开始扫描蓝牙设备', res)
// 停止扫描
setTimeout(() => {
uni.stopBLEDevicesDiscovery({
success: function (res) {
console.log('停止扫描蓝牙设备', res)
// 连接蓝牙设备
uni.createBLEConnection({
deviceId: '你的设备ID', // 替换为你的设备ID
success: function (res) {
console.log('蓝牙设备连接成功', res)
// 设置MTU
uni.setBLEMTU({
deviceId: '你的设备ID', // 替换为你的设备ID
mtu: 512,
success: function (res) {
console.log('MTU设置成功', res)
// 发送数据测试
uni.writeBLECharacteristicValue({
deviceId: '你的设备ID', // 替换为你的设备ID
serviceId: '你的服务ID', // 替换为你的服务ID
characteristicId: '你的特征值ID', // 替换为你的特征值ID
value: new ArrayBuffer(512), // 示例数据,实际应根据需要填充
success: function (res) {
console.log('数据发送成功', res)
},
fail: function (err) {
console.error('数据发送失败', err)
}
})
},
fail: function (err) {
console.error('MTU设置失败', err)
}
})
},
fail: function (err) {
console.error('蓝牙设备连接失败', err)
}
})
}
}, 3000) // 扫描3秒
})
}
})
},
fail: function (err) {
console.error('蓝牙适配器初始化失败', err)
}
})
在上述代码中,我们首先初始化蓝牙适配器,然后开始扫描蓝牙设备并连接到目标设备。在连接成功后,我们尝试设置MTU为512字节,并发送一个512字节的数据包进行测试。
如果MTU设置成功但无法接收大于20字节的数据,可能需要检查以下几个方面:
- 确认BLE设备的固件和硬件是否支持MTU大于20字节。
- 检查BLE设备的特性(Characteristic)描述是否支持更大的MTU。
- 确保发送和接收的数据格式正确,没有因数据截断或格式错误导致的问题。
如果问题依旧存在,可能需要联系BLE设备的制造商获取更多支持。