BlueST Protocolについては、GitHubのREADME.mdにありますが、英語で書かれていますし、少し説明も足りておらず、理解しようとするのに一苦労です。
本記事では、BlueST Protocolについて日本語で解説します。
目次
BLE(Bluetooth Low Energy)とは
BlueST Protocolの説明の前に、まずはBLEを理解している必要があります。
BLEとはBluetooth Low Energyの略で、たくさんあるBluetoothの仕様の1つです。ちなみに、今後はBLE1本になる流れのようです。
ここでは、BLEのイメージだけ掴んでいただきたいので、かなり省略して説明します。
BLEのシステム構成
Bluetoothは無線通信の1つで、パソコンとマウス、スマホやイヤホン、の通信に使われているのは、ご存知のことと思います。
ここで覚えておいて欲しいのは、『Central』と『Peripheral』の名前と関係です。『Central』はデータをもらう側のことで、パソコンやスマホに相当します。『Peripheral』はデータを提供する側のことで、マウスやイヤホンに相当します。
BLEの通信手順
『Central』と『Peripheral』は次の図のような順番で通信を行います。
はじめ、『Peripheral』が定期的に『Advertising』と呼ばれるメッセージを送信します。これは自分を見つけてください!という意味で送っています。
『Central』がこの『Advertising』に気付いたら、『Connect』メッセージを送信して、接続状態を作ります。
接続状態になったら、『Central』は『Peripheral』のデータをもらいたいので、『Start Notify』メッセージを送ります。これは、データが更新したら教えてね!という意味です。
その後は、『Peripheral』の中でデータ更新がある度に『Notify』メッセージにデータを載せて、『Central』に通知します。
例えばマウスだったら、マウスの移動量を送ることで、マウスを操作することができますね。
『Notify』以外にも、データを取得する方法として『Read』があります。こちらは、通知を受けるのではなく、『Central』が欲しいと思った時に逐次取りに行く方式です。
また、データを書き込む『Write』というメッセージもありますが、ここでは詳細は省きます。
BLEのデータ構造
BLEのデータ構造にも軽く触れておきます。
BLEではデータのことを『Characteristic』と呼びます。この『Characteristic』の中にさらにValueとかPropertyといったものが含まれますが、ここではあまり気にしなくて大丈夫です。
『Characteristic』の上位に『Service』と呼ばれるものがありますが、これは単にわかりやすくするためのグループ分けのようなものです。
複数の『Service』と『Characteristic』があるので区別するために、それぞれ『UUID』と呼ばれるIDを持っています。
BlueST Protocolとは
STMicrosystems社の独自仕様
BlueST Protocolは、STMicrosystems社が決めた独自の通信仕様で、STMicrosystems社の開発キットのデモ機能の中で使われています。例えば、評価ボードとスマホアプリ間の通信で使われています。
参考:【SensorTile kit】ST BLE Sensorと連携してセンサーの値を取得
BlueST Protocolは、BLEをベースにいくつかの決め事を追加したものです。
追加の決め事は下記の2点です。
- Advertisingのメッセージフォーマット
- CharacteristicのUUIDとメッセージフォーマット
独自仕様と聞くとちょっと腰が引けてしまいますが、BLEをベースに追加の決め事が2つあるだけです。恐れることはありません。
BlueST ProtocolのAdvertising
Advertisingメッセージのフォーマットが決められています。
Device Idは、『Peripheral』の種類を指定しています。使われる値は下表のとおりです。
Id | ボード |
0x00 | 一般的なボード |
0x01 | STEVAL-WESU1 |
0x02 | STEVAL-STLKT01V1(SensorTile) |
0x03 | STEVAL-BCNKT01V1(BlueCoint) |
0x04 | STEVAL-0IDB008V1/2(BlueNRG-2) |
0x05 | STEVAL-BCN002V18(BlueNRG-Tile) |
0x06 | STEVAL-MKSBOX1V1(SensorTile.Box) |
0x07 | B-L475E-IOT01A |
0x08~0x7F | ユーザカスタムボード用 |
0x80~0x8A | ST Functional pack |
0x8B~0x8F | 予約 |
Feature Maskは、この『Peripheral』が持っているデモ機能(Basic Feature)をビットで表現しています。デモ機能とビットの対応表は下記の通りです。
Device MACは、『Peripheral』の物理アドレスです。『Peripheral』がiOSデバイスの時だけ利用されます。
このように『Advertising』メッセージを受け取るだけで、ボードの種類と、持っているデモ機能を知ることができるようになっています。
BlueST ProtocolのCharacteristic
BlueST Protocolのデータ構造は下記のようになっています。
各Service、Characteristicについては下表を参考にしてください。
Service | Characteristic | UUID | 説明 |
Feature | 00000000-0001-11e1-9ab4-0002a5d5c51b | デモ機能 | |
Base Feature |
XXXXXXXX-0001-11e1-ac36-0002a5d5c51b |
各デモ機能のデータ。 |
|
Extended Feature | XXXXXXXX-0002-11e1-ac36-0002a5d5c51b |
追加のデモ機能のデータ。ユーザ追加機能もここに入れる |
|
Remote Feature | 不明 |
リモートデバイスのFeatureデータ |
|
Debug | 00000000-000E-11e1-9ab4-0002a5d5c51b | デバッグ機能 | |
Command | 00000001-000E-11e1-ac36-0002a5d5c51b | デバッグ用コマンド | |
Error | 00000002-000E-11e1-ac36-0002a5d5c51b | エラー情報 | |
Config | 00000000-000F-11e1-9ab4-0002a5d5c51b | 設定 | |
Command | 00000002-000F-11e1-ac36-0002a5d5c51b | 設定用コマンド | |
00000001-000F-11e1-ac36-0002a5d5c51b | ボードのレジスタ値 |
Feature
Featureの中には、各デモ機能のデータが格納されています。CharacteristicとしてBasic Feature、Extended Feature、Remote Featureがあります。なお、単にFeatureと言った時はBasic Featureのことを指しています。
Basic FeatureのUUIDのXXXXXXXXとなっている箇所は、AdvertisingのFeature Maskと同じです。つまり、複数のデモ機能のビットが立っていれば、複数のデモ機能データを取得できるFeatureであるということです。
Extended FeatureのUUIDのXXXXXXXXとなっている箇所も考え方は同じですが、どんなデモ機能が追加されるかはわからないので、ビットと機能の対応は定義されていません。
Remote FeatureのUUIDは記載がなく不明です。
また、データのフォーマットも定義しています。
Basic FeatureとExtended Featureのデータフォーマットは下記の通りです。タイムスタンプの後にFeatureのデータが並んでいるだけのシンプルなフォーマットです。
※BLEの制限で最大20バイトまで
Remote Featureのデータフォーマットは下記の通りです。リモートデバイスのIDから始まるだけで、あとはFeatureと同じです。
Debug
Debugはデバッグ用途です。
CharacteristicとしてCommandとErrorがあります。Commandは、文字列コマンドの送受信を行います。Errorは、ボード内で発生したエラーの通知を行います。詳しくはREADME.mdには書かれておらず不明です。
Configuration
ConfigurationはFeatureとコミュニケーションするために使用します。CommandとRegisterがあります。
Commandは、各機能にコマンドを送信を行うことができます。また、一部のコマンドでは応答の受信を行うことができます。
コマンド送信のフォーマットは下記の通りです。
応答のメッセージのフォーマットは下記の通りです。
コマンドのIDとデータは、各Featureの仕様を確認する必要があります。
Registerは、ボードの設定レジスタの取得・更新・変更通知を行うことができます。詳しくはREADME.mdには書かれておらず不明です。
終わりに
本記事ではBlueST Protocolの日本語訳と解説を行いました。
BlueST ProtocolはSTMicrosystems社の独自仕様ですが、BLEをベースにしており、追加仕様も2つだけなので、BLEさえ理解していれば、そこまで難しいものではありません。
本記事を読むことで少なくとも概要はつかんでいただけたかと思います。
さらなる情報については、下記のリンクを参照してください。
- https://github.com/STMicroelectronics/BlueSTSDK_Android
- BlueST Protocolの原文です
- 本記事はこのページを日本語にして咀嚼したものです
- https://www.st.com/en/embedded-software/bluest-sdk.html
- BlueST Protocolを利用するためのライブラリ