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の画像

  • ピコネットはスマホを中心に、イヤホンなど最大7つまでのBluetoothデバイスが接続することができる
Bluetoothの画像

  • 例えば、スマートフォンと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デバイスとの接続を切断する

需要があれば、実際のコードも載せたいと思ってます!

Bluetoothむずかしい・・・・。