Androidには、二種類のBluetoothが組み込まれている
AndroidのBluetoothには、 Bluetooth Classic と、 Bluetooth Low Energy(BLE) の二種類がある。
Bluetooth Classic の特徴
- Bluetoot Classic は、高速なデータの転送が可能、音声や動画のストリーミングなどの用途に適している
- Bluetoot Classicは、スマホとワイヤレスイヤホンをペアリングするのに使われる
![](https://programmerrikochan.com/wp-content/uploads/2023/08/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%84%E3%81%98%E3%82%8B%E5%A5%B3%E3%81%AE%E5%AD%90.png)
生活の中でよく聞くBluetoothは Bluetooth Classic を指しているのね
Bluetooth Low Energy(BLE)の特徴
- Bluetoothと言われるより、BLE(びーえるいー)と言われることが多い
- 省電力生が高く、小さなデータの送受信に適している
- 小型のデバイスでも長時間の動作が可能
- センサーによる温度や、湿度の収集に使用される
- ビーコンによる場所情報の提供に使用される
本記事では、Bluetooth Classicについてまとめる
Bluetooth Classic はどのようにして接続するか
- スマートフォンは、ピコネットという、小さなネットワークを発していている
![Bluetoothの画像](https://programmerrikochan.com/wp-content/uploads/2023/08/Bluetooth1-1024x550.png)
- ピコネットはスマホを中心に、イヤホンなど最大7つまでのBluetoothデバイスが接続することができる
![Bluetoothの画像](https://programmerrikochan.com/wp-content/uploads/2023/08/bluetooth2-1024x551.png)
- 例えば、スマートフォンとBluetoothイヤホンを接続する場合、スマートフォンがピコネットの「マスター」となり、イヤホンが「スレーブ」となる
![](https://programmerrikochan.com/wp-content/uploads/2023/08/Bluetooth3-1024x546.png)
- 接続が確立されると、スマートフォンとイヤホンの間で「コネクション」が行われて、このコネクションを通じて、スマートフォンとイヤホンは「サービス」と「プロファイル」と呼ばれる機能や設定をやりとりする
![](https://programmerrikochan.com/wp-content/uploads/2023/08/Bluetooth4-1024x553.png)
![](https://programmerrikochan.com/wp-content/uploads/2023/08/%E3%81%86%E3%82%8B%E3%81%86%E3%82%8B%E3%81%97%E3%81%A6%E3%81%84%E3%82%8B%E5%A5%B3%E3%81%AE%E5%AD%90.png)
サービスとプロファイルがちょっと難しいポイント
サービスとは
- サービスは、Bluetoothデバイスの役割を定義し、他のBluetoothデバイスと通信するためのルールや方法を提供するもの
- サービスは、UUIDによって一意に識別される
- スマホなどのマスターは、そのUUIDを使用して、Bluetooth サービスに接続する
プロファイルとは
- プロファイルは、どのように通信を行うかを定義するもの
- プロファイルには、いろいろなものがある
![](https://programmerrikochan.com/wp-content/uploads/2023/08/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%84%E3%81%98%E3%82%8B%E5%A5%B3%E3%81%AE%E5%AD%90.png)
ちょっと難しいけど、サービスは、Bluetoothのデバイス間で通信するために必要な機能を定義するものであり、プロファイルは、Bluetoothデバイスがどのように通信を行うかを定義するものって感じ。
ワイヤレスイヤホンを例に、サービスとプロファイルの説明をしてみる
- 例えば、A2DPプロファイルは、音楽や音声を高品質でストリーミングするために使用されるプロファイルのことで、このサービスは、スマートフォンがイヤホンに送信する音声データを処理し、イヤホンから音声を再生することができる
- HFPプロファイルは、「通話サービス」を定義しており、
- スマートフォンは、このサービスを使用して、通話関連のデータをイヤホンに送信し、イヤホンが通話関連の機能を提供することができる
- これらのサービスを使用するために、スマートフォンは、Bluetooth搭載機器の持っているUUIDを使用する
![](https://programmerrikochan.com/wp-content/uploads/2023/08/Bluetooth7-1024x549.png)
![](https://programmerrikochan.com/wp-content/uploads/2023/08/%E3%82%B9%E3%83%9E%E3%83%9B%E3%81%84%E3%81%98%E3%82%8B%E5%A5%B3%E3%81%AE%E5%AD%90.png)
•サービスは、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デバイスとの接続を切断する
![](https://programmerrikochan.com/wp-content/uploads/2023/07/cropped-cropped-IMG_5515.jpg)
需要があれば、実際のコードも載せたいと思ってます!
Bluetoothむずかしい・・・・。