Bluetooth Low Energyのスピード(★★)

Bluetooth Low Energyでは、低消費電力にするために、スピードを犠牲にしています。
たとえば、無線LANでは100Mbpsなどを達成するために、時間あたりのデータを多く送る作りになっています。送信時、受信時とも200mAくらいの電流が必要です。
しかし、Bluetooth Low Energyでは、ゆっくり送っているため、送信時、受信時ともに10mA程度ですんでいます。

Bluetooth Low Energyでは、上位プロトコルのいろいろな制限があります。そのため、物理レイヤでのスピードだけを見て、製品を設計してしまうと、実際にスピードがでないということになります。

スピードを計算する前に、まず、下記に制限を示します。

  • 制限1
    上位プロトコルの制限の1つは、データは、Connection Eventごとにやりとりしなければならないというものです。
    仕様では、最短で7.5msごとにConnection Eventを設定できます。
    ただし、iOS9では、最低のConnection Eventの間隔を30msに制限しています。Androidもバージョンによって、この値がいろいろ変わります。
  • 制限2
    上位プロトコルの制限のもう1つは、下記のように、L2CAP, ATTのヘッダー等があるため、ユーザーが使えるペイロードが7Byte短くなるということです。

    • L2CAP Length: 2 Byte
    • L2CAP CID: 2 Byte
    • ATT OpCode: 1 Byte
    • ATT Handle: 2 Byte
  • 制限3
    さらに、Android, iOS, Bluetooth Low Energyのデバイスでは、1回のConnection Eventで投げれるパケット数を制限しています。使っているBluetoothチップによりますが、iOS9, Android6.0など、ほとんどのものは6packetまでです。

Ver4.1までのスピード

最短で7.5msごとにConnection Eventが来ます。また、1回のConnection Eventあたり6パケットを送信できます。1パケット内のユーザーデータは20Byteです。
そのため、1秒間に送れるパケット数は、下記のようになります。

(1/7.5ms) * 6 * 20Byte = 約15960 Byte/sec = 約128kbps

上記でも説明しましたように、iOS9では、最低のConnection Eventを30msに制限しているため、下記になります。
(1/30ms) * 6 * 20Byte = 4000 Byte/sec = 32kbps

Ver4.2からのスピード

Ver4.2からPDUのサイズが27Byteから251Byteになりました。
デバイスによって、Connection Eventごとにどれだけパケットを送れるかわからないため、最大は不明ですが、最低1パケットは送れるので、下記の計算となります。

(1/7.5ms) * 244Byte = 約32533 Byte/sec = 約260kbps

弊社の実測では、nordicのデバイスどうしで、Connection Eventを7.5msにした時に460kbps、Connection Eventを50msにした時に630kbpsを確認しています(nordicどうしの場合は、Connection Eventが速度の邪魔になっていることがわかります)。実際のユースケースとしては、スマートフォン相手ですので、Connection Eventごとのパケット数が制限されるために、これより少なくなると思われます。