BLE を使用して ESP32 とやり取りする Android アプリを構築しようとしています。Android 側には Vincent Masselis の RxBluetoothKotlin ライブラリを使用しています。ESP32 側では、Arduino IDE に含まれている既定の Kolban ライブラリを使用しています。私の電話は OnePlus 5T で、ESP32 は MH ET Live ESP32DevKIT です。私の Android アプリはここにあり、私の ESP32 プログラムはここにあります。
純粋な機能に関しては、システム全体がほぼ完璧に機能します。つまり、すべてのボタンが本来の機能を果たし、期待どおりの動作が得られます。ただし、通信自体は非常に遅いです。約 200 バイト/秒。Android アプリのテスト ボタンは、ESP32 から一連のテキスト データを要求し、これをダイアログに表示します。また、リクエストから受信までの時間をミリ秒単位で表す数値も表示されます。これを使用すると、440 バイトのデータに対して約 2 秒かかります。より少ないデータを送信すると、時間はデータ サイズにほぼ比例して減少します。40 バイトのデータには約 200 ミリ秒かかり、20 バイト以下では通常 100 ミリ秒未満かかります。
これは私にはかなり遅いようです。私が理解していることから、少なくとも毎秒数キロバイトを取得できるはずです。nRF Connect を使用して速度を確認しようとしましたが、データ転送のタイムスパンは同じ 2 秒です。これは、まったく別のアプリでも問題が発生しているため、問題が私のアプリにないことを示唆しています。代わりにコールバック内のメインループにコードを入れました (おそらく最初にそうすべきだったでしょう) が、これは状況をまったく変えませんでした。干渉を排除することを期待して、マイクロコントローラーと電話をいくつかの異なる場所に持って行こうとしました。Android 側で RxBluetoothGatt.requestMtu(500) を設定するだけでなく、BLEDevice::setPower と BLEDevice::setMTU をいじろうとしました。これまでのところ、すべてがほとんどまたはまったく影響を与えていないようです。何もしなかった唯一のことは、「pServer->updatePeerMTU(0,500);」という行を追加していました。接続フェーズ中の私のループで。これにより、アプリでテスト ボタンを押すたびにデータの最初の 23 バイトが繰り返され、データ転送に約 3 秒かかりました。運が良ければ、440 バイトで 1.8 秒を少し下回る可能性がありますが、1 桁の差が予想される場合、これは非常に小さな変更であり、私が考えたものではなく純粋な偶然によるものでさえある可能性があります。やりました。
転送速度を上げる方法を知っている人はいますか?