Corredor

ウェブ、プログラミングの勉強メモ。

cordova-plugin-bluetoothle を使って iOS 同士で Bluetooth 通信する Cordova アプリを作る : 1 仕組み・準備編

【永久保証付き】Arduino Uno

【永久保証付き】Arduino Uno

以前 cordova-plugin-bluetooth-serial という Cordova プラグインを紹介した。

neos21.hatenablog.com

この時は Bluetooth 通信の仕組みがよく分かっていなかったのでプラグインが使えていなかったが、今回紹介する cordova-plugin-bluetoothle を使うと、iOS デバイス同士で Bluetooth 通信が行える Cordova アプリを作ることができる。

Bluetooth 通信の仕組み

そもそも Bluetooth 通信の仕組みを勘違いしていたので、そこからおさらいする。

普段自分たちが使っている Bluetooth 通信の感覚からすると、1対1で対等に通信していると考えがちだが、実は「ペリフェラル」という役割と「セントラル」という役割に別れて、サーバとクライアントのような関係で通信を行っている

ペリフェラルはサーバ側。クライアントであるセントラルを待ち受けており、セントラルからの要求に応答する形でやり取りを行う。

例えば、iPhone で Bluetooth 接続する場合を考えてみる。iPhone の「設定」アプリから「Bluetooth」メニューを選ぶと、接続できる Bluetooth デバイスが一覧表示されるが、ここに表示されている端末が「ペリフェラル」である。
サーバであるペリフェラルは自分から相手に接続しに行くことはなく、自分が存在していることを周辺に示す「アドバタイジング」という信号を発信して待機しているだけなのである。ペリフェラルが発信するアドバタイジングを取得し、接続可能なデバイスとして表示しているのが「設定」の「Bluetooth」画面、といえる。

ここで特定の Bluetooth デバイスを選択し、通信が開始するので、iPhone 側は「セントラル」、クライアントとして接続していることになる。

例えば、ゲームのコントローラが Bluetooth 接続できる場合を考えると、パソコン本体からゲームのコントローラを特定しに行く。つまりパソコン本体がセントラルで、ゲームコントローラがペリフェラルなのである。

cordova-plugin-ble-central プラグインの Central とはこのことで、iOS がセントラル端末として動作するための実装を提供するプラグインだったワケである。つまり、ペリフェラル端末としての実装はなく、それは別途用意する必要があったのだ。クライアント側だけ実装してもそりゃ接続先がないから通信なんかできないよね、と…。

さて、cordova-plugin-bluetoothle プラグインは、このペリフェラルとセントラルの両方の役割をこなせるよう、両方の実装が用意されている。つまり iPhone 同士で片方がペリフェラル、もう片方がセントラルとなって通信ができるワケである。

Bluetooth Low Energy

これは Bluetooth 通信の規格の話で、iOS の場合は Bluetooth 4.0、通称「Bluetooth Low Energy」という規格で通信する。今回は iPhone 同士でペリフェラルもセントラルもやろうとしているが、例えば既存の Bluetooth デバイスに向けて iPhone から接続しようとする場合は、対象のデバイスが Bluetooth Low Energy 規格で通信できないといけない。最近は大体対応しているので心配要らないとは思うが…。

この Bluetooth Low Energy の頭文字を取って BLE と言ったりする。cordova-plugin-ble-central の BLE とか、cordova-plugin-bluetoothle の BluetoothLE とかが、この Low Energy の意味である。

この他、Bluetooth 接続の中で「サービス」「キャラクタリスティック」「ディスクリプタ」とかいう単語が出てくるが、別途紹介していく。

今回の実装方針

今回は Cordova アプリとして iOS 同士の Bluetooth 通信を実現しようと思うので、実装に使う言語は基本的に JavaScript のみ。

cordova-plugin-bluetoothle プラグインはそのまま使うとコールバック地獄に陥りやすいので、各 API を Promise 化して使おうと思う。そのため、ES2015 もしくは TypeScript あたりを使うと良い。今回は Angular4 系を使って実装しようと思う。Ionic Native プラグインがないので、Promise 化は手作業になる。

Angular4・TypeScript を使うが、特定のフレームワークに依存した実装にはならないので、応用が利くと思う。

対象とするモバイルの OS は iOS のみ。Android も対応しているプラグインなので、参考にはなると思う。

雛形プロジェクトの用意・cordova-plugin-bluetoothle のインストール

それでは、まず Angular4 + Cordova なアプリの雛形を用意する。以下に拙作の angular-cordova ボイラープレートを置いておくので、こちらをベースにしていただけると良いだろう。

次にプロジェクトに cordova-plugin-bluetoothle プラグインをインストールする。

$ cordova plugin add cordova-plugin-bluetoothle

インストールに際して特に設定は要らない。


これでプロジェクトの準備ができた。次回はペリフェラル側の実装を行おうと思う。