ukoasis blog

Core Bluetoothの理解、まとめ Part1

October 27, 2013

最近、仕事でiOSのCore Bluetoothフレームワークについて調査する機会があったので、自分の理解の整理も兼ねてまとめていきます。 (理解が及んでいないところもあるかと思いますので、間違っていたら教えて下さい。)

概要

Core Bluetoothフレームワークは、iOSアプリケーションでBluetooth LEに関する操作を提供するものです。 Bluetooth LE?という感じですが、そちらについては又別の機会にまとめたいと思います。興味ある方は下記のブログで非常にしっかりとまとめて頂いているので是非一読を。

http://reinforce-lab.github.io/

出現する用語

出てくる用語をざっくり把握しておくとドキュメントに当たるときに理解が進むので、最初にざっくりまとめます。

  • Central
    データを受信する側(Server/Clientで考えるとClient)
  • Peripheral
    データを発信する側(Server/Clientで考えるとServer)
  • Profile
    機器の種類ごとに定義されたプロトコル
  • Service
    Profileが持っているサービスに関する情報
  • Characteristic
    Serviceの属性
  • Advertise
    PeripheralからAdvertising Packetをブロードキャストすること。CentralはAdvertising Packetをスキャンして対象の機器を発見する
  • Advertising Packet Peripheralに関する情報(提供しているServiceの名前、受信信号の強度等)
  • RSSI
    受信信号の強度(-30dBm 〜 -100dBMの範囲で表す。数値が高い程強度が高い)
  • Notify
    PeripheralからCentralへデータの更新を通知すること
  • Indicate
    PeripheralからCentralへデータの更新を通知すること。加えて、Centralがデータ受信時に受取をPeripheralに通知する
  • Read
    CentralがPeripheralにデータを要求すること
  • Write
    CentralがPeripheralにデータを送信すること

利用イメージ

公式ドキュメントにある心拍計の例で上記の用語の利用イメージをまとめます

  • Central
    iPhone
  • Peripheral
    心拍計
  • Profile
    心拍計プロファイル(Heart rate profile)
  • Service
    心拍計サービス(Heart rate service)
  • Characteristic
    心拍数の計測データ(Heart rate measurement)
    センサー取り付け場所(Body sensor location)

身体に取り付けた心拍計から心拍系プロファイルで定義された情報をiPhoneで受取り、アプリケーションで処理するイメージです

通信の流れ

  • Advertise開始(Peripheral)
  • Advertising PacketをScan(Central)
  • Advertising Packetから該当のServiceがあればPeripheralに接続要求(Central)
  • 接続を確認し、接続する(Peripheral)
  • データの送受信を開始(Central, Peripheral)

まとめ

iOSでの実装の部分まで書く予定だったのですが、概要を再認識しながらまとめていったら思ったより時間がかかったので一区切りつけます。今後、追加したい内容として、バックグラウンドでどのような挙動になるのか(ここの調査が一番大変だったので・・)、実際のコードでBluetooth通信する、など書いていきたいと思います

参考資料

かなりイチオシなのは下記書籍です。知りたかったバックグラウンド周りの情報やらがコードとともにしっかり解説されています。Core Bluetooth周りの情報としてまとまってる書籍はなかなか無いです。

冒頭でも書いたのですがボリュームも有り、日本語の情報としてはもの凄く助かるブログです

http://reinforce-lab.github.io/

参考になるコードがあり、こちらも日本語の情報としてありがたい情報でした

http://hirooka.pro/?p=3261

official documentです。大抵のことはここを読めば解決します

https://developer.apple.com/library/ios/documentation/NetworkingInternetWeb/Conceptual/CoreBluetooth_concepts/AboutCoreBluetooth/Introduction.html#//apple_ref/doc/uid/TP40013257-CH1-SW1