Bluetooth Low Energy(Bluetooth4.0, 以下BLE)の通信速度について調査、実測してみたメモ。
(2015.3追記)この記事は古く、書いた当時はBLEについての知識も乏しかったので内容には多分に誤りが混じっている可能性があります。
調査
まず "BLE 通信速度" でググってみました。
BLEでは「無接続状態」から→「接続」→「データやり取り」までの速度を圧倒的に早くすることで
普段は頻繁に「つないで」「死んで」「つないで」「死んで」を繰り返している。ホントに必要なときしか動かないことで消費電力を最適化しているわけだ。
そうすると気になるのは送信側でのデータ入力から受信側での受け取りまでのディレイだが、
接続自体のディレイは6ms程度、なのできっとデータ送受信トータル20-30msくらいなのかなぁ。
まぁ普通の人間が感じることができる(違和感を感じることができる)ディレイなんてせいぜい30ms以上の場合だけだから既出のキーボードなどの用途ではまったくもって申し分ないレベルだ、といえるだろう。
スペック上は最大通信速度が1Mbpsと謳われているが、「実質10kbps程度と圧倒的に遅い」(森山氏)そうだ。
(スルー防止も? BLEがもたらすビジネスチャンス (1/2):ものになるモノ、ならないモノ(53) - @IT)
BLEは、例えば1秒に20バイト程度のデータを送受信するような、データのやり取り頻度は低いけれども、無線接続自体は長期間維持できる応用分野を想定した規格です。データ通信速度も物理層で1Mbpsです。クラシックBTは、ヘッドセットやパーソナル・エリア・ネットワーク(PAN)のような、特定の端末と接続すること(ペアリング)、常時データ通信があること、また高いデータ・レート(~3Mbps)が必要とされる、場面を想定した規格です。
BLEの通信速度は、物理層で1Mbps、実際の通信速度は~50kbps程度です。一方でクラシックBTは物理層で3Mbps(WiFiの物理層を使わないものであれば)で、~500kbps程度です。そもそも、そのような連続かつ高速のデータ送受信をし続ける応用例には、BLEを選択すること自体が、BLEの規格の狙い目からはずれていますから、クラシックBTのみで設計すればよいでしょう。
(http://reinforce-lab.github.io/blog/2013/01/21/ios-ble-introduction/)
諸説ありますが、実質10〜50kbpsのようです。
iOSのCore Bluetoothで実測
Core Bluetoothで実際に実装して計ってみました。
計測用アプリは、下記書籍のサンプルをもとに、
- NSTimerでセントラルからのRead処理 *1 をループさせる(ループ間隔はUIで変更できる)
- ペリフェラルからはランダムなNSDataを送り返す(データ長はUIで変更できる)
- セントラルで受信したデータサイズから通信速度(最大、最小、平均)を計算する
というような計測用アプリをつくりました。
インプレスジャパン
売り上げランキング: 6,194
セントラル側に iPhone5s、ペリフェラル側に iPhone5 を使用し、ループ間隔や、一度に送るNSDataオブジェクトのサイズをいろいろ変更しつつ計測したところ、安定して出た通信速度は 5kbps 程度でした。
ただ、GATTまわりがまだよくわかってなくてサンプルそのままなので、改善の余地はあるかもしれません。
*1:ペリフェラルからのNotifyも同様にループさせて試してみたところ、Readよりも遅かったので、本記事ではReadについてのみ言及しています。