LINBLE-Z1をセントラルとして使用する場合の動作手順
こんにちは。ムセンコネクト三浦です。
LINBLE-Z1は無線初心者のエンジニアでも簡単に利用できるBluetoothモジュールです。
独自ファームウェアを搭載したコンプリートBluetoothモジュールで、ペリフェラルロールとセントラルロールの両方に対応しています。
※ペリフェラル、セントラルの意味合いなど、BLEの基礎知識については、【サルでもわかるBLE入門】 を御覧ください。
『自動モード』を使えば更に簡単です。Bluetoothモジュールをコントロールするためのコマンド制御も不要となるため、UARTなどの有線通信を簡単に無線通信に置き換えることができます。
今回はLINBLE-Z1(またはLINBLEドングル)をセントラルとして動作させる場合の使い方を説明したいと思います。
LINBLE-Z1をセントラルとして使うケース
LINBLE-Z1は計測機器やセンサ機器に組み込まれることが多く、ペリフェラルとして利用することがほとんどです。
よってLINBLE-Z1をセントラルとして利用するケースはあまり多くありませんが、LINBLE-Z1を組み込んだ計測機器やセンサ機器(ペリフェラル機器)と簡単に通信するセントラル機器を用意しようとした場合、つまりLINBLE-Z1同士で通信させる場合にLINBLE-Z1をセントラルとして利用することになります。
例えば、LINBLEドングルをセントラル動作させて下記のような構成で通信させたりします。
LINBLE-Z1をセントラルとして利用する場合の手順
セントラル機器がペリフェラル機器と通信する場合、セントラル機器の処理ステップは大きく2つに分けられます。
ステップ① 周囲のペリフェラル機器をスキャンする
ペリフェラル機器がBLE接続待ちの状態になっている時、アドバタイズというブロードキャスト電波を定期的に発信しています。このアドバタイズをセントラル機器が受信する動作のことをスキャンと言います。
アドバタイズにはペリフェラル機器のデバイス名やBDアドレス(Bluetooth Deviceアドレス)が含まれています。セントラル機器はスキャンして周囲にどんなペリフェラル機器がいるか知ることができます。
ステップ② 接続要求を発行し、ペリフェラル機器に接続する。
セントラル機器は、接続したいペリフェラル機器に対して接続要求を発行します。接続要求はBDアドレスを指定して発行する為、①のスキャン動作が必要になるわけです。
ただし、予め接続相手のBDアドレスを知っている場合は①のスキャン動作を省略していきなり②の接続動作を行うことができます。
セントラル機器が発行した接続要求をペリフェラル機器が受信してBLE接続が確立すると、GATT通信により双方向のデータ通信が可能になります。
よって、LINBLE-Z1をセントラルとして動作させる場合も、①スキャン→②接続要求の2ステップを行うことになります。
「通常モード」または「UART設定値起動モード」で起動させる場合
LINBLE-Z1はMODE端子で動作モードを切り替えれるようになっています。動作モードによって前述した2ステップの操作方法が少し異なります。
まず「通常モード」または「UART設定値起動モード」で起動した場合は、ホストマイコンからLINBLE-Z1に簡単なBTコマンドを送信して、セントラルとしての動作制御を行います。
①周囲のペリフェラル機器のスキャン
まずはBTIコマンド(ユーザーマニュアル P23)で周囲のLINBLE-Z1をスキャンします。
BTIコマンドではスキャンの最大検索数とタイムアウト値を指定することができます。
例えば「BTI830↵」と送信すると、8台のペリフェラル機器がみつかるか、もしくはスキャンを開始して30秒間経過するか どちらかの条件が成立するまでスキャンを行います。
スキャン結果はBTLVコマンド(ユーザーマニュアル P35)で指定したデバイス名でフィルタリングされます。ペリフェラル側のデバイス名に合わせてBTLVでフィルタ内容を変更する必要があります。
(ペリフェラル側のLINBLE-Z1のデバイス名はBTLXコマンドで変更可能ですので、セントラル側はそれに合わせてBTLVコマンドでフィルタするデバイス名を変更する必要があります。)
スキャンが終了するとLINBLE-Z1はスキャン結果レスポンスをホストマイコンに送信します。
スキャン結果レスポンスは、BDアドレス、スキャン結果のインデックス(1~8)、デバイス名の順番になっています。
※スキャン結果レスポンスの表示形式はBTLRコマンド(ユーザーマニュアル P32)で変更することができます。
スキャン結果レスポンスとして表示されるペリフェラル機器の順番は、セントラルがスキャンして見つかった順番ですので、BTIコマンドを実行するたびに毎回変わることに注意してください。
②ペリフェラル機器との接続
次にBTCコマンド(ユーザーマニュアル P20)でペリフェラル機器と接続します。
LINBLE-Z1は、BTIコマンドのスキャン結果レスポンスの内容を不揮発メモリに覚えています。
BTCコマンドでは、スキャン結果レスポンスのインデックス番号を指定してペリフェラル機器に接続要求を発行します。
(LINBLE-Z1の内部的にはスキャン結果として覚えているBDアドレスに接続を仕掛ける動作になります。)
以下、処理の一例です。
予め接続相手のBDアドレスがわかっている場合
前述したように、予め接続相手のBDアドレスがわかっている場合は、BTIコマンドでスキャンを実行せずにいきなり接続要求を発行することができます。
インデックスを指定しないでBTCコマンドを実行した場合は、BTLTコマンド(ユーザーマニュアル P33)で指定したBDアドレスに対して接続を試みます。
下記のBTコマンド例の様な手順で接続を試みます。
接続するペリフェラルが固定で決まっている場合などは、BTIコマンドを利用せずにBTLTコマンドで接続相手を指定して接続する方が効率的です。
「自動モード(セントラル)」で起動させる場合
MODE端子を、MODE0=LOW/MODE1=LOW としてLINBLE-Z1を起動した場合、LINBLE-Z1は「自動モード(セントラル)」で動作します。
「自動モード」は更に簡単に利用できる動作モードです。自動モードの動作についてはユーザーマニュアルにも記載されています。(ユーザーマニュアル P11)
予め通信相手のBDアドレスが分かっている場合
LINBLE-Z1は「自動モード(セントラル)」の時は、事前にBTLTコマンドで設定されたBDアドレスのペリフェラルに対して、自動的に接続を試みます。(自動的にインデックスなしのBTCコマンドを実行するイメージです。)
ですので、まずはLINBLE-Z1(セントラル)を、1度「通常モード」や「UART設定値起動モード」で起動して、BTLTコマンドで接続相手のLINBLE-Z1(ペリフェラル)のBDアドレスを設定しておきます。
その後、LINBLE-Z1(セントラル)を「自動モード(セントラル)」に切り替えて動作させるだけで、BTLTで設定したペリフェラルと接続します。※この時ペリフェラル側を接続待ち状態(アドバタイズ状態)にしておくことを忘れずに。
更に簡単にペリフェラルと接続する方法
先程の例では、予めBTLTコマンドで接続相手のBDアドレスを設定しておくことで、接続相手を指定して簡単に接続できることができました。
仮に接続相手のBDアドレスを設定しなくても、下記の条件を満たせば更に簡単にペリフェラルと接続することができます。
・LINBLE-Z1(ペリフェラル)のデバイス名を変えていない
・その場にLINBLE-Z1のペリフェラル1台と、LINBLE-Z1のセントラル1台しかない
LINBLE-Z1カンタンペア通信キットを買ってきて使い始めるときなどはこの条件にマッチします。
この場合は、予めBTLTコマンドで接続相手のBDアドレスを設定する必要はありません。
LINBLE-Z1(ペリフェラル)を「自動モード(ペリフェラル)」で動作させて、LINBLE-Z1(セントラル)を「自動モード(セントラル)」で動作させるだけです。
※LINBLE-Z1(ペリフェラル)は接続待ち状態(アドバタイズ状態)にしていれば良いので、「通常モード」でBTAコマンドを実行した状態でも構いません。
LINBLE-Z1(セントラル)はLINBLE-Z1(ペリフェラル)のアドバタイズを受信して自動的に接続します。
また、この時接続したLINBLE-Z1(ペリフェラル)のBDアドレスはBTLTコマンドの設定値に反映されるので、次回からも同じ接続相手と接続することができます。
「自動モード(セントラル)」時、LINBLE-Z1の内部動作はどうなっているか?
LINBLE-Z1が「自動モード(セントラル)」で動作している時の内部的な処理は以下の様になります。
①BTLTの設定値を確認します。
BTLTの設定値が「000000000000」の以外の場合は、②-Aの動作になります。
BTLTの設定値が「000000000000」の場合は、②-Bの動作になります。
②-A BTLTで設定されたBDアドレスに対して接続を試行します。接続が成功したらオンラインモードになります。
②-B 自動的にBTIコマンドを実行し、周囲のペリフェラル機器を探します。
※初期状態ではBTLVコマンドの設定値として「LINBLE-Z1」が設定されていますので、「LINBLE-Z1」の名前がついているペリフェラル機器だけが見つかります。
LINBLE-Z1(セントラル)は一番最初に見つかったペリフェラル機器に自動的に接続を試行します。
接続が成功したらオンラインモードになるとともに、BTLTコマンドの設定値に接続相手のペリフェラル機器のBDアドレスを設定します。(なので2回目からは②-Aの処理ルートになります。)
今回は、LINBLE-Z1をセントラルとして利用する場合の利用方法について説明しました。
各コマンドの詳細はユーザーマニュアルに記載していますので併せてご確認いただければと思います。