http://googledevelopers.blogspot.jp/2015/07/lighting-way-with-ble-beacons.html から引用
はじめに
はじめに
弊社のブログでは様々なiOS + BLEやBLEデバイスの開発の取り組みを紹介してきました。
関連記事:
しかし、その中にはAndroid + BLEの記事は何故かありません。
ということで!
Android Marshmallowの公開もされましたので、これを機にAndroid 6.0 + BLEに関しての記事を掲載していきたいと思います。
今回は第一回目として、BluetoothとBLEのおさらいをしていきながら、今後作るアプリやサービスのイメージを膨らませていきましょう。
Bluetooth
Bluetoothの特徴
- 無線通信(数mから数十m程度の距離間での通信が可能)
- 小型で低消費電力
- 暗号化通信される
- 混信する可能性がとても低い
Bluetoothは無線接続の状態を意識せずに常時接続したままでの使用状況に適しているので、日常的に身につけるものなどとの相性がとても良いです。
また、近距離で少し大き目のデータでも機器間で通信を行うことも出来ます。
また、近距離で少し大き目のデータでも機器間で通信を行うことも出来ます。
特にPCのマウスやキーボード、ワイヤレスイヤホン、ヘッドフォンなどにも使用されています。
煩わしいケーブルを排除出来るので、作業スペース等がスッキリしてとても使いやすいです。
使用例:
使用例:
- マウスやキーボードのパソコン周辺機器
- オーディオ機器
- スキャナ/プリンタ
BLE(Bluetooth Low Energy)の特徴
- 小型で電池消費量が極少(ボタン電池で1年以上)
- ペアリングを行わなくても他デバイスに通知が可能(ブロードキャスト通信)
- 通信速度は低い
Bluetooth4.0はBluetooth3.0にBLEの技術を統合したもので、BLEとはBluetooth 4.0以降の機能の一部を指します。筆者自身勘違いをしていたのですが、Bluetooth4.0 = BLEというわけではありません。
Bluetooth3.0規格の拡張版がBluetooth4.0であり、その機能の一部がBLEです。
ただし、BLE機能は過去バージョンとの下方互換がまったくない為、BLEのみに対応したデバイスと3.0までのBluetoothデバイスとは接続を行うことが出来ない点に注意が必要です。
BLEデバイスは以下の2種類に分類されます。
Bluetooth3.0規格の拡張版がBluetooth4.0であり、その機能の一部がBLEです。
ただし、BLE機能は過去バージョンとの下方互換がまったくない為、BLEのみに対応したデバイスと3.0までのBluetoothデバイスとは接続を行うことが出来ない点に注意が必要です。
BLEデバイスは以下の2種類に分類されます。
Bluetooth Smart
BLEでのみ通信を行う。従来のBluetooth機器との接続不可。
Bluetooth Smart Ready
※ロゴマークに関してはこちらを参照してください。
※動画も公開しています。
BLEは常時データをやり取りする必要がなく、1回のデータ量も少ない用途に向いています。
超低消費電力なので、配置してからしばらく電池交換をする手間が必要ありません。
また、ペアリングを行わなくても他デバイスへの通知が可能なことから、通りがかっただけの人などを集客する効果も見込まれています。
使用例:
- ライフログリストバンド
- 運動用センサー(スピード/ケイデンス/心拍センサー)
- 忘れ物防止タグ
- 降水確立を知らせる傘立て(※)
- ごみの収集日を知らせるごみ箱(※)
- スマートウォッチ
※こちらを参照
さて、特徴や使用例をいくつか挙げていきました。
ここまででおさらいしてきたBluetoothの特徴や既に販売されているものや実施されているサービスを踏まえつつ、次はAndroidへと目を向けていきましょう。
Android & Bluetooth
ではAndroidではどのようにBluetoothの制御を行っているのでしょうか。
ここまででおさらいしてきたBluetoothの特徴や既に販売されているものや実施されているサービスを踏まえつつ、次はAndroidへと目を向けていきましょう。
Android & Bluetooth
ではAndroidではどのようにBluetoothの制御を行っているのでしょうか。
ここではAndroidのBluetoothアーキテクチャと、Bluetoothのプロファイルについて触れたいと思います。
※アプリケーション側の実装方法などは次回以降紹介します。
内部的に、Binder IPCメカニズムを介してBluetooth processをコールします。
Bluetooth system serviceはJNIを介してBluetooth stackと通信を行います。
また、Binder IPCを介してアプリと通信を行います。
system serviceにより、開発者は様々なBluetooth profileへのアクセスが可能となります。
下図が、Bluetooth stackの一般的な構造となります。
※アプリケーション側の実装方法などは次回以降紹介します。
Bluetoothアーキテクチャ
アプリケーションは、android.bluetoothのAPIを使いBluetoothハードウェアとの総合通信を行います。内部的に、Binder IPCメカニズムを介してBluetooth processをコールします。
Bluetooth system serviceはJNIを介してBluetooth stackと通信を行います。
また、Binder IPCを介してアプリと通信を行います。
system serviceにより、開発者は様々なBluetooth profileへのアクセスが可能となります。
下図が、Bluetooth stackの一般的な構造となります。
Bluetooth system service
packages/apps/BluetoothにあるBluetooth system serviceは、Android appとしてパッケージされ、Bluetooth serviceおよびprofileをAndroid framework layerに実装します。このアプリはJNI経由でHAL layerをコールします。
JNI
android.bluetoothと連携しているJNIは、packages/apps/Bluetooth/jniにあります。JNIコードは、HAL layerにコールし、端末が発見された時などのように、特定のBluetoothオペレーションが発生した際にHALからコールバックを受信します。
このような構造で、AndroidはアプリケーションからBluetoothの機能を使用することが出来ます。
アプリケーション開発においては特に、Application Framework部とBluetooth Process部を意識することになりますが、このような構造を知っておくことで、不具合などが発生した場合のデバッグなどにも役立つと思います。
そして、次にBluetooth Process部にあるプロファイルに関して簡単に説明します。
プロファイル
プロファイルというのは簡単に言うと、Bluetooth機器が何を出来るかを定義したものです。様々な機器と無線通信を行う性質上、どのような順番・タイミングで、どんな種類の情報を転送すべきか、という機器の「使い方」にあたる手順を共通化しておく必要がある。
この手順を機器の特性ごとに標準化したものが、プロファイルです。
参考:
Bluetoothプロファイル 【 Bluetooth Profile 】
接続するBluetooth機器同士が同じプロファイルに対応していることで、その機能が利用できますが、定義されていないと使用することが出来ません。
実際に使用する際にはプロファイルをよく理解し、適切なものを使用しましょう。
・主なBluetoothプロファイル(一部)
実際に使用する際にはプロファイルをよく理解し、適切なものを使用しましょう。
・主なBluetoothプロファイル(一部)
HID(Human Interface Device Profile) | 入力機器を扱うためのプロファイル |
HSP(Headset Profile) | ヘッドセットと通信するためのプロファイル |
HFP(Hands-Free Profile) | ハンズフリー通話をするためのプロファイル |
A2DP(Advanced Audio Distribution Profile) | 高音質のステレオ音声を伝送するためのプロファイル |
AVRCP(Audio/Video Remote Control Profile) | AV機器のコントロール(再生、早送り等)を行うためのプロファル |
FTP(File Transfer Profile) | ファイル転送プロファイル |
・4.0から使用出来るBluetoothプロファイル
ANP(Alert Notification Profile) | 電話やメールなどの着信を通知するプロファイル |
BLP(Blood Pressure Profile) | 血圧計から血圧情報を伝送するためのプロファイル |
CPP(Cycling Power Profile) | サイクリング時の力などを情報を伝送するためのプロファイル |
CSCP(Cycling Speed and Cadence Profile) | サイクリング時のスピードや回転数などの情報を伝送するためのプロファイル |
FMP(Find Me Profile) | 遠隔からアラームやバイブレーションを鳴動させ、装置の場所を調べるためのプロファイル |
GLP(Glucose Profile) | 血糖値の情報を伝送するためのプロファイル |
HOGP(HID over GATT Profile) | マウスやキーボードなどを接続するためのプロファイル |
HTP(Health Thermometer Profile) | 体温計の情報を伝送するためのプロファイル |
HRP(Heart Rate Profile) | 心拍計の情報を伝送するためのプロファイル |
IPSP (Internet Protocol Support Profile) | IPv6/6LoWPAN経由でインターネットに接続するプロファイル |
PASP(Phone Alert Status Profile) | 電話着信時の鳴動などを他の機器から止めるためのプロファイル |
PXP(Proximity Profile) | 互いの機器間の距離をモニタリングするためのプロファイル |
RSCP(Running Speed and Cadence Profile) | ランニング時のスピードや歩幅などの情報を伝送するためのプロファイル |
ScPP(Scan Parameters Profile) | 装置のスキャンをするためのプロファイル |
TIP(Time Profile) | 時刻情報を通知するためのプロフィール |
プロファイルの参考:
さいごに
今回はBluetoothやBLEに関してのおさらいを行いましたがいかがだったでしょうか。
BluetoothやBLEを使用したアプリやサービスのイメージは膨らみましたか?
次回からは実際にAndroidアプリケーションでBLEの検知、ペアリング方法を紹介したいと思います。
次回からは実際にAndroidアプリケーションでBLEの検知、ペアリング方法を紹介したいと思います。