1

我正在尝试构建一个使用 BLE 与 ESP32 交互的 Android 应用程序。我在 Android 端使用 Vincent Masselis 的 RxBluetoothKotlin 库。对于 ESP32 端,我使用的是 Arduino IDE 中包含的默认 Kolban 库。我的手机是 OnePlus 5T,我的 ESP32 是 MH ET Live ESP32DevKIT。我的 Android 应用程序可以在这里找到,我的 ESP32 程序可以在这里找到

就纯粹的功能而言,整个系统对我来说非常完美。也就是说,每个按钮都做了它应该做的事情,而我得到了我期望得到的确切行为。但是,通信本身非常缓慢。大约 200 字节/秒。我在 Android 应用程序中的测试按钮从 ESP32 请求一堆文本数据,并在对话框中显示。它还列出了一个数字,表示请求和接收之间的时间(以毫秒为单位)。使用它,我得到大约 2 秒的 440 字节数据。当我发送较少的数据时,时间与数据大小大致呈线性关系。40 字节的数据大约需要 200 毫秒,而 20 字节或以下的数据通常需要不到 100 毫秒。

这对我来说似乎相当慢。据我了解,我应该能够至少每秒获得几千字节。我尝试使用 nRF Connect 检查速度,但我的数据传输时间跨度相同,为 2 秒。这表明问题不在我的应用程序中,因为我也有一个完全不同的应用程序。我还将代码放在回调内部的主循环中(我可能一开始就应该这样做),但这并没有改变任何事情。我曾尝试将微控制器和手机带到几个不同的位置,希望能消除干扰。我试图弄乱 BLEDevice::setPower 和 BLEDevice::setMTU,以及在 Android 端设置 RxBluetoothGatt.requestMtu(500)。到目前为止,一切似乎几乎没有影响。唯一做任何事的,正在添加行“pServer->updatePeerMTU(0,500);” 在连接阶段在我的循环中。这导致每当我按下应用程序中的测试按钮时,前 23 个字节的数据都会重复,并使数据传输大约需要 3 秒。如果幸运的话,对于 440 个字节,我可能会得到 1.8 秒以下的时间,但是当我期望一个数量级的差异时,这是一个非常小的变化,甚至可能取决于纯粹的机会,而不是我的任何事情做过。

有谁知道如何提高我的传输速度?

4

1 回答 1

1

数据传输速度主要受蓝牙 LE 连接间隔(7.5 ms 到 4 秒之间)的影响,并在主设备(中央单元)和外围设备之间协商。主设备与参数集建立连接,外围设备可以提议更改该参数集。然而,最终,中央单元决定使用哪个参数集。

但是蓝牙连接间隔不能直接由安卓应用程序来改变,安卓应用程序通常充当中心角色。相反,它可以请求一个已知会影响连接间隔的连接优先级。

于 2021-11-10T13:26:08.613 回答