ここまでで、XBeeモジュールの概要、モデルの選び方、ポイント・トゥ・ポイントネットワークでデータの送受信をする方法について解説しました。もう少し複雑なネットワークの構築に挑戦してみましょう。
このチュートリアルでは、3つのXBeeモジュールを使用します。コーディネーター、ルーター、エンドデバイスを各1つずつ割り振ります。ここではコーディネーターにシリーズ3モジュールを、ルーターとエンドデバイスにシリーズ2のモジュールを使用しますが、それぞれどのシリーズのモジュールでも構いません。ただし、使用するモジュールによってファームウェアの書き込みと設定の中身が変わってきます。
ここでは、前回使用したATファームウェアではなく、メッシュネットワークを構築するために必要なAPIファームウェアを使用します。ネットワークを介したデータ通信にXBeeモジュールがどのように使用できるかを確認します。
APIファームウェアはZigBeeプロトコルを実装するように設計されており、データメッセージはデータパケットに収められます。つまり、メッセージはATファームウェアの時のような平文のテキストではなく、バイナリデータとして送信されます。
APIファームウェアやZigBeeプロトコルについて詳細に知らなくとも、これらを利用することはできます。ですが、データパケットがどのように形成されているか知っておくと、データを読み取ったり、デバッグを行ったりする際に役立ちます。
ZigBeeプロトコルやパケットのフォーマットについて、参考文献を記しておきます。詳しく知りたい場合は参照してください。
- ZigBee RFモジュール (Digiインターナショナル,2018)
https://www.digi.com/resources/documentation/digidocs/pdfs/90000976.pdf
XBeeモジュールのファームウェアの書き込み
まず、XCTUアプリケーションを使用してモジュールにファームウェアを書き込みます。先述の通り、ここではコーディネーターにシリーズ3モジュール、ルーターとエンドデバイスにはシリーズ2モジュールを使用します。
シリーズ3のモジュールをAPIモードに切り替えるには、「APIモード」という設定値を1に設定します。シリーズ2/2.5のモジュールではAPIモード用のファームウェアを選択して書き込みます。
XBeeモジュールの設定
新しく実験や製作を始める際には、XCTUアプリケーションでXBeeモジュールを工場出荷時のデフォルト設定にリセットすることをお勧めします。
「Default」ボタンをクリックして設定値を工場出荷時の状態に戻し、「書き込み」ボタンをクリックすればリセット完了です。または、ATコマンドモードで「ATRE」コマンドを送信しても同様にリセットできます。
宛先アドレスやPANアドレスも消えてしまいますが、APIモードではモジュールは自動的に接続され、コーディネーターは16ビットのアドレスを各モジュールに送信してくれるので、ATコマンドモードよりも簡単に設定できます。
続いて、ネットワークにデータを送信する、「送信要求パケット」というバイナリデータを作成します。
テストメッセージの形成
テストメッセージとして、送信要求パケット(送信要求フレームとも)を利用します。送信要求パケットは他のモジュールにデータを送信する際に使用するパケットで、表1のようにフォーマットが定められています。TCPパケットやMySQLクライアントプロトコル等を扱ったことがあれば理解しやすいかもしれません。
表1 送信要求パケット(※データはすべて16進数表記)
オフセット | データ例 | フィールド内容 |
0 | 7E | パケット区切り文字(ここから1つのパケット) |
1 | 00 10 | パケットデータの長さ |
3 | 10 | パケットタイプ:送信要求パケット |
4 | 01 | フレームID |
5 | XX XX XX XX XX XX XX XX | 送信先の64ビットアドレス |
13 | XX XX | 16ビット宛先アドレス |
15 | 00 | 最大ホップ数 |
16 | 00 | 送信オプション |
17 | 99 99 | 送信するデータ |
19 | BC | チェックサム |
注目すべきは、データの長さ、アドレス、送信するデータの部分です。ここでは、64ビットアドレスにはコーディネーターの64ビットアドレスを、16ビット宛先アドレスにはコーディネーターの16ビットアドレスを設定します。
表1の例では、「99 99(10進数で39321)」というデータを送信しています。
パケットデータの長さは、「長さ」の後のフレーム(パケットタイプ)から送信データまでのデータのバイト数を指定します。ここでは、1+1+8+2+1+1+2=16=16進数表記で10となります。
チェックサムは通信エラーの検出に使用するためのデータで、「長さ」に含まれているデータをすべて足し算して下位8ビットを取り出し、0xFF(10進数で255)から引き算します。送信元で計算した答えを送り、受信した側でも同じ計算をして、同じ答えとなれば正常に通信できている、異なる値になれば正常に通信できなかったと判断します。
一見するとややこしい計算ですが、この計算を手動で行うことはあまりありません。XBeeモジュールと通信する際に使用するライブラリがこのあたりの計算を自動で行い、パケットを生成してくれるからです。
また、パケットデータはXCTUアプリケーションのフレームジェネレータというツールを使って簡単に生成できます。XCTUでパケットを送信したいモジュールのターミナルを開いて、「Add New Frame」ボタンをクリックすると、フレームジェネレータが起動します。
「Add New Frame」ボタンをクリックすると、既存のパケットを編集するか、フレームジェネレータを使用して新しいパケットを追加するか選択するダイアログが表示されます。図2のように、「Create frame using “Frames Generator” tool」をクリックすると、新しいパケットを追加できます。
最初にパケットの種類を選択します。ここでは、送信要求パケット(0x10)です。ダイアログの内容は、選択したパケットの種類によって自動で切り替わります。図3に送信要求パケットの場合のダイアログの例を示します。
図3で、宛先アドレスを「00 00 00 00 00 00 FF FF」としています。これは、ブロードキャストアドレスと呼ばれる特殊なアドレスで、ネットワーク内のすべてのモジュールに同じ内容を送信する場合に使用します。
特定のモジュールにだけパケットを送りたい場合は、そのモジュールの64ビットアドレスを入力します。送信データ(RF data)には送信したいメッセージを入力します。ここでは「Hello」としました。XCTUアプリケーションは作成したフレームを保存してくれるので、いろいろなフレームを作成しておいて送信テストを行うことができます。
次回はいよいよネットワークテストの開始です。
コメントを残す