Bluetoothは今やとても身近な存在になりました。ワイヤレスイヤホン、スマートウォッチ、忘れ物防止タグなど、様々な製品に使用されています。
今回は、そんな身近なBluetooth規格のうち、Bluetooth Low Energyの技術的な入門記事として、用語や概念を中心に紹介します。
Bluetoothには大きく分けて2つの規格があります。これらの規格はお互いに特性や用途が全く異なるものです。
元々のBluetoothです。名前に「Classic」とありますが、現在でも広く使われている規格です。
主な用途は、音声ストリーミング、ファイル転送、TCP/IPによるネットワーク構築などです。
最新規格のBluetooth 5.1では、通信速度の理論値が2Mbpsとなっています。
接続する際の手順として、ペアリングしてから接続するという手順となっていることも特徴です。
元々はNokkia社の「Wibree」という規格でしたが、Bluetooth 4.0で統合されました。そのため、Bluetooth Classicとは用途や仕様が全く異なります。
BLEでは、低電力に重きを置いており、例えば小型のIoTデバイスが長時間駆動できるように設計されています。
さらに、一度に通信できるデータ長が最大で512octetsとなっており、これを超えるデータをやり取りするには、何度も通信する必要があります。そのため、大きなデータを通信する場合にはスループットが大幅に低下するため、そのような場合はBluetooth Classicか、他の手段を検討した方が良いと言えます。
BLEでは次のような役割があります。
BLEで接続する手順は次の通りです。
このように、セントラル・ペリフェラルの関係性は、クライアント・サーバ のような関係性にあるといえます。
BLEでよく使われるプロトコルのひとつに「GATT」があります。GATTではサービスとキャラクタリスティックという概念のもと、セントラルと通信します。
サービスとは、キャラクタリスティックの集合体です。セントラルは、ペリフェラルとの通信が確立すると、まずはサービスを選択することになります。
接続が確立すると、ペリフェラルは、サービスの一覧をセントラルの提供するので、セントラルはその中から利用したいサービスを選択します。
サービスを選択すると、次はキャラクタリスティックに対して、データの読み書きをすることになります。キーバリュー型のデータ構造に似ていて、セントラルはUUIDをもとにペリフェラル側にデータを書き込んだり、読み込んだりすることができます。
また、GATTではサービスやキャラクタリスティックを一意に判別するために「UUID」を使用します。このUUIDはあらかじめ定められたものがありますが、自分で生成したUUIDを使用して独自のサービスやキャラクタリスティックとしても構いません。
あらかじめ定められたUUIDの例として、次のようなものがあります。
サービス
キャラクタリスティック
その他の定義済みのUUIDについては以下の資料に記載されています。
16-bit UUID Numbers Document (PDF)
セントラルからのリクエストによってデータを取得するだけでなく、ペリフェラルドリブンでデータを配信することもできます。
セントラルがキャラクタリスティックの更新通知を受けるようにすることで、ペリフェラル側から随時送信されて来るデータを受信することができます。
BLEを始められる方法を紹介します。もし、iOSやAndroidの開発機環境があれば、アプリ上にセントラル・ペリフェラル側の両方を実装することができます。そのほかにも、以下のパッケージを使用すれば、macOSやLinuxが動作するシステムで実装することができます。
Bluetoothは年々バージョンアップされていて、利便性が増しています。特に、BLEは開発の敷居が低いと思うので、今後もブログで記事にしていきたいと思います!