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(びーえるいー)と言われることが多い
- 省電力生が高く、小さなデータの送受信に適している
- 小型のデバイスでも長時間の動作が可能
- センサーによる温度や、湿度の収集に使用される
- ビーコンによる場所情報の提供に使用される
本記事では、Bluetooth Classicについてまとめる
Bluetooth Classic はどのようにして接続するか
- スマートフォンは、ピコネットという、小さなネットワークを発していている
- ピコネットはスマホを中心に、イヤホンなど最大7つまでのBluetoothデバイスが接続することができる
- 例えば、スマートフォンとBluetoothイヤホンを接続する場合、スマートフォンがピコネットの「マスター」となり、イヤホンが「スレーブ」となる
- 接続が確立されると、スマートフォンとイヤホンの間で「コネクション」が行われて、このコネクションを通じて、スマートフォンとイヤホンは「サービス」と「プロファイル」と呼ばれる機能や設定をやりとりする
サービスとプロファイルがちょっと難しいポイント
サービスとは
- サービスは、Bluetoothデバイスの役割を定義し、他のBluetoothデバイスと通信するためのルールや方法を提供するもの
- サービスは、UUIDによって一意に識別される
- スマホなどのマスターは、そのUUIDを使用して、Bluetooth サービスに接続する
プロファイルとは
- プロファイルは、どのように通信を行うかを定義するもの
- プロファイルには、いろいろなものがある
ちょっと難しいけど、サービスは、Bluetoothのデバイス間で通信するために必要な機能を定義するものであり、プロファイルは、Bluetoothデバイスがどのように通信を行うかを定義するものって感じ。
ワイヤレスイヤホンを例に、サービスとプロファイルの説明をしてみる
- 例えば、A2DPプロファイルは、音楽や音声を高品質でストリーミングするために使用されるプロファイルのことで、このサービスは、スマートフォンがイヤホンに送信する音声データを処理し、イヤホンから音声を再生することができる
- HFPプロファイルは、「通話サービス」を定義しており、
- スマートフォンは、このサービスを使用して、通話関連のデータをイヤホンに送信し、イヤホンが通話関連の機能を提供することができる
- これらのサービスを使用するために、スマートフォンは、Bluetooth搭載機器の持っているUUIDを使用する
•サービスは、Bluetoothデバイスが提供する機能の種類を示すもの
•プロファイルは、Bluetoothの機能をどのように実現するかを定義するもの
Bluetoothクラシックの接続手順
- スキャン
- ペアリング
- 接続
- 切断
実装で必要なこと
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デバイスとの接続を切断する
需要があれば、実際のコードも載せたいと思ってます!
Bluetoothむずかしい・・・・。