4 モジュール機能実装手順
この章では、本モジュールを使用したZigBee®デバイスに、エンドデバイス、ルータ、コーディネータの各機能を実装する際の手順の概要について記載しています。また、本モジュールのデフォルトの機能である透過伝送モードの使用手順について記載しています。説明では外部MCUからUARTシリアルポート経由で入力するHEXコマンド例を用いています。個別のコマンド仕様については第6章ユーザ命令セットの該当箇所を参照してください。この章の実装手順に沿った具体的なアプリケーション実装については、サンプルコードを参照してください。
4.1 モジュールの準備#
ここでは、本モジュールが工場出荷時設定(初期化済み)の状態から開始する手順を記載しています。各手順を実行する際は、UARTシリアルポートに対してHEXコマンドを入力する外部MCUを接続してください。本モジュールの各種設定が変更されている場合は、6.1.4項 モジュールをリセットする/工場出荷時の設定に戻す(コマンドコード:0x04)に記載されているHEXコマンドで工場出荷時の設定に戻した後、各手順を実行してください。
4.2 モジュール共通のネットワーク設定#
本モジュールはZigBee®3.0規格に基づく他のデバイスとの通信互換性を有しています。本モジュール同士、または他のZigBee®デバイスと相互に通信するには、個々のデバイスを同じPAN(Personal Area Network)に所属させる必要があります。ここでは、各デバイスタイプ(エンドデバイス、ルータ、コーディネータ)で共通のネットワーク設定の手順について説明します。
- デバイスタイプの設定
ネットワーク内での役割によって本モジュールを以下のデバイスタイプのいずれかを指定します。HEXコマンドの実行例を以下に記載します。
※6.1.5項 デバイスタイプの設定(コマンドコード:0x05)参照
コーディネータの場合:
55 04 00 05 00 05ルータの場合:
55 04 00 05 01 04スリープエンドデバイスの場合:
55 04 00 05 03 06非スリープ(常時稼働)エンドデバイスの場合:
55 04 00 05 02 07設定を反映するためには、本モジュールのリセット(再起動)を必要とするため、リセット操作を実行してください。リセット操作を実行するHEXコマンドの実行例を記載します。
※6.1.14項 モジュールをリセットする/工場出荷時の設定に戻す(コマンドコード:0x04)参照
55 07 00 04 00 FF FF 00 04- PAN IDの設定
接続するネットワークのPAN IDを設定します。この設定はデフォルトからの変更が必要な場合のみ実施してください。本モジュールをコーディネータとした場合は、コーディネータ自身が作成するネットワークのPAN IDです。デフォルトでは16ビットの範囲(0xFFFFは除く)でランダムな値が自動的に決定されますが、近距離に複数のZigBee®ネットワークが存在する場合に重複を避けるなどの目的で、手動で設定することも可能です。本モジュールをルータまたはエンドデバイスとした場合、デフォルトからの変更の必要性は、ほとんどのケースでありませんが、近距離に複数のZigBee®ネットワークが存在する場合、参加対象ネットワークの誤選択を防止するために特定のPAN IDを指定することも可能です。例としてPAN IDを0x1111に指定するHEXコマンドの実行例を以下に記載します。
※6.1.8項 PAN IDの設定(コマンドコード:0x08)参照
55 05 00 08 11 11 08- チャンネルリストの設定
通信に使用するチャンネルの候補リストを設定します。この設定はデフォルトからの変更が必要な場合のみ実施してください。2.4GHz帯域には16のチャンネル(11〜26)があり、本モジュールをコーディネータとした場合、デフォルトでは、チャンネル番号(11,14,15,19,20,24,25)のいずれかで、本モジュールの通信可能範囲で干渉しないチャンネルを検索して自動選択されます。ただ、Wi-Fi®やBluetooth®など他の2.4GHz帯の電波を使用する機器が存在し、電波が干渉する可能性がある場合、使用チャンネルを固定化して干渉を避ける設定を恣意的に行うことも可能です。その場合は候補リストに1つのみチャンネル番号のみを指定してください。また、本モジュールをルータまたはエンドデバイスとした場合は、チャンネルの候補リストに参加対象のネットワークの使用チャンネルが含まれている必要があります。そのため、他のZigBee®製品との接続性をより担保するためには、全てのチャンネル番号を候補リストに指定することを推奨します。例として、チャンネル番号を17( = 0x11)のみ指定するHEXコマンドの実行例を以下に記載します。
※6.1.6項 チャンネルの照会と使用候補チャンネルの指定(コマンドコード:0x06)参照
55 05 00 06 02 11 15デバイスタイプ、PAN ID、チャンネルリストの値は、設定実行時、本モジュールの内蔵FLASHに保存されます。
4.3 エンドデバイスの実装手順#
本モジュールをエンドデバイスとして機能を実装する手順を説明します。ここでは一例としてZigBee®製品で広く用いられているZigBee® HA(Home Automation)プロファイルに適合するエンドデバイスを実装します。この例ではZigBee® ゲートウェイ/ハブをコーディネータとして使用し、本モジュールをゲートウェイ/ハブとの間でZigBee®通信を行うエンドデバイスとしてアプリケーションを実装します。概略図を図 15に示します。
図 15 エンドデバイス構成概略図
本モジュールに対するアプリケーション実装は、アプリケーションが提供する機能(クラスタ)、各クラスタ内で使用される属性(データの種類)などの識別情報をネットワークに参加する前に設定する必要があります。ZigBee® Cluster Library(ZCL)の仕様に従い、デバイスID、プロファイルID、クラスタID、属性IDなどを順次設定します。指定するクラスタID、属性IDおよび属性値については、ZigBee® Cluster Library仕様書※を参照してください。
※https://zigbeealliance.org/wp-content/uploads/2021/10/07-5123-08-Zigbee-Cluster-Library.pdf
一般的にZigBee® ゲートウェイ/ハブは、主に専用の管理アプリからの操作によって、近くに存在するZigBee®デバイスを検出し、ネットワークに追加する機能が備わっています。ZigBee® ゲートウェイ/ハブがデバイスの検出動作の際にデバイスの種別、機能などの情報を取得しますが、この基本的なデバイス情報はBasicクラスタ(クラスタID=0x0000)にて定義されています。作成するアプリケーションにBasicクラスタの属性が未設定の状態では、Amazon Echo Hubなどの一部のZigBee® ゲートウェイ/ハブでデバイス検出がされないことがあるため、Basicクラスタの属性を含めて設定を実施することを推奨します。以下に全体的な設定の順序を示します。
ネットワーク設定
※4.2節 モジュール共通のネットワーク設定を実施してください。アプリケーションエンドポイントの設定
第3章のZigBee®概要での説明のとおり、本モジュールと他のZigBee®機器との通信インタフェースとしてエンドポイントの設定をします。
ここではZigBee® HAのOn/Offスイッチを例に説明をしています。
① ポートの作成
本モジュールにおけるエンドポイントと同義の概念である「ポート」を作成します。一つのモジュールには複数のポートを作成可能で、各ポートに別々のアプリケーションの動作定義を行うことが可能です。本モジュールがZigBee®ゲートウェイ/ハブとの通信を行うためには、 ZCL仕様に基づいて入力クラスタおよび出力クラスタを設定する必要があります。
ここでは入力クラスタをクラスタID=0x0000(Basic)、クラスタID=0x0003(Identify)およびクラスタID=0x0006(On/Off)と定義し、出力クラスタをなしと定義するOn/Offスイッチアプリケーションのポートを作成します。この定義を行うHEXコマンド実行例を記載します。
※6.1.23項 ZCLポートの作成(コマンドコード:0x40)参照
55 11 00 40 0D 01 04 01 00 01 02 00 00 03 00 06 00 00 4E② ポートに属性を追加
作成したポートに対し、アプリケーションのパラメータ変数である「属性」を追加します。属性値のデータ型は、表 15 ZCL属性データ型に定義された値(例:uint16の場合は0x21)を入力する必要があります。また、同一のクラスタIDに属する属性値の追加コマンドは連続して実行する必要があり、異なるクラスタIDの属性値の追加の前にはクラスタの区切りを示す特別な属性ID(0xFFFD)の属性追加を実行する必要があります。
ここではクラスタID=0x0000、0x0003、0x0006の各クラスタの属性を追加するHEXコマンド実行例を記載します。
※6.1.24項 ポートに属性の追加(コマンドコード:0x41)参照
55 0C 00 41 00 00 00 00 00 00 20 01 00 60 55 0C 00 41 00 00 00 00 01 00 20 01 00 61 55 0C 00 41 00 00 00 00 02 00 20 01 00 62 55 0C 00 41 00 00 00 00 03 00 20 01 00 63 55 0C 00 41 00 00 00 00 04 00 42 01 00 06 55 0C 00 41 00 00 00 00 05 00 42 01 00 07 55 0C 00 41 00 00 00 00 06 00 42 01 00 04 55 0C 00 41 00 00 00 00 07 00 30 01 00 77 55 0C 00 41 00 00 00 00 FD FF 21 01 00 63 55 0C 00 41 03 00 00 00 00 00 21 03 00 60 55 0C 00 41 03 00 00 00 FD FF 21 01 00 60 55 0C 00 41 06 00 00 00 00 00 10 05 00 52 55 0C 00 41 06 00 00 00 FD FF 21 01 00 65 ③ ポートと属性設定の保存
ここまでのポートと属性に関する設定内容は、そのままでは本モジュールの電源を切ると失われるため、ポートと属性設定を本モジュールの内蔵FLASHに保存します。HEXコマンド実行例を記載します。
※6.1.25項 ポートと属性設定の保存(コマンドコード:0x42)参照
55 03 00 42 42ここまでのポートと属性に関する設定を反映し機能させるためには、本モジュールのリセット(再起動)が必要です。リセット操作を実行します。HEXコマンドの実行例を記載します。
55 07 00 04 00 FF FF 00 04- ネットワーク参加
エンドデバイスとして設定した本モジュールをコーディネータデバイスの作成したネットワークに参加させます。コーディネータ側でデバイス参加許可の状態にする操作を実行した後、本モジュールに対してネットワーク接続を開始する操作を実行します。ネットワークへ接続するためのHEXコマンドの実行例を記載します。
※6.1.2項 ネットワークを開く/ネットワーク接続の開始(コマンドコード:0x02)参照
55 03 00 02 02- アプリケーション動作の実装
エンドデバイスのアプリケーション動作は、本モジュールがネットワーク内の他のノードに対しフレームの送信、他のノードからのフレームの受信処理を、ユーザが外部MCUに実装することで、任意の処理動作が可能です。ZigBee®の通信処理は、本モジュールが全て自動的に行い、任意のユーザ定義アプリケーションの処理と、本モジュールとの送受信処理と、ペイロードの作成を外部MCU上に実装してください。基本的な必要とする処理の手順として、送受信の方向から以下の2つに大別されます。
① エンドデバイスから他ノードへの属性値の通知
② 他ノードからの制御命令への対応
各々について、エンドデバイスとコーディネータが1対1で通信する場合を例に説明します。
① 属性値の通知
On/Offスイッチの現在の状態が属性値として定義されているエンドデバイスからZigBee®ゲートウェイ/ハブ(コーディネータ)へ情報を通知します(図 16)。本モジュールに作成したポートに対し属性値の書き込み処理を実行すると、3.1.6項に記載されているZCL仕様に基づくフレームがコーディネータ宛てに(ZigBee®の通信プロトコルに従って)自動的に送信されます。
図 16 コーディネータへの属性値の通知
属性値の書き込み処理を実行するHEXコマンドの実行例を記載します。
※6.1.26項 属性値の照会/設定(コマンドコード:0x43)参照
On(=0x01)の書き込み:
55 0D 00 43 01 00 00 06 00 00 00 00 00 01 45Off(=0x00)の書き込み:
55 0D 00 43 01 00 00 06 00 00 00 00 00 00 44② 制御コマンド受信時の動作実装
外部MCUを含めたエンドデバイスに対して、On/OffスイッチをOn、あるいはOffにする制御をZigBee®ゲートウェイ/ハブから操作可能とするためには、エンドデバイス側でその制御命令のフレームを受信した時の処理を行う必要があります。図 17にて示す方向にZigBee®ゲートウェイ/ハブが制御命令を送信した場合、本モジュールが受信したフレームは5.2節 コマンドとメッセージの種類に記載されている非同期メッセージとして外部MCUへ送信されます。
図 17 コーディネータからの制御命令
外部MCU側で受信するHEXコマンド(非同期メッセージ)例を記載します。
※6.4.10項 制御コマンドの送信/受信(コマンドコード:0x0F)参照
Onに設定:
55 0F 82 0F 20 00 00 01 2A 00 06 00 00 00 DB 01 5AOffに設定:
55 0F 82 0F 20 00 00 01 39 00 06 00 00 00 D5 00 46受信したOn/Offの各々の制御命令に対し、外部MCUにて属性値の書き込み処理を実装することで、命令の結果を即時にZigBee®ゲートウェイ/ハブに通知することができます。
4.4 ルータの実装手順#
本モジュールをルータとして機能を実装する手順を説明します。ルータは他のノードが送受信するフレームを中継する機能を持ちますが、この動作は本モジュールのファームウェアに組み込まれたルーティング処理によって自動的に行われるため、特別なソフトウェアの実装は不要です。また、ルータにはエンドデバイスと同様にアプリケーションを実装することも可能です。
以下に全体的な設定の順序を示します。
ネットワーク設定
※4.2節 モジュール共通のネットワーク設定を実施アプリケーションエンドポイントの設定(任意)
※ルータにアプリケーションを実装する場合、4.3節 エンドデバイスの実装手順の2. アプリケーションエンドポイントの設定を実施ネットワークに参加
本モジュールをコーディネータが作成したネットワークに参加させます。コーディネータ側でデバイス参加許可の状態にする操作を実行した後、本モジュールに対してネットワーク接続を開始する操作を実行します。HEXコマンドの実行例を記載します。
55 03 00 02 02ここまでの手順によって、ルータ動作が実現でき、ネットワークへの参加後に自動的にフレームのルーティング処理が開始されます。
- アプリケーション動作の実装(任意)
※ルータにアプリケーションを実装する場合、4.3節 エンドデバイスの実装手順の4. アプリケーション動作の実装を実施
4.5 コーディネータの実装手順#
本モジュールをコーディネータとして機能を実装する手順を説明します。コーディネータは、他のノードがネットワークに参加する際にショートアドレスの配布、使用チャンネルの決定、暗号化ネットワークキーの交換などの機能を持ちますが、この動作は本モジュールのファームウェアに組み込まれた処理によって自動的に行われるため、特別なソフトウェアの実装は不要です。一般的には、コーディネータがネットワーク形成後、参加しているノード情報を管理など外部MCUにて動作の実装が必要な処理が存在します。また、コーディネータにはエンドデバイスと同様にアプリケーションを実装することも可能です。以下に全体的な設定の順序を示します。
ネットワーク設定
※4.2節 モジュール共通のネットワーク設定を実施アプリケーションエンドポイントの設定(任意)
※コーディネータにアプリケーションを実装する場合、4.3節 エンドデバイスの実装手順の2. アプリケーションエンドポイントの設定を実施ネットワークを開始
本モジュールをコーディネータとしてネットワークを作成します。HEXコマンドの実行例を記載します。
55 03 00 02 02ここまでの手順によって、PAN IDが一意に定められたコーディネータ動作が実現でき、ネットワークが作成され自動的にコーディネータとしての処理が開始されます。
アプリケーション動作の実装(任意)
※コーディネータにアプリケーションを実装する場合、4.3節 エンドデバイスの実装手順の4. アプリケーション動作の実装を実施コーディネータ動作の実装
コーディネータは、作成したネットワークに所属する全てのノードを管理する役割を担っています。ここでは例として、ネットワーク内のエンドデバイスが収集したセンサー等のデータをコーディネータにて集約し、(クラウドサーバなど)外部のシステムへ送信する、という動作を実現する方法を説明します。本モジュール内で自動的に行われる処理とは別に外部MCU側で実装が必要な処理を以下に列挙し、各々について詳説します。
① 新規ノードのネットワーク許可のオン/オフ
② ノードのネットワーク参加/離脱状態の管理
③ ノードのアプリケーション情報の収集
④ ノードへの制御命令を送信
⑤ ノードからの情報通知を受信
⑥ ノードの死活監視
⑦ 収集したノード情報を別システムに転送
① 新規ノードのネットワーク許可のオン/オフ
作成したネットワークに対し新規ノードの参加許可をオンにする場合、ネットワーク接続の開始コマンドを実行します。このコマンドの実行時点から180秒間、新規ノードがネットワークに参加ができるようになります。この時間が経過するとネットワーク参加許可が自動的にオフになります。HEXコマンドの実行例を記載します。
※6.1.2項 ネットワークを開く/ネットワーク接続の開始(コマンドコード:0x02)参照
55 03 00 02 02作成したネットワークに対し明示的に新規ノードの参加許可をオフにする場合、ネットワーク接続の停止コマンドを実行します。このコマンドを実行すると新規ノードがネットワークに参加できなくなります。HEXコマンドの実行例を記載します。
※6.1.3項 ネットワークをオフにする/ネットワーク接続の停止(コマンドコード:0x03)参照
55 03 00 03 03② ノードのネットワーク参加、離脱状態の管理
ネットワークに参加済みの各ノードのショートアドレスとMACアドレスを外部MCUで記憶する必要があります。ZigBee®プロトコルにおいて、ネットワーク内でユニークなショートアドレス(3.3.1項 アドレスとエンドポイント参照)が通信の宛先アドレスとして使用されるため、コーディネータが特定のノードと通信するために必要な情報となります。また、各ノードが現在ネットワークに参加している状態か、ネットワークから離脱している状態かを外部MCUで記憶することで、通信不可能な状態の判断が容易になります。
ここでは、ノードの状態管理に使用可能なHEXコマンドの通知メッセージを説明します。これは、コーディネータとして動作している本モジュールのUARTシリアルから非同期メッージとして通知されます。同様に、ノードがネットワーク参加時、またはショートアドレスが更新された時に以下の通知メッセージが受信されます。
※6.2.5項 モジュールのショートアドレス更新の通知(コマンドコード:0x04)参照
55 0E 80 04 C6 DE E2 08 00 4B 12 00 1A 47 02 70この通知メッセージを受信したとき、外部MCUにおいてネットワークノードの管理情報に新規ノードの追加、もしくは既存ノードのショートアドレス更新処理を行ってください。
また、ノードがネットワークから意図的に離脱した場合、コーディネータと接続している外部MCUは以下の通知メッセージを受信します。
※無線通信の状況によって受信できない可能性があることは考慮する必要があります。
※1.1.1項 参照
55 0B 80 06 51 20 9F 0C 00 4B 12 00 3Dこの通知メッセージを受信したとき、外部MCUにおいてノードの離脱のための手続きを実施します。一般的には、ネットワークノードの管理情報から既存ノードの削除処理を行ってください。
③ ノードのアプリケーション情報の収集
各ノードのエンドポイントに設定されているアプリケーションの情報を取得します。各ノードの機器分類(センサー、スイッチなど)、機能(On/Off操作など)の情報を外部MCUにおいて記憶することで、ZigBee®プロトコルの通信フレームを適切に解析、生成することが可能になります。
各ノードのアプリケーションは、ZigBee®では1つのエンドポイント(本モジュールでは「ポート」という名称)に対して1つのアプリケーションが対応するため、
- ノードがサポートするポート番号の照会
- ポート番号ごとにサポートするクラスタ情報を照会
を行うことで、コーディネータは各ノードがサポートしているアプリケーション、およびその機能の情報を取得できます。
ネットワーク内の特定ノードに対し、サポートするポート番号の照会を行います。対象ノードのショートアドレスを入力に含めHEXコマンドを実行すると、結果を非同期メッセージとして受信できます。
※6.3.4項 ターゲットデバイスがサポートするポート番号の照会(コマンドコード:0x05)参照
入力コマンド:
55 05 01 05 3B B1 8E応答メッセージ:
55 09 80 04 3B B1 0A 00 01 01 04この例では、ショートアドレスが0xB13Bのノードがサポートするポート数は1、ポート番号は1を表します。
次に、ネットワーク内の特定ノードのポート番号に対し、サポートするクラスタの照会を行います。対象ノードのショートアドレスを入力に含め、HEXコマンドを実行すると、結果を非同期メッセージとして受信できます。
※6.3.3項 ターゲットデバイスがサポートするクラスタの照会(コマンドコード:0x04)参照
入力コマンド:
55 06 01 04 3B B1 01 8E応答メッセージ:
55 1D 81 04 3B B1 0C 00 01 04 01 00 01 00 06 00 00 01 00 02 00 03 00 04 00 08 FC 03 00 00 03 00 08 FC A5この例では、ショートアドレスが0xB13Bのノードにおいてポート番号1のポートがサポートするクラスタは、入力クラスタ数が6で、クラスタIDが0x0000、0x0001、0x0002、0x0003、0x0004、0xFC08、出力クラスタ数が3で、クラスタIDが0x0000、0x0003、0xFC08を表します。
サポートするポート番号が他にも存在する場合、同様にHEXコマンドを実行して結果を取得します。
④ ノードへの制御命令の送信
各ノードのアプリケーションエンドポイントに対し、アプリケーションで定義されている制御命令を送信します。制御命令のコマンドIDおよびパラメータは、ZCL仕様に基づいて実装されている必要があります。
例としてノードのアプリケーションがZigBee® HAに準拠したOn/Offスイッチである場合、コーディネータからノードへの制御コマンドには、Off(コマンドID=0x00)、On(コマンドID=0x01)、On/Offトグル(コマンドID=0x02)の3種類の制御命令が存在します。実行するHEXコマンド例は次のとおりです。
※6.4.10項 制御コマンドの送信/受信(コマンドコード:0x0F)参照
Offに設定(コマンドID=0x00):
55 0F 02 0F 3B B1 01 B4 00 06 00 00 00 00 00 34Onに設定(コマンドID=0x01):
55 0F 02 0F 3B B1 01 B4 00 06 00 00 00 00 01 35On/Offトグル設定(コマンドID=0x02):
55 0F 02 0F 3B B1 01 B4 00 06 00 00 00 00 02 36制御コマンドの実行時、「送信確認メッセージ」が本モジュールのUARTシリアルから非同期メッセージとして通知されます。宛先ノードがネットワークから切断されているなどの理由で、フレーム送信が失敗した場合、「送信確認メッセージ」の最後のステータスコードで送信結果を判断可能です。以下に制御コマンドの送信が成功および失敗(ステータスコードが0xE9)した場合の例を示します。
送信が成功:
55 0A 8F 02 00 3B B1 01 B4 00 00 B2送信が失敗:
55 0A 8F 02 00 3B B1 01 B4 00 E9 5B外部MCUにおいて、送信の失敗時は再試行、もしくは、エラーとして処理するなどの動作を実装することを推奨します。
⑤ ノードからの情報通知を受信
ここでは、ノードに接続されているセンサー等のデータ(アプリケーションの属性値)の取得に使用可能なHEXコマンドの通知メッセージを説明します。これは、コーディネータとして動作している本モジュールのUARTシリアルから非同期メッセージとして通知されます。
ノードのアプリケーション側で定められた時間毎、あるいは属性値が更新されたときなどに以下の通知メッセージがUARTシリアルから非同期メッセージとして通知されます。
※6.4.8項 属性のアクティブレポートの受信(コマンドコード:0x0A)参照
55 17 82 0A 00 F9 D0 01 02 01 08 FC 00 20 CE 02 03 00 10 00 04 00 20 00 8Cこの通知メッセージを受信した時、外部MCUにおいて個々のノードの属性値データの最新情報の更新、記録を行ってください。
⑥ ノードの死活監視
ネットワークに参加済みの各ノードについて、現在ネットワークに参加している、もしくはネットワークから離脱しているという状態を、コーディネータの外部MCUが定期的に確認する処理を実装します。
②ノードのネットワーク参加/離脱状態の管理の実装では、正常に通知メッセージが受信できた場合はネットワーク参加/離脱状態を更新可能ですが、一般的に無線通信は宛先に届く保証は無く、またノードの電源停止などにおける離脱の際には、通知メッセージが送信されない場合もあり、現在の状態を正しく更新管理できなくなります。そのため、現在の状態管理を適切に行うために、コーディネータの外部MCU側で定期的にノードの状態を監視する必要があります。典型的な実装の例としては、以下の方法が挙げられます。
- ノードからの属性通知のメッセージを受信した最新時刻を記憶し、現在時刻と比較
※ただし、ノード側で一定時間未満での属性通知の送信が条件 - ノードに対して応答を要求するZCLコマンドを送信し、応答の有無を確認
※ただし、ノードがスリープエンドデバイスの場合はスリープからの復帰時間の考慮が必要
1つ目の方法は、⑤ノードからの情報通知を受信での通知メッセージの有無をそのまま死活監視として利用します。ノード側からコーディネータに対して必ず一定時間間隔で通知メッセージを送信するという動作が保証される条件において、コーディネータでの通知の受信時刻が一定時間以上(例:正常時の受信間隔の2倍以上)空いた場合、そのノードはネットワークに接続できていない状態と判断することが可能です。
2つ目の方法は、6.4節 デバイス状態管理とデバイス制御(ZCLコマンド)にて記載しているZCLコマンドの結果を死活監視に利用します。コーディネータからノードに対し、属性値の読み取りなどのHEXコマンドを実行すると、宛先のノードからの応答が本モジュールのUARTシリアルから通知されます。実行するためには、事前に各ノードについてアプリケーションが実装されているポート番号や属性値の情報を取得しておく必要があります。以下にHEXコマンドの実行例を記載します。
※6.4.2項 デバイスのプロパティの照会(コマンドコード:0x00)参照
入力コマンド:
55 11 02 00 00 52 13 01 32 00 08 FC 00 20 00 01 00 00 2F入力コマンドの実行後に、結果を非同期メッセージとして受信します。
応答メッセージ:
55 17 82 00 00 52 13 01 32 01 08 FC 00 20 FF 01 00 00 00 23 00 C2 01 00 3B送信が失敗した場合、上記の応答メッセージは受信されません。また、④ノードへの制御命令の送信にて記載している「送信確認メッセージ」のステータスコードもエラー結果になります。応答メッセージの受信の有無および「送信確認メッセージ」の結果によって、ノードがネットワークに接続できていない状態と判断することが可能です。
コーディネータの外部MCU側では、ネットワークに接続できていないと判断したノードについては、アプリケーションの目的に応じて適切な処理を実装します。例として、無線通信のトラフィック削減のために死活監視の頻度を下げる、あるいは、コーディネータが管理する対象から外す、などの方法があります。
⑦ 収集したノード情報を別システムへ転送
コーディネータが収集し、外部MCUで記憶・保存しているノード情報をクラウドサーバなどの別システムに任意の方法で転送します。この実装は、本モジュールの機能とは完全に切り離されているため、アプリケーションの作成者が用途によって動作を設計することになります。典型的な実装の例としては、以下に示す様にデータ形式と送受信のルールを決定し、各々の動作を任意のプログラミング言語等で実装します。
- 個別のノードごとのデータをCSVやJSONなどのデータ送信・共有形式に変換
- 別システムへのアップロード間隔、ルールの決定
例) 一定時間毎に送信する、データの更新が発生した時点で直ちに送信するなど - HTTP、MQTTなどのIP通信プロトコルでサーバへ送信
- サーバ側で受信したデータを用いてグラフ化や、インテリジェントな動作決定など
これらの①~⑦に示した手順により、本モジュールを用いて基本的なZigBee®のコーディネータ機能とゲートウェイ/ハブ機能を持つアプリケーションが実現できます。
4.6 透過伝送機能#
本モジュールは、外部MCUからUARTシリアルピンに対して直接入出力したバイト列を、ZigBee®のフレームペイロードとして透過的に伝送できる透過伝送機能を提供します。この機能を使用することによって、ZCLポートの作成などのエンドポイント設定を省略し、本モジュール同士での任意のデータ列の送受信を簡便に行うことが可能です。
この機能は、モジュール設定等で使用するHEXコマンドモードから透過伝送モードへ切り替えることで使用できます。切り替え後、UARTシリアルへの入力データは、(パケットのフラグメントなどによる処理を自動的に行った上で)そのままZigBee®プロトコルで無線送信され、受信した側でUARTシリアルに出力されます。
また、本モジュール同士で1対1の通信を行う場合、ペアリングの手順は2通りあり、対向のペアとなるデバイスのショートアドレスを互いに設定することでペアリングさせる手動設定手順と、自動でペア探索を実行させることによって自動的に接続先を発見させるペアリング機能を使用する方法があります。この自動でのペア探索機能を使用したペアリング手順は自動接続のHEXコマンドを双方のモジュールに対して実行することで可能です。
透過伝送機能は、宛先ノードが単一のユニキャスト通信に加えて、宛先を複数にしたマルチキャスト通信、ネットワーク内の他の全ノードを宛先とするブロードキャスト通信をサポートします。以降の節で、これらの通信パターンごとの設定手順を説明します。
4.6.1 ユニキャスト透過伝送#
ユニキャストでの透過伝送機能は、本モジュールを2つ使用して、1対1での双方向通信を行うシリアル通信パターンです(図 18)。
ここでは、各々のモジュールに外部MCUがそれぞれ接続されているものとして説明します。
図 18 ユニキャスト透過伝送
ユニキャスト透過伝送を行うための設定は、以下の流れで実施します。
① 同一のネットワークに参加
② ターゲットアドレスとポートの設定
③ UARTシリアルを透過伝送モードに切り替え
① 同一のネットワークに参加
透過伝送機能を実行するには、同じZigBee®ネットワークに属しているモジュール同士である必要があるため、次の2つの設定手順、コマンドを両方のモジュールにて実施してください。
4.2節 モジュール共通のネットワーク設定 6.1.2項 ネットワークを開く/ネットワーク接続の開始(コマンドコード:0x02)
これらの2つのモジュール以外にコーディネータであるZigBee®デバイスが存在する場合、デバイスタイプはエンドデバイスに設定します。コーディネータが存在しない場合、片方のモジュールのデバイスタイプをコーディネータに設定します。
② ターゲットアドレスとポートの設定
本モジュールには、透過伝送機能に使用するローカルプロパティとして、宛先ノードのショートアドレス(ターゲットアドレス)およびポート番号(ターゲットポート)が定義されています。これらのプロパティは変更が可能です。
例として、2つのモジュールA、Bのショートアドレスが
モジュールA:0x000A
モジュールB:0x000B
である場合、他方のモジュールのショートアドレスをターゲットアドレスに設定します。また、本モジュールの透過伝送機能に使用するポート番号は1であるため、ターゲットポートには0x01を設定します。以下にHEXコマンドの実行例を記載します。
※6.1.15項 ローカルプロパティの設定(コマンドコード:0x11)参照
モジュールA:
ターゲットアドレスを0x000Bに設定
55 08 00 11 00 01 00 0B 00 1BモジュールB:
ターゲットアドレスを0x000Aに設定
55 08 00 11 00 01 00 0A 00 1AモジュールA、B両方:
ターゲットポートを0x01に設定
55 07 00 11 00 02 00 01 12設定したターゲットアドレス、ターゲットポート番号の値は 6.1.14項のローカルプロパティの照会(コマンドコード:0x10)コマンドで確認できます。
ユニキャスト通信の宛先ノードの設定には、宛先ノードのショートアドレスとポート番号を直接指定して設定する方法の他に、ペアリング機能を使用して自動的に設定することも可能です。
ただし、ペアリング機能は本モジュールがコーディネータである場合は使用できません。
ペアリング機能を使用するには、本モジュールのNWK_KEYピンに対してLow信号の入力を行う、もしくは以下のHEXコマンドを実行します。
※6.1.16 自動接続(ペアリング)の設定(コマンドコード:0x14)参照
モジュールA、B両方:
55 04 00 14 00 14両方のモジュールにてコマンドを実行後、自動的に通信相手先を探索します。相手先を発見した場合、ローカルプロパティのターゲットアドレスとターゲットポートが自動的に設定されます。
③ UARTシリアルを透過伝送モードに切り替え
これまで、UARTシリアル通信にて実行していたHEXコマンドモードから透過伝送モードに切り替えます。以下のHEXコマンドを両方のモジュールに送信してください。
55 07 00 11 00 03 00 01 13切り替え後、一方のモジュールのUARTシリアルに対して、任意のバイト列の送信を入力すると、ZigBee®プロトコルによって無線通信され、他方のモジュールのUARTシリアルに出力されます。
元のHEXコマンドモードに戻すには、UARTシリアルに対してASCII文字 “+++” (16進数では[0x2B,0x2B,0x2B])を入力してください。
4.6.2 マルチキャスト透過伝送(グループ同報通信)#
マルチキャストでの透過伝送機能(グループ同報通信)は、複数のモジュールを1つのグループとして構成し、同じネットワーク内で共通のグループに属するノードのみを対象に通信を行うパターンです(図 19)。
ここでは、各々のモジュールに外部MCUがそれぞれ接続されているものとして説明します。
図 19 マルチキャスト透過伝送
図 19に示すように、グループ1は2つのノード、グループ2は3つのノードが所属します。1つのノードが複数のグループに所属することも可能で、データの透過伝送は同じグループ内の(送信する自ノードを除く)全てのノードを宛先にしてパケットが送信されます。
マルチキャスト透過伝送を行うための設定は、以下の流れで実施します。
① 同一のネットワークに参加
② グループの設定
③ ターゲットアドレスとポートの設定
④ UARTシリアルを透過伝送モードに切り替え
① 同一のネットワークに参加
透過伝送機能を実行するには、同じZigBee®ネットワークに属しているモジュール同士である必要があるため、以下の各設定手順、コマンドを両方のモジュールにて実施してください。
4.2節 モジュール共通のネットワーク設定
6.1.2項 ネットワークを開く/ネットワーク接続の開始(コマンドコード:0x02)
② グループの設定
モジュールに対してグループの設定を実行します。図 19に示す例のとおり、グループ1またはグループ2に所属させるモジュールに対して、グループIDの設定を行います。ここでは例として、グループ1のグループIDは0x0001、グループ2のグループIDは0x0002と定義します。
以下にHEXコマンドの実行例を記載します。
※6.1.10項 モジュールのグループ追加(コマンドコード:0x0A)
モジュールのショートアドレス更新の通知(コマンドコード:0x04)参照
グループ1に属する全てのモジュールで、以下の様にグループを設定します。
モジュールに対してグループID 0x0001を追加:
55 06 00 0A 00 01 00 0Bグループ2に属する全てのモジュールで、グループ1と同様にグループを設定します。
モジュールに対してグループID 0x0002を追加:
55 06 00 0A 00 02 00 08以上により、図 19に示したとおりに各ノードの所属グループが設定されます。
③ ターゲットアドレスとポートの設定
マルチキャスト透過伝送を行うためには、ターゲットアドレスとターゲットポート番号のプロパティを適切に設定する必要があります。ターゲットアドレスには、同じグループに所属するノードが複数ある可能性があるため、個々のノードのショートアドレスは使用できません。マルチキャスト用の特別な指定方法として、ターゲットアドレスには送信先のグループIDを指定し、ターゲットポート番号には0xFFを指定します。以下にHEXコマンドの実行例を記載します。
グループ1に属する全てのモジュールで、以下の様に設定します。
ターゲットアドレスをグループID 0x0001に設定:
55 08 00 11 00 01 00 01 00 11グループ2に属する全てのモジュールで、以下の様に設定します。
ターゲットアドレスをグループID 0x0002に設定:
55 08 00 11 00 01 00 02 00 12グループ1、2に属する全てのモジュールで、以下の様に設定します。
ターゲットポートを0xFFに設定:
55 07 00 11 00 02 00 FF EC④ UARTシリアルを透過伝送モードに切り替え
HEXコマンドモードから透過伝送モードに切り替えます。以下のHEXコマンドを両方のモジュールに送信してください。
55 07 00 11 00 03 00 01 13切り替え後、モジュールのUARTシリアルポートに対して、任意のバイト列の送信を入力すると、ZigBee®プロトコルによって無線通信され、同じグループ内の(送信する自ノードを除く)全てのモジュールのUARTシリアルに出力されます。
マルチキャスト透過伝送を行う際に留意すべき点として、受信側はパケットの受信時にアプリケーション・サポート副層(APS)のACK応答を行わず、送信側での再送も行われません。そのため、到達パケットの欠損状況などの確認を必要とする場合は、ユーザがアプリケーション層での到着パケットの確認、パケット再送要求などの処理を実装する必要があります。また、3.3.2項 ブロードキャスト にて説明の転送回数の上限値(radius)により、同じグループに属するノードであっても、ルーティングのホップ数が大きくなるとパケットが届かない可能性があります。これは、次項で説明するブロードキャスト透過伝送でも同様です。
4.6.3 ブロードキャスト透過伝送#
ブロードキャストによる透過伝送機能は、データの送信先を特定のノード、グループではなく同じネットワークの全てのノード対象に通信を行うパターンです (図 20)。
ここでは、各々のモジュールに外部MCUがそれぞれ接続されているものとして説明します。
図 20 ブロードキャスト透過伝送
ブロードキャスト透過伝送を行うための設定手順は、以下の流れで実施します。
① 同一のネットワークに参加
② ターゲットアドレスとポートの設定
③ UARTシリアルを透過伝送モードに切り替え
① 同一のネットワークに参加
透過伝送機能を実行するには、同じZigBee®ネットワークに属しているモジュール同士である必要があるため、以下の各設定手順、コマンドを両方のモジュールにて実施してください。
4.2節 モジュール共通のネットワーク設定
6.1.2項 ネットワークを開く/ネットワーク接続の開始(コマンドコード:0x02)
② ターゲットアドレスとポートの設定
ターゲットアドレスには、ブロードキャスト用に専用の値が割り当てられおり、表 21 ターゲットアドレスとターゲットポート設定に記載されている、ショートアドレス0xFFFC、0xFFFD、0xFFFFがブロードキャストアドレスとして使用可能です。設定したブロードキャストアドレスによって、ネットワーク内で対象となる全てのノードにデータが送信されます。
また、ターゲットポートは0以外の値(例として0xFF)を指定する必要があります。以下にHEXコマンドの実行例を記載します。
ターゲットアドレスを0xFFFFに設定:
55 08 00 11 00 01 FF FF 10ターゲットポートを0xFFに設定:
55 07 00 11 00 02 00 FF EC③ UARTシリアルを透過伝送モードに切り替え
HEXコマンドモードから透過伝送モードに切り替えます。以下のHEXコマンドを両方のモジュールに送信してください。
55 07 00 11 00 03 00 01 13切り替え後、モジュールのUARTシリアルポートに対して、任意のバイト列の送信を入力すると、ZigBee®プロトコルによって無線通信され、同じネットワークに属する全てのモジュール(自身を除く)のUARTシリアルポートに出力されます。
ブロードキャスト透過伝送を行う際の留意点について説明します。マルチキャスト透過伝送(グループ同報通信)の場合と同様、パケットの再送やAPS層のACK応答が無いため、パケットの到達状況の確認については、アプリケーション層での処理の実装が必要となります。また、ルーティングの最大ホップ数制限によって、ネットワーク内の対象ノードにパケットが届かない可能性があります。
図 21 ブロードキャスト送信の有効範囲
図 21に示すネットワークの構成例では、各ノードが相互に直接の無線通信が可能な環境ではなく、コーディネータから見てエンドデバイスBは直接の無線通信の到達範囲外であるとしています。また、コーディネータとルータ、エンドデバイスA、およびルータとエンドデバイスBはそれぞれ直接の無線通信の到達範囲内に存在するとします。この場合、エンドデバイスBはルータの子ノードという関係にあり、コーディネータから送信されたパケットは、ルータが転送することによってエンドデバイスBにて受信可能な状態です。
エンドデバイスBへの、各ノードからのブロードキャスト通信は、送信元ノードがコーディネータまたはエンドデバイスAの場合、ルータによる転送が発生し、ホップ数2で到達可能であるため、送信時の転送回数の上限値(radius)は2以上である必要があります。送信元がルータの場合は、エンドデバイスBは子ノードなのでradiusは1で到達可能です。
また同様に、エンドデバイスBからのブロードキャスト通信の送信は、最初にブロードキャストのパケットを受信するルータが転送を行うため、コーディネータおよびエンドデバイスAがブロードキャストのパケットを受信可能にするにはradiusは2以上である必要があります。
本モジュールでは、送信フレームのNWK層に含まれるradius値は、ZigBee®仕様での上限値の30がデフォルトとして設定されています。送信時のradius値の指定方法については、UARTシリアルをHEXコマンドモードに切り替えた状態で、ZCLコマンドの入力時に与えるパラメータにて、1または30に指定可能です。具体的には、6.4節 デバイス状態管理とデバイス制御(ZCLコマンド)に記載の入力時のコマンドデータの一部、「送信モード」のbit7(最上位ビット)がradiusの設定に該当します。