iOSのCore Bluetooth / BLEの通信速度

**Bluetooth Low Energy（Bluetooth4.0,  以下BLE）の通信速度** について調査、 **実測** してみたメモ。


**（2015.3追記）この記事は古く、書いた当時はBLEについての知識も乏しかったので内容には多分に誤りが混じっている可能性があります。**


#調査

まず "BLE 通信速度" でググってみました。

###[BLE(Bluetooth Low Energy)とは？について真面目に書く](http://mixture-art.net/blebluetooth-low-energy%E3%81%AB%E3%81%A4%E3%81%84%E3%81%A6%E7%9C%9F%E9%9D%A2%E7%9B%AE%E3%81%AB%E6%9B%B8%E3%81%8F/)

> BLEでは「無接続状態」から→「接続」→「データやり取り」までの速度を圧倒的に早くすることで
普段は頻繁に「つないで」「死んで」「つないで」「死んで」を繰り返している。

> ホントに必要なときしか動かないことで消費電力を最適化しているわけだ。

> そうすると気になるのは送信側でのデータ入力から受信側での受け取りまでのディレイだが、
 **接続自体のディレイは6ms程度、なのできっとデータ送受信トータル20-30msくらい** なのかなぁ。

> まぁ普通の人間が感じることができる（違和感を感じることができる）ディレイなんてせいぜい30ms以上の場合だけだから既出のキーボードなどの用途ではまったくもって申し分ないレベルだ、といえるだろう。


###[スルー防止も？ BLEがもたらすビジネスチャンス](http://www.atmarkit.co.jp/ait/articles/1310/15/news097.html)

> スペック上は最大通信速度が1Mbpsと謳われているが、「 **実質10kbps程度** と圧倒的に遅い」（森山氏）そうだ。


###[iOS Bluetooth Low Energyの開発 その1](http://reinforce-lab.github.io/blog/2013/01/21/ios-ble-introduction/)

> BLEは、例えば1秒に20バイト程度のデータを送受信するような、データのやり取り頻度は低いけれども、無線接続自体は長期間維持できる応用分野を想定した規格です。データ通信速度も物理層で1Mbpsです。クラシックBTは、ヘッドセットやパーソナル・エリア・ネットワーク(PAN)のような、特定の端末と接続すること(ペアリング)、常時データ通信があること、また高いデータ・レート(~3Mbps)が必要とされる、場面を想定した規格です。

> BLEの通信速度は、物理層で1Mbps、 **実際の通信速度は~50kbps程度** です。一方でクラシックBTは物理層で3Mbps(WiFiの物理層を使わないものであれば)で、~500kbps程度です。そもそも、そのような連続かつ高速のデータ送受信をし続ける応用例には、BLEを選択すること自体が、BLEの規格の狙い目からはずれていますから、クラシックBTのみで設計すればよいでしょう。


諸説ありますが、 **実質10～50kbps** のようです。


#iOSのCore Bluetoothで実測

Core Bluetoothで実際に実装して計ってみました。


計測用アプリは、下記書籍のサンプルをもとに、

- NSTimerでセントラルからのRead処理 ((ペリフェラルからのNotifyも同様にループさせて試してみたところ、Readよりも遅かったので、本記事ではReadについてのみ言及しています。)) をループさせる（ループ間隔はUIで変更できる）
- ペリフェラルからはランダムなNSDataを送り返す（データ長はUIで変更できる）
- セントラルで受信したデータサイズから通信速度（最大、最小、平均）を計算する

というような **計測用アプリ** をつくりました。


<div class="amazlet-box" style="margin-bottom:0px;"><div class="amazlet-image" style="float:left;margin:0px 12px 1px 0px;"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844335200/22301-22/ref=nosim/" name="amazletlink" target="_blank"><img src="http://ecx.images-amazon.com/images/I/41hs%2BPhSMqL._SL160_.jpg" alt="上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編" style="border: none;" /></a></div><div class="amazlet-info" style="line-height:120%; margin-bottom: 10px"><div class="amazlet-name" style="margin-bottom:10px;line-height:120%"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844335200/22301-22/ref=nosim/" name="amazletlink" target="_blank">上を目指すプログラマーのためのiPhoneアプリ開発テクニック iOS 7編</a><div class="amazlet-powered-date" style="font-size:80%;margin-top:5px;line-height:120%">posted with <a href="http://www.amazlet.com/" title="amazlet" target="_blank">amazlet</a> at 14.01.09</div></div><div class="amazlet-detail">加藤 寛人 西方 夏子 藤川 宏之 鈴木 晃 高丘 知央 <br />インプレスジャパン <br />売り上げランキング: 6,194<br /></div><div class="amazlet-sub-info" style="float: left;"><div class="amazlet-link" style="margin-top: 5px"><a href="http://www.amazon.co.jp/exec/obidos/ASIN/4844335200/22301-22/ref=nosim/" name="amazletlink" target="_blank">Amazon.co.jpで詳細を見る</a></div></div></div><div class="amazlet-footer" style="clear: left"></div></div>


セントラル側に iPhone5s、ペリフェラル側に iPhone5 を使用し、ループ間隔や、一度に送るNSDataオブジェクトのサイズをいろいろ変更しつつ計測したところ、 **安定して出た通信速度は 5kbps 程度** でした。


#関連記事

- [Core Bluetooth / BLEで音声データをやりとりする](http://d.hatena.ne.jp/shu223/20140130/1391033579)
- [Core Bluetoothのプロファイルについて調べたことのまとめ](http://d.hatena.ne.jp/shu223/20140109/1389216052)