Androidには、二種類のBluetoothが組み込まれている
- AndroidのBluetoothには、
Bluetooth Classic
と、Bluetooth Low Energy(BLE)
の二種類がある。
Bluetooth Classic の特徴
- Bluetoot Classic は、高速なデータの転送が可能、音声や動画のストリーミングなどの用途に適している
- Bluetoot Classicは、スマホとワイヤレスイヤホンをペアリングするのに使われる
生活の中でよく聞くBluetoothは Bluetooth Classic を指しているのね
Bluetooth Low Energy(BLE)の特徴
- Bluetoothと言われるより、BLE(びーえるいー)と言われることが多い
- 省電力生が高く、小さなデータの送受信に適している
- 小型のデバイスでも長時間の動作が可能
- センサーによる温度や、湿度の収集に使用される
- ビーコンによる場所情報の提供に使用される
BLEの方がインターネット上情報が多いイメージ (Classicの方は調べても情報が少ない気がする)
本記事では、Bluetooth Classicについてまとめる
Bluetooth Classic はどのようにして接続するか
-
例えば、スマートフォンとBluetoothイヤホンを接続する場合、スマートフォンがピコネットの「マスター」となり、イヤホンが「スレーブ」となる
-
接続が確立されると、スマートフォンとイヤホンの間で「コネクション」が行われて、このコネクションを通じて、スマートフォンとイヤホンは「サービス」と「プロファイル」と呼ばれる機能や設定をやりとりする
サービスとプロファイルがちょっと難しいポイント
サービスとは
- サービスは、Bluetoothデバイスの役割を定義し、他のBluetoothデバイスと通信するためのルールや方法を提供するもの
- サービスは、UUIDによって一意に識別される
- スマホなどのマスターは、そのUUIDを使用して、Bluetooth サービスに接続する
プロファイルとは
- プロファイルは、どのように通信を行うかを定義するもの
- プロファイルには、いろいろなものがある
こんな感じで、たくさんのプロファイルが用意されている
https://ja.wikipedia.org/wiki/Bluetooth%E3%83%97%E3%83%AD%E3%83%95%E3%82%A1%E3%82%A4%E3%83%AB%E3%81%AE%E4%B8%80%E8%A6%A7
ちょっと難しいけど、サービスは、Bluetoothのデバイス間で通信するために必要な機能を定義するものであり、プロファイルは、Bluetoothデバイスがどのように通信を行うかを定義するものって感じ。
ワイヤレスイヤホンを例に、サービスとプロファイルの説明をしてみる
- 例えば、
A2DPプロファイル
は、音楽や音声を高品質でストリーミングするために使用されるプロファイルのことで、このサービスは、スマートフォンがイヤホンに送信する音声データを処理し、イヤホンから音声を再生することができる -
HFPプロファイル
は、「通話サービス」を定義しており、 スマートフォンは、このサービスを使用して、通話関連のデータをイヤホンに送信し、イヤホンが通話関連の機能を提供することができる - これらのサービスを使用するために、スマートフォンは、Bluetooth搭載機器の持っている
UUID
を使用する
サービスは、Bluetoothデバイスが提供する機能の種類を示すもの
プロファイルは、Bluetoothの機能をどのように実現するかを定義するもの
う〜〜ん簡潔に言うと・・・
Bluetoothデバイスは、UUIDによって提供されるサービスを特定する!
ワイヤレスイヤホンが、指定されたUUIDをサポートしている場合、それはデータの送受信が可能であると認識することができる!
Bluetoothクラシックの接続手順
1 スキャン
2 ペアリング
3 接続
4 切断
ちなみに、スキャンとペアリングの違いについて
ペアリング
は、
デバイス同士が初めて出会ったときに、お互いを認識し合い、信頼関係を築くプロセスのこと。
このタイミングで鍵とかを交換しているらしい。
接続
は、
デバイス同士が既にペアリング済みの場合に行うもので、実際にデータを送受信するための通信路が開かれる。接続が確立されると、データのやり取りが可能になる。
これが、最初の方に言っていたマスターとスレーブのコネクションのこと。
実装で必要なこと
BluetoothAdapterの取得
- Bluetoothデバイスにアクセスするために、
BluetoothAdapter
を取得する
スキャン
- Bluetoothデバイスを検索するためには、
BluetoothAdapter.startDiscovery()
メソッドを使用する
ペアリング
- ペアリングは、2つのBluetoothデバイス間で信頼関係を確立することで、Bluetooth接続のために必要
-
BluetoothDevice.createBond()
メソッドを使用して、デバイスをペアリングする
接続
-
BluetoothSocketオブジェクト
を使用して、Bluetoothデバイスに接続する -
BluetoothSocket.connect()
メソッドを使用して、Bluetoothデバイスに接続する
通信
-
BluetoothSocketオブジェクト
を使用して、Bluetoothデバイスと通信を行う -
BluetoothSocket.getInputStream()
とBluetoothSocket.getOutputStream()
メソッドを使用して、データを送受信する
切断
-
BluetoothSocket.close()
メソッドを使用して、Bluetoothデバイスとの接続を切断する
以上です
いずれ、実際のコードも載せたいと思ってます!(綺麗に整えたら・・・)
BLEの方が需要あるのに、Bluetooth Classicでごめんなさい・・・。
Bluetoothむずかしい・・・・。
がんばるぞい!!