こんにちは。共同開発部 開発担当の伊藤です。
フェンリルの共同開発部ではこれまで数多くの企業様と、iOS、Android、Windows Phone、Windows 8 と多様なプラットフォームで、多種多様なアプリを共同開発してきました。
その中で得たものは、これまでもここ Developer’s Blog でもご紹介してきましたが、これだけ数多くの環境でアプリが作れる人がいるのだから、ある特定の事柄についてプラットフォームを横断して紹介できるのではないかと考えまして、今週からしばらく Bluetooth Low Energy について集中的にご紹介していきたいと思います。
最近 Bluetooth Low Energy 対応の機器もいろいろ増えてきており、これまで iOS だけだったのが Android 4.3、Windows 8.1 でも使用できるようになってきて話題になっている技術ですので、みなさまのお役に立てればと思います。
- 第1回 Bluetooth Low Energy の基礎
- 第2回 iOS デバイスで Bluetooth LE 機器を使う
- 第3回 iOS デバイスを Bluetooth LE 機器にする
- 第4回 Windows 8.1 の Windows ストアアプリで BLE を使う
Bluetooth Low Energy について
Bluetooth Low Energy (Bluetooth 4.0、BLE、BTLE、ともいわれます。以下 BLE と書きます) とは、2.4GHz の無線を使った近距離無線通信規格です。これまでの Bluetooth は速度の高速化が行われてきましたが、BLE は通信速度はほどほどにして、ボタン電池 1 個でも数年動作できる省電力性が重視されています。
ホスト側とデバイス側で GATT(Generic ATTribute) というプロファイルで通信を行います。GATT という単語が出てきたら BLE を使うものだと考えていただいて大丈夫です。
これまでの Bluetooth とは互換性はないため、ホスト側は、これまでの Bluetooth 3.0 とデュアルモードとして、どちらも使用できるようにとして実装される場合が多いです。パソコン・スマートフォンでは、このデュアルモードが使えるものには「Bluetooth Smart Ready」、Bluetooth Low Energy のみが使えるものには「Bluetooth Smart」と表示されるようになっています。
ちなみに、元々は 2006 年に Nokia が Wibree という名前で規格を作っていましたが、2010 年に Bluetooth 4.0 として標準化されました。
Generic Attribute (GATT) Profile
GATT は BLE の通信の通信規定で、デバイスの中に複数の「サービス」があり、その中にはまた複数の「キャラクタリスティック」があるという形になっています。
実際のデータのやりとりは、キャラクタリスティックに対して読み書きすることで行われます。オブジェクト指向プログラミングをしている方々には、サービスがクラス、キャラクタリスティックがプロパティととらえるとわかりやすいかもしれません。
各キャラクタリスティックの値は無暗号化状態で読み書きすることもできますが、ペアリングの操作を行うと暗号化されます。また、キャラクタリスティックの値が変化したときに通知を受け取れるものもあります(notify)。
これらのサービスやキャラクタリスティックは Bluetooth SIG が標準として定義しているもののほかに、デバイスの開発者が独自に定義することも可能です。
いくつかの必要なサービスを組み合わせたものを「プロファイル」と呼んでいます。(特にこれまでのBluetoothのプロファイルと区別する必要のある場合はGATTベースプロファイルと呼ばれます)
プロファイルも標準的なものは Bluetooth SIG が定義しており、たとえば、マウス・キーボードにあたる「HID over GATT」というプロファイルには、「Human Interface Device」「Device Information」「Battery Service」「Scan Parameters(オプション)」のサービスが含まれると定義されています。
サービス・キャラクタリスティックは、UUID で識別されます。UUID は 32 桁ですが、Bluetooth SIG の標準で定義されているものについては 4 桁で表現されます。4 桁の UUID は実際には Bluetooth Base UUID というものをつけ、0000●●●●-0000-1000-8000-00805f9b34fb となります(●のところに4桁 UUID が入ります)。規格外で独自に定義する場合は Mac では uuidgen コマンドを使うなどして生成します。
スマートフォン・タブレットでの対応状況
ここまで Bluetooth Low Energy が話題になっている背景には iPhone が対応しているということが挙げられます。iOS 5 が出るまでは、iOS アプリから Bluetooth 機器に自由にアクセスするには Made for iPhone の認証をとり、独自のプロファイルを使用する必要がありました。iOS5 で CoreBluetooth が追加され、iPhone 4s 以降および iPad(3rd generation) 以降、iPod touch(5th generation) 以降、iPad mini は初代からでアプリから BLE 機器をスキャンし、ペアリングを行って自由にデータ通信ができるようになりました。その後2年が経過し、iOS 向けを中心として BLE デバイスが広がってきました。
とくに iOS では、バックグラウンド実行で BLE デバイスとの通信ができることと、iOS 6 以降で追加された CBPeripheralManager を使うことによって、iOS 端末に独自の BLE デバイスを定義することができ、他のホストデバイスから接続させることができるのが注目すべき点です。
また、Android では各メーカーが独自に BLE 対応のライブラリを出していましたが、Android 4.3 で標準 API として搭載され、アプリから使えるようになっています。
Windows 8 では、キーボード・マウスなど、OS 標準機能では使用できていましたが、アプリからは HTML5 ベースの Windows ストアアプリで限定的にしか使えませんでした。Windows 8.1 からはきちんと WinRT のクラスライブラリで対応され、XAML+C# のアプリでも使用できるようになっています。
開発をはじめるにあたって
BLE を使ったアプリ開発をはじめるにあたっては、通信相手となるデバイスが必要となります。
この連載では、以下のようなデバイスを使って開発を進めていこうと考えています。
BLE も無線通信ですので、技適マークがついている必要がありますので、ご注意ください。
機器を輸入して使用しようとされる方は、事前に販売元に確認したほうがよいでしょう。
●Texas Instruments CC2541 SensorTag 開発キット
加速度、温度、湿度といった各種センサーを搭載しています。BLE を使ったアプリ開発の学習環境としておすすめです。
●konashi
電子工作が出来る人向けの、フィジカルコンピューティングツールキット。様々な端子を使ってLEDや液晶などをコントロールできます。
●この連載の中で実装する、iPhone 上に実装したデバイス
iPhone 5s への買い替えで iPhone 4s や iPhone 5 が余っている人はこれが一番安上がりですね。
BLE を見てみよう
このまま終わるのも何ですので、Bluetooth Low Energy のデータを実際に見る方法を見る方法をご紹介します。
iPhone に BLExplr というアプリを入れることにより、BLE 機器のデータを簡単に確認することができます。
デバイス側のペアリングスイッチを入れ、BLExplr を起動してリフレッシュすると、一覧でデバイスを確認できます。
デバイスを選択すると、そのデバイスが実装しているサービスを見ることができます。また、サービスを選択すれば、その中にあるキャラクタリスティックが確認できます。
キャラクタリスティックを開くと、実際にその値を読んだり、値を書き込んだりすることができます。
さいごに
いかがでしたでしょうか。BLE についての基礎的なことはこれでご理解いただけたと思います。
以後の回では、iOS、Android、Windows 8.1 の各プラットフォームでの BLE アプリの開発の方法や、注意点などを取り上げていきます。今後も引き続きおつきあいいただければ幸いです。
フェンリルのオフィシャル Twitter アカウントでは、フェンリルプロダクトの最新情報などをつぶやいています。よろしければフォローしてください!