如何在iOS上为每个连接间隔发送超过1个数据包到蓝牙LE(BLE)设备?
我从iOS [iPhone 6与iOS 10.3]连接到{{3}}。我读过像Microchip BM70 BLE这样的文章以及像https://punchthrough.com/blog/posts/maximizing-ble-throughput-on-ios-and-android这样的帖子,并且已经实现了以下代码:
如果我只是写完全爆炸,iOS会在大约20个数据包后停止发送数据。如果我在每4个数据包后睡150ms,它就会正确发送。如果我在每个数据包后35ms睡觉,那么它也会正确发送。如果我发送18个数据包然后发送第19个数据包作为Write WithResponse +回叫处理程序,那么它也会正确发送数据包。
但是,当我查看逻辑分析仪时,数据正在正确发送,但每个连接间隔仅发送一个数据包[30ms]:
https://lists.apple.com/archives/bluetooth-dev/2015/Apr/msg00026.html
我的CBPeripheral或CBCentralManager中是否需要进行其他设置才能每个连接间隔发送1个以上的数据包?
谢谢!
答案 0 :(得分:0)
如果您在断开中央和外围设备时遇到问题,我建议使用带有响应的写入,并在写入数据后发送从外设收到的成功回调的第二组数据。如果您专注于提高吞吐量,这比在4个数据包之后等待150毫秒更好。
此外,iOS会根据外设调整MTU大小,以便在一个连接中发送最大可能的数据包。 [这是我使用iPhone(中央应用程序)和Linux / Android(外围应用程序)进行的实验]。在连接Xiomi Mi A1时,MTU根据iPhone应用程序对外设的要求调整为185。但是,您无法以编程方式为MTU大小提供自定义值,因为用于编辑MTU的API是私有的,并且对公共API隐藏。
以iPhone 8为中心,Android为BLE 4.2作为外设,我们可以达到的吞吐量为每秒2.5 KiloBytes。