2つのXBeeモジュールのそれぞれに、コーディネーターとルーターの役割を割り当て、単純なポイント・トゥ・ポイントのネットワークを構成します。XBeeモジュールは両方ともATモードで設定します。透過モードを用いてテキストでメッセージをやり取りする、いわゆる「チャット」システムを作ります。
このチュートリアルでは、XBeeモジュール2つ、USBアダプタ2つと、PCを使用します。XBeeモジュールを2つともPCと接続して使いますが、PC1台に2つ接続しても、2台用意してそれぞれに接続をしても実験を進められます。
ここでは、シリーズ2(S2C)のモジュールとシリーズ3のモジュールを各1つ使用して、シリーズごとの作業方法について解説します。どちらか一方のシリーズで統一する場合は、他方の解説のパートは読み飛ばして構いません。両者で異なるのはファームウェアの書き込み方法で、モジュールの設定方法は両者同じです。
XBeeモジュールのファームウェアのロード
最初に、XCTUアプリケーションを使用して各モジュールのファームウェアを書き込みます。2シリーズ、3シリーズのそれぞれの書き込み手順を確認しましょう。
シリーズ2(S2/S2B)まで
S2Bまでのモジュールは、XBeeモジュールの3つの役割に合わせて、別々のファームウェアがあります。書き込むファームウェアによって、ネットワーク上での役割が決まる、ということです。
最初の2桁が役割、最後の2桁がバージョンを表しています。最初の2桁は役割に応じて、次のように割り当てられています。
- 20XX:コーディネーター、ATモード
- 21XX:コーディネーター、APIモード
- 22XX:ルーター、ATモード
- 23XX:ルーター、APIモード
- 28XX:エンドデバイス、ATモード
- 29XX:エンドデバイス、APIモード
シリーズ2(S2C)
一方、S2Cのファームウェアは、ネットワーク上での役割によってではなく、通信プロトコルによって分かれています。同じファームウェアを使用していても、設定によってネットワーク上での役割を変えることができる、ということです。
- 802.15.4 TH:Point to point(1対1), Point to Multi Pointに使用します
- DigiMesh 2.4 TH:DigiMeshプロトコルを使用します。
- ZIGBEE TH Reg :ZigBeeプロトコルを使用する場合に使用します。
コーディネーターにする場合は、CE (Coordinator Enable)をEnableにします。
ルーターにする場合は、CE (Coordinator Enable)をDisabledにします。
シリーズ3以降
シリーズ3のファームウェアは、S2Cと同様に、通信プロトコルによって分かれており、以下の3種類あります。
- Digi XBee3 802.15.4 TH:シリーズ2/2.5の802.15.4プロトコルを使用するモジュールとシリーズ3のモジュールを併用する場合に使用します。
- Digi XBee3 DigiMesh2.4:シリーズ2/2.5のDigiMeshプロトコルを使用するモジュールとシリーズ3のモジュールを併用する場合に使用します。
- Digi XBee3 ZigBee3.0 TH:ZigBeeプロトコルを使用する場合に使用します。
ここでは、ZigBeeプロトコルを使用するので、ZigBee対応のファームウェアを書き込みます。最新バージョンは100B(記事作成時)です。必ずしも最新バージョンにアップデートする必要はありませんが、新しいバージョンのファームウェアでは不具合が修正されていたり、新機能が追加されていたりすることがあります。特に理由がなければアップデートしておくと良いでしょう。
次に、モジュールの役割を決めます。これは、2つの設定値の組み合わせによって決定します。同じ内容を、表1に示します。
まず、「デバイスの役割(CE)」を設定し、ネットワークを形成する(設定値1)か、ネットワークに参加する(設定値0)かのいずれかとします。ネットワークを形成するのはコーディネーター、参加するのはルーターかエンドデバイスです。コーディネーターはこれで設定完了です。
ルーター、エンドデバイスの場合は、次に「スリープモード(SM)」を設定します。ルーターとして使用したいときは無効(設定値0)に、エンドデバイスとして使用したい場合は有効(設定値1)に設定します。
表1 シリーズ3の役割ごとの設定値
役割 | デバイスの役割(CE) | スリープモード(SM) |
コーディネーター | 1 | 0 |
ルーター | 0 | 0 |
エンドデバイス | 0 | 0以外 |
これらの設定をATモードで行うには、ATコマンド「ATCE」と「ATSM」コマンドを使用します。または、XCTU上でも設定できます。
シリーズ3モジュールはここでもう一つ、ATモードとAPIモードの設定を行います。
これは設定値「API Enable(AE)」によって設定します。ATモードの時は0に、APIモードの時は1に設定します。これも同様に、「ATAP」コマンドか、XCTU上で設定を行います。
先述の通り、各設定は変更した後に書き込み操作を行うまでモジュールには書き込まれません。書き込みボタンのクリックし忘れに注意してください。
コーディネーターのファームウェアの書き込み
XCTUアプリケーションを使用して、1つめのXBeeモジュールをATモードのコーディネーターとしてセットアップします。ここではシリーズ3のモジュールを使用します。
モジュールをPCに接続し、XCTUアプリケーション左上の「Add」もしくは「Discover」ボタンをクリックします。ダイアログに従ってモジュールをXCTUに追加し、設定を読み込みます。
次に、「Update」アイコンをクリックし、図1のようにダイアログでZigBeeファームウェアを選択します。選択したら、ダイアログの「Update」ボタンをクリックします。
書き込みが完了したら、先に示した表1にしたがって、デバイスの役割(CE)とスリープモード(SM)を設定します。AT/APIモードの設定は0とします。
ATコマンドとターミナルを使った設定変更の方法も示しておきます。XCTUアプリケーションのウインドウ右上のターミナルアイコンをクリックしてターミナル画面を開きます。
「Open」ボタンをクリックしてセッションを開始し、次のようにコマンドを送ります。
+++ ATCE 1 ATSM 0 ATAP 0 ATWR ATCN
ルーターのファームウェアの書き込み
続いて、2つめのXBeeモジュールをATモードのルーターとしてセットアップします。こちらはシリーズ2(S2C)のモジュールを使用します。
シリーズ3の場合と同様に、モジュールをPCに接続し、XCTUアプリケーション左上の「Add」もしくは「Discover」ボタンをクリックします。ダイアログに従ってモジュールをXCTUに追加し、設定を読み込みます。
次に、「Update」アイコンをクリックし、図2のようにダイアログでZIGBEE TH Regファームウェアを選択します。選択したら、ダイアログの「Update」ボタンをクリックします。
ファームウェアの書き込みができたら、各モジュールにお互いを通信相手として設定します。
アドレスの取得
XBeeモジュールは、データを送信するために宛先のモジュールの64ビットアドレス(MACアドレス)を使用することは先に述べた通りです。通信を開始するために、両者のアドレスを記録します。
XBeeモジュールをPCに接続している場合、XCTUアプリケーションから簡単にアドレスを確認できます。シリーズ2とシリーズ3のモジュールを接続した場合、図3のようにアドレスが表示されます。
ここでは、表示されているアドレスを、相手のモジュールの通信相手のアドレスとして設定します。
あるいは、ターミナルからATコマンド「ATSH」と「ATSL」を使用してモジュールのアドレスを確認するという方法でも構いません。
アドレスが記録できたら、コーディネーターからパラメータを設定していきましょう。
コーディネーターの設定
コーディネーター側のモジュールには、「宛先アドレスにルーターの64ビットアドレス」、「ネットワークのPANアドレス」と「ノードID」の3つを設定します。
宛先アドレスには先ほど調べたルーターのアドレスを設定します。
PANアドレスはネットワークを識別するためのアドレスです。同じネットワークに接続するモジュールにはすべて同じアドレスを設定しておきます。値は16進数で0000H~FFFFHの範囲で設定します。
ノードIDはモジュールの名前です。自由に名前を付けられますが、「COORDINATOR」としておくとここでは分かりやすいでしょう。
図4に設定の例を示します。
なお、ここではXCTUアプリケーションを使用していますが、ターミナルを使って設定しても構いません。その場合、「ATDH」「ATDL」「ATID」コマンドを使用することになります。
ルーターの設定
コーディネーター側のモジュール同様に、宛先アドレス、PANアドレスとノードIDの3つを設定します。
宛先アドレスには先ほど調べたコーディネーターのアドレスを設定します。
PANアドレスはコーディネーター側モジュールと同じ値を指定します。
ノードIDは「ROUTER」としておくと分かりやすいでしょう。
図5に設定の例を示します。
チャットを始める
以上で準備が整いました。
設定変更にターミナルを使用していた場合は、「ATCN」コマンドを送って10秒ほど待ち、透過モードに切り替えます。
モジュールに宛先アドレスを設定すると、モジュールはお互いに「チャット」のように通信を開始します。
内容を見るには、いずれかのモジュールをクリックして「ターミナル接続」を開きます。もう一方のモジュールをクリックして、そちらの「ターミナル接続」も開きます。
続いて、各ターミナルの「Open」ボタンをクリックします。一見何も通信が行われていないように見えますが、モジュールはお互いに相手からのデータを受信待ちしています。
コンソール左側のカラムに、キーボードから何か入力してみてください。
うまく設定できていれば、片方に入力したテキストがもう一方の画面に表示されます。お互いに送受信ができるか確認してみましょう。
図6に、結果の一例を示します。
このターミナル機能は、そのモジュールが「受信したデータ」を赤色、「送信したデータ」を青色で表示してくれるので、非常にわかりやすくなっています。
ここで、片方のモジュールをPCから取り外し、別のPC(XBeeモジュールに電源を供給できればなんでも可)に接続して同じ事を試してみましょう。コーディネーターとルーターのどちらを取り外しても構いません。
同じように動作したでしょうか。最初にPCから行った設定はXBeeモジュールの不揮発メモリ(電源を切っても内容が消えないメモリ)に記録されているので、一度設定してしまえばそれ以降毎回設定を書き込む必要がありません。
ポイント・トゥ・ポイント通信の使い道 センサネットワークを作るうえで、ポイント・トゥ・ポイントネットワークは果たしてどの程度実用に耐えるのでしょうか。 常に安定した電源が供給されて電波も十分に届くような用途にはポイント・トゥ・ポイントネットワークで容易にネットワークを形成できるでしょう。 一方で、どちらかのモジュールの電源が切れたり、電波が届かなくなったりしてしまうとネットワークが停止してしまいます。 XBeeモジュールを複数台使用する場合には、メッシュトポロジを使用しておくことで、一部のルーターと通信できなかった場合には別のルーターを経由して通信を行う、ということができます。 より安定したセンサネットワークを構築するならば、メッシュトポロジを使用するのが良いでしょう。 |
さらにステップアップ
チャットの例から発展して、3つめのXBeeモジュールをネットワークに追加してみましょう。
一例を示すと、新たに追加するモジュールをルーターに設定し、宛先アドレスをすでにあるルーターに設定します。
USBポートやPCが足りないときは XBeeネットワークの実験を行う際に、PCのUSBポートが足りない場合や、ポート同士が近すぎてアダプタを並べて挿せない場合、PCを2台3台と使用できない場合には、電源付きのUSBハブやモバイルバッテリーやスマホの充電器等を使用して動作させることもできます。 ただし、動作させられないハブやモバイルバッテリーもありますので、まずは手持ちがあれば試してみると良いでしょう。 ※モバイルバッテリー等は流れる電流の大小により充電中・充電完了を判断しています。XBeeモジュールは消費電流が(スマホ等と比べて)小さいため充電完了とみなして電流の供給を止められる可能性があります。充電電流の小さいワイヤレスイヤホンの充電に対応したモードのあるバッテリーならば使用可能なはずです。 |
コメントを残す