XBeeモジュールの使い方(ZDOコマンド:0x0031管理LQI要求)


1. ZDOとその目的と位置付け

 ZDO(Zigbee Device Object)はZigbeeデバイスの検出やネットワーク管理など、Zigbeeネットワークの管理及び検出機能を提供します。XBeeのZigbeeファームウェアを使用している場合は、ATコマンドを使用したり、XCTUのNetwok working modeでネットワーク状況を直接確認することができます。しかし、Zigbeeネットワーク内部にDigi社以外のZigbeeデバイスが含まれている場合は、XCTUは使用できません。ZDOはZigbeeプロトコルで運用されているデバイスの管理を行う機能を有しています。Zigbeeネットワークにおける各種管理機能(ノード探索、バインディング、ルーティング情報取得など)は、標準仕様に基づいてZDOによって提供されており、Zigbee環境での管理操作は原則としてZDOを通じて実行するのが正攻法です。

      図1 XBeeのZDOコマンド(0x0031)によるネットワーク管理の概要図 

 一般的なZDO管理機能には、ネットワーク更新、ルート及びネイバー検出、デバイス接続管理等があります。以下に、ZDOコマンド(クラスタID)の種類をまとめます。

               表1 ZDOコマンド(クラスタID)の種類

ZDOコマンド(クラスタID)内容
0x0001IEEEアドレス要求
0x0002ノード記述子要求
0x0004シンプル記述子要求
0x0005アクティブエンドポイント要求
0x0031管理LQI(Link Quality Indicator)要求
0x0032管理ルーティング要求
0x0034管理離脱要求
0x0036管理参加許可要求
0x0038管理ネットワーク更新要求

 XBeeのLQI(Link Quality Indicator)は、受信したデータパケットの品質を示す0~255の数値指標です。電波強度(RSSI)だけでなく信号対雑音比(SNR)やエラー率も考慮してリンクの信頼性を評価します。以下に、ZDOコマンドの実行方法について説明します。

2. ZDOコマンドの送信方法

・APIモードを使用し、明示的送信APIフレーム(フレームタイプ0x11)のペイロードとしてZDOコマンドを送信します。

・送信元エンドポイントと宛先エンドポイント、およびプロファイルIDを00に設定します(これらはZDO通信用に予約された値です)。

・ZDOコマンドをクラスタIDに設定します。(例:アクティブエンドポイント要求の場合は0x0005、管理LQI要求の場合は0x0031)。

ペイロードの最初のバイトはトランザクションシーケンス番号(任意の1バイト値)です。レスポンスでも同じ値が使用されます。

・残りのペイロードバイトはZDOコマンド構造と一致している必要があります。つまり、Zigbee仕様書通りにバイト列を作る必要があります。

例:Management LQI Request(0x0031)の場合

ZDO仕様では以下の表のように定義されています。

      表2  Management LQI Request(0x0031)の場合のペイロードバイトの構造

フィールドサイズ
Transaction Sequence Number1 byte
Start Index1 byte

 これは、Zigbeeが内部的に、APS層、ZDO層、NWK層で処理されます。ZDO層はZigbeeスタック内部の管理層であり、仕様上すべてリトルエンディアンと決められています。

(具定例)以下のEEEアドレスをZDOのペイロードで送信する場合

00 13 A2 00 42 3E CD 2C

ZDOペイロード内では:

2C CD 3E 42 00 A2 13 00

になります。

3. ZDOレスポンスの受信

 ZDOレスポンスを受信するには、AO(APIオプション)パラメータを1(明示的)又は3(明示的、ZDOパススルー)に設定します。これにより、ZDOレスポンスがシリアルポートに渡され、アプリケーションで処理できるようになります。

4. 具体例

 今回は、ZDOコマンド(クラスタID:0x0031)であるManagement LQI(Link Quality Indicator)要求を具体例として取り上げます。XBee3のZigbeeファームウェアを使用し、コーディネータ1台とルータ2台から成るネットワーク構成において、その動作を確認します。

                表3 XBee3のパラメータ設定

パラメータコーディネータルータ1&ルータ2
CE (Device Role)Form Network [1]Join Network [0]
AP (API Enable)API Mode Without Escape [1]API Mode Without Escape [1]
AO (API Output Mode)0x10x1

 コーディネータXBee3のXCTUのConsoles working modeからFrames Generator Toolを起動し、ルータ1に以下のフレームを送信します。

 Frame typeは0x11を選択します。ルータ1の64ビットアドレスを入力します。

Source endpointとDestination endpointはどちらも0x00に設定します。

Cluster IDを0x0031に設定します。

Profile IDを0x0000に設定します

RF data (HEX)はHEXのタブから0x0100を入力します。

図2 API Frames Generatorの入力画面

(完成したフレーム)

Explicit Addressing Command Frame (API 1)

7E 00 16 11 01 00 13 A2 00 42 3E CD 2C FF FE 00 00 00 31 00 00 00 00 01 00 90

Start delimiter: 7E

Length: 00 16 (22)

Frame type: 11 (Explicit Addressing Command Frame)

Frame ID: 01 (1)

64-bit dest. address: 00 13 A2 00 42 3E CD 2C

16-bit dest. address: FF FE

Source endpoint: 00

Dest. endpoint: 00

Cluster ID: 00 31

Profile ID: 00 00

Broadcast radius: 00 (0)

Transmit options: 00

RF data (HEX): 01 00

RF data (ASCII):

(送信フレームのポイント)

・Cluster ID: 00 31 → ZDOコマンド

・Profile ID: 00 00 → ZDOを指定

・RF data: 01 00 → 以下の設定

Transaction Sequence Number = 0x01

Start Index = 0x00

APIフレームが完成したら、送信を行うと以下の図のようにルータ1からフレームが返信されます。

            図3 コーディネータからAPIフレーム送受信画面

(ルータ1から返信されたフレーム)

Explicit RX Indicator (API 1)

7E 00 43 91 00 13 A2 00 42 3E CD 2C B3 D6 00 00 80 31 00 00 01 01 00 02 00 02 9F 48 E8 AC CA 12 BB 4A 06 75 1D 42 00 A2 13 00 00 00 24 02 00 45 9F 48 E8 AC CA 12 BB 4A 69 75 1D 42 00 A2 13 00 EE AF 25 02 0F 4B 3E

Start delimiter: 7E

Length: 00 43 (67)

Frame type: 91 (Explicit RX Indicator)

64-bit source address: 00 13 A2 00 42 3E CD 2C

16-bit source address: B3 D6

Source endpoint: 00

Destination endpoint: 00

Cluster ID: 80 31

Profile ID: 00 00

Receive options: 01

RF data (HEX): 01 00 02 00 02 9F 48 E8 AC CA 12 BB 4A 06 75 1D 42 00 A2 13 00 00 00 24 02 00 45 9F 48 E8 AC CA 12 BB 4A 69 75 1D 42 00 A2 13 00 EE AF 25 02 0F 4B

RF data (ASCII):

5. ルータ1から送信されたフレームの解釈

 XBee3のZigbeeファームウェアでZDOコマンドの一つであるZDO Management LQI Response(Cluster 0x0031)を送信し、その応答としてCluster 0x8031が返ってきています。そのフレームには、そのルータが認識している隣接ノード情報(LQIテーブル)が含まれています。

(ルータ1から送信されたフレームの重要部分)

Cluster ID: 80 31 → Management LQI Response(0x0031 のレスポンスは 0x8031 になる)

Profile ID: 00 00

(RFデータの構造)

01 00 02 00 02

9F 48 E8 AC CA 12 BB 4A 06 75 1D 42 00 A2 13 00 00 00 24 02 00 45

9F 48 E8 AC CA 12 BB 4A 69 75 1D 42 00 A2 13 00 EE AF 25 02 0F 4B

(ヘッダ部の解析)

01 00 02 00 02

                  表4 ヘッダ部の値と意味

意味
01Transaction Sequence Number
00Status (0=成功)
02Neighbor Table Entries(全体数)
00Start Index
02今回返すエントリ数

このヘッダから、ルータ1は隣接ノードを2台持っていることが分かります。

 次いで、各ノードの情報が続きます。1ノードの情報を記述するエントリの構造は定義されており、1エントリあたり以下の22バイトで構成されます。

Extended PAN ID (8)

Extended Address (8)

Network Address (2)

Device Type/Flags (1)

Permit Joining (1)

Depth (1)

LQI (1)

これを踏まえたうえで、1つ目の隣接ノードの情報を解釈します。

              表5 1つ目の隣接ノードの情報を解釈

RFデータ意味
9F 48 E8 AC CA 12 BB 4AExtended PAN ID
06 75 1D 42 00 A2 13 0064bit address
00 00Network address
04Device type flags
02Permit joining
00Depth(ツリー構造)
45LQI

 このフレームを解釈すると、Network addressが0x0000であることから、このノードがコーディネータであり、LQIは0x45(69)であることが分かります。

2つ目の隣接ノードの情報を解釈します。

               表6 2つ目の隣接ノードの情報を解釈

RFデータ意味
9F 48 E8 AC CA 12 BB 4AExtended PAN ID
69 75 1D 42 00 A2 13 0064bit address
EE AFNetwork address
25Device type flags
02Permit joining
0FDepth(ツリー構造)
4BLQI

このフレームを解釈すると、Network addressが0xEEAFであり、LQIは0x4B (75)であることが分かります。

6. まとめ

 ZDO(Zigbee Device Object)はZigbeeデバイスの検出やネットワーク管理など、Zigbeeネットワークの管理及び検出機能です。今回は、ZDOコマンド(クラスタID:0x0031)であるManagement LQI(Link Quality Indicator)要求を具体例として取り上げました。XBee3のZigbeeファームウェアを使用し、コーディネータからルータへAPIフレームによりZDOコマンド(クラスタID:0x0031)を送信し、ルータから送信されたフレームを解析しました。その結果、APIフレームのRFデータには、隣接したノードの64ビットアドレスやLQIの値等の情報が含まれていることを確認しました。