iOS蓝牙低功耗(BLE)不稳定连接

3
我目前正在开发一个与设备结合的React Native应用程序。设备和应用程序通过BLE通信。到目前为止,一切都按预期进行,但是iOS应用程序和设备的连接稳定性存在问题。问题在于设备会连接并且可以更新某些特征,但会经常断开连接,并出现CBErrorDomain 7或写入响应超时的错误。应用程序或设备端的实现似乎不是问题所在,因为Android工作稳定,而且设备在连接LightBlue应用程序时也会断开连接。
我已经根据此处建议更新了BLE连接参数:https://developer.apple.com/library/archive/qa/qa1931/_index.html。这提高了稳定性,但没有完全解决问题。我尝试调整这些值,但目前还没有成功。
我们目前使用的参数集如下:
conn_min_interval: 15
conn_max_interval: 15
conn_latency: 0
supervision_timeout: 2000
adv_min_interval: 1285
adv_max_interval: 1285

现在我的问题是,是否有人有想法可以检查其他事项或调整哪个参数?


在远程设备上,在断开连接事件中你看到了什么原因代码? - Emil
因此,我的Python实现没有意识到断开连接的发生,我不确定在哪里找到正确的蓝牙驱动程序日志以指示这一点? - Bruno
你在哪个平台上运行?Python只是一种编程语言。 - Emil
这是Ubuntu 20.04的一个版本。 - Bruno
你可以在终端中运行“sudo btmon”命令来查看控制器发送的所有数据包,包括包含断开连接完成事件及其原因代码的数据包。 - Emil
显示剩余4条评论
2个回答

0

你是否正在检查maximumWriteValueLength并确保你的写入小于此值?你的问题的一个可能原因是设备不堪重负,无法跟上发送ACKs的速度。你的设备支持哪个版本的蓝牙,并且是否实现了DLE(数据长度扩展)?

你的conn_min_intervalconn_max_interval有些可疑。要求15毫秒而没有任何余地很可能会协商到30毫秒。 (请参见41.6连接参数)你的设备是否能够接受重新协商到15毫秒以外的其他时间?如果设备确实可以在15毫秒内保持连接而没有连接延迟,那么它是否真的能够跟得上呢?我敢打赌它做不到。尝试将连接间隔设置为30毫秒(甚至更慢一些),你甚至可以尝试将连接延迟设置为1,使连接更加容易处理(虽然我更关注减缓CI而不是增加延迟;在这种情况下增加延迟会更像是一种hack)。

我所有的疑虑都在于你的外设没有跟上连接的步伐。如果你有任何同步活动来响应数据,你需要确保它不会阻塞你的BLE堆栈发送所需的响应。


该板卡是一款Khadas VIM 3 Pro,搭载了AP6398S芯片(https://www.texim-europe.com/product/AP6398S),支持BT 5.0。根据我的理解和对DLE的研究,它应该支持,是吗?手机是iPhone 10 Pro Max,也支持BT 5.0。我会检查 maximumWriteValueLength 是否支持,并尝试使用其他参数。关于您最后提到的那一点,我不太确定您的意思。难道BLE默认不会确认写入吗? - Bruno
我一般认为你是对的,因为如果我同时写入太多特征,它通常会失败。我只是不确定要更改和检查什么。 - Bruno
谢谢Rob。完全明白。我也会检查一下的。 - Bruno
我的问题是,如果实现过程很慢,为什么它在Android上运行如此稳定。不过我还是会检查一下。 - Bruno
这取决于Android设备。例如,如果它不支持BLE 5,则通信速度可能会慢得多。此外,iOS比Android更严格地遵守规格。因此,我不会对您看到的差异感到过度惊讶。 - Rob Napier
显示剩余4条评论

0

终于,我找到了解决我的问题的答案。问题在于BLE服务器的配对过程存在故障,因此iOS无法建立稳定的连接。现在这个问题已经解决了,连接非常稳定。

我仍然不确定为什么iOS在没有配对的情况下仍能进行通信,但我希望这能帮助未来的一些人。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接