Raspberry Pi 3B+ が保持できる BLE コネクション数の限界を調べてみた #RaspberryPi

Raspberry Pi 3B+ がBLEセントラルとして一度に保持できるコネクション数(同時にコネクト状態を維持できるBLEペリフェラルの台数)を調べた結果、限界は9台くらいで、安定して使えそうなのは7台くらいまででした。本記事では検証した時の詳細を述べます。
2019.08.28

この記事は公開されてから1年以上経過しています。情報が古い可能性がありますので、ご注意ください。

(English version is here.)

Raspberry Pi 3B+ がBLEセントラルとして一度に保持できるコネクション数(同時にコネクト状態を維持できるBLEペリフェラルの台数)を調べた結果、限界は9台くらいで、安定して使えそうなのは7台くらいまででした。以下で検証した時の詳細を述べます。

検証手順

  1. 所定の台数のBLEペリフェラルに電源を投入してコネクト可能な状態でアドバタイズ開始させる
  2. その後、BLEセントラル側でスキャン開始。スキャン開始から1分以内で全てのBLEペリフェラルとコネクション確立し、Notificationの受信が始まることを確認する

コネクション確立までにあまりにも時間がかかり過ぎるのは実用的では無いと考え、1分間の制限時間を設けました。

検証環境

BLEセントラル(Raspberry Pi 3B+)

  • ハードウェアリビジョン: Rev 1.3
  • OS バージョン: Raspbian Stretch
  • アプリケーションはNode.jsで実装(v8.11.1)
  • BLEライブラリはBlueZのNode.js向けラッパーであるnoble(1.9.1)を使用
    • BlueZのバージョン: 5.43-2+rpt2+deb9u2
  • プログラム起動時に指定したデバイス全てとコネクション確立するまでスキャンし続ける

BLEペリフェラル(ESP32 DevKitC)

  • 電源投入後、コネクト可能な状態でアドバタイズ開始、コネクション確立後、セントラルに対してNotificationで一定間隔でデータを送信し続ける
  • BLEライブラリ: ESP32_BLE_Arduino(0.4.16)

検証結果

同時接続を試みたBLEペリフェラルの台数 結果
6 5回中5回成功 (ログ)
7 5回中5回成功 (ログ)
8 5回中5回成功、ただし8台目のペリフェラルとの接続確立まで少し間が空いた (ログ)
9 5回中1回だけ成功、8台までは接続完了したあと9台目の接続が確立する前に時間切れ (ログ)
10 5回中一度も成功せず。"Connection Rejected due to Limited Resources (0xd)"エラーが発生し始める (ログ)

まとめ

Raspberry Pi 3B+ がBLEセントラルとして一度に保持できるコネクション数(同時にコネクト状態を維持できるBLEペリフェラルの台数)を調べた結果、限界は9台くらいで、安定して使えそうなのは7台くらいまででした。Developers.IOカフェでは、重量センサー1台につきESP32を1台接続してBLEでラズパイに重量データを送信していますが、余裕をみてラズパイ1台に接続するのは6台までとしています。