いよいよハードウェアの使用も決まり,あと2週間ほどでリリースにこぎつけるため,急ピッチで作業を進めています.
現在問題になっていることのひとつに,コントローラ(パソコン)から各掲示板へ情報を送る方法です.これまではコントローラと掲示板の間は1対1による通信をしていましたが,これからは1対多の通信をすることになります.この場合,これまで用いていたATコマンドモードによる制御より,APIモードの方が有利です.たとえば,ATコマンドの場合,通信先を変更するにはいちいちATコマンドを入力できる状態にしなければならず,それにはおよそ1秒間の時間を要します.APIモードの場合,そのようなことをせずとも通信を行えます.
しかし,APIモードの場合これまでのATコマンドモードと異なり少し複雑です.今回の目標は,コントローラ(パソコン)にUSB-Serialで接続したXBeeをCoordinatorに,掲示板に接続したXBeeをRouterにし,CoordinatorからRouterへ通信を行うことです.ここでは,そのために行ったことを備忘録的に書いておきます.
まず,今回の環境について記述します.下に示す,Digi社製 XBee Pro S2B XBP24BZ7を4個使います.
- ZIGBEE COORDINATOR API Ver.21A7
- ZIGBEE ROUTER API Ver.23A7
次に,各ノードの諸情報を示します.
Coordinator | Router1 | Router2 | Router3 | |
Networking/ID - PAN ID | 61 | 61 | 61 | 61 |
Addressing/SH - Serial Number High | 0013A200 | 0013A200 | 0013A200 | 0013A200 |
Addressing/SL - Serial Number Low | 409E2C86 | 40666209 | 40926E69 | 40666204 |
Addressing/DH - Destination Address High | 0 | 0 | 0 | 0 |
Addressing/DL - Destination Address Low | FFFF | 0 | 0 | 0 |
Addressing/MY - 16-bit Network Address | 0 | 3425 | 4584 | 47CE |
Serial Interfacing/AP - API Enable | 2 | 2 | 2 | 2 |
このような条件のもと,CoordinatorからRouter1へデータ(ここでは「T」(0x54)を送る場合,次のようにします.
7E 00 0F 10 01 00 7D 33 A2 00 40 66 62 09 FF FE 00 00 54 D7
上記の情報をRouter1に送ると,Router1は次の情報を受信します.
7E 00 0D 90 00 7D 33 A2 00 40 9E 2C 86 00 00 02 54 D4
次に,CoordinatorからRouter2へデータ(ここでは「T」(0x54)を送る場合,次のようにします.
7E 00 0F 10 01 00 7D 33 A2 00 40 92 6E 69 FF FE 00 00 54 3F
上記の情報をRouter2に送ると,Router2では次の情報を受信します.
7E 00 0D 90 00 7D 33 A2 00 40 9E 2C 86 00 00 01 54 D5
次にCoordinatorからRouter1およびRouter2へBroadcastで送る場合には次のようになります.
7E 00 0F 10 01 00 00 00 00 00 00 FF FF FF FE 00 00 54 9F
上記の情報をRouterに送ると,Router1およびRouter2では次の情報を受信します.
7E 00 0D 90 00 7D 33 A2 00 40 9E 2C 86 00 00 02 54 D4