FrontPage

はじめに

近頃、ZigBeeを使う人が非常に増えてきました。

ただ残念なことに、通信規格としてのZigBeeは、今や複雑巨大なモンスターになってしまい、たとえ技術者であっても理解して使いこなすのはなかなか困難と言わざるを得ません。そこで、とにかく現実的、実践的な、ポイントを抑えたZigBeeの解説サイトを作ろうと思い立ちました。

一般的な概論は極力避けて仕様面を必要最小限に記述していますが、これは逆にいうと膨大なZigbee仕様も、最初に理解すべき本質的な部分はそのごく一部で十分ということです。

この解説で「ZigBee製品を導入してみたけど動作がよくわからん」という「??」が少しでも解消されれば嬉しいです。

ZigBeeプロトコル

変遷

ZigBee通信規格は2004年の発表から現在に至るまでに、仕様上の大きな改訂が何度かありました。とりわけ2007年頃策定された最新規格においてはZigBeePROフューチャーセット(通称「ZigBeePRO」)が登場し、それまでのいわゆる伝統的なZigBee規格は「ZigBeeフューチャーセット」という呼び名で区別されることになりました。

image5

ZigBeePROとZigBeeの違いを一言でいいますと、ZigBeePROではツリー型ネットワークが廃止され、メッシュネットワークのみになりました。また初期のZigBeeではスター型においてスーパーフレームを利用するいわゆるビーコンネットワークが可能でしたが、ZigBeePROではビーコンネットワークはサポートされなくなっています。したがってZigBeePROではもはやスター型とメッシュ型の区別もあまり意味がなくなり、スター型とは「コーディネータとエンドデバイスだけで構成されるメッシュネットワークである」と考えることもできます。

現在の主流はZigBeePRO規格となっており、ZigBee解説書の中にはZigBeePROで通用しない機構が解説されているものもありますので、場合によっては注意が必要です。

このWikiでは主にZigBeePROを解説しますが、ほとんどの記述がZigBeeにも当てはまります。ただし特に区別が重要な箇所については、その区別を明確にして解説しています。

周波数

ZigBeeは物理層として主にIEEE 802.15.4という規格を利用します。IEEE 802.15.4はその名の通りIEEEで策定されている通信規格で、ネットワーク層以上を定めるZigBeeと物理層を定める802.15.4は策定している団体が異なります。802.15.4で利用できる周波数は以下のようになっています。

また各周波数には分かりやすいように連番で論理番号が割り振られています。

したがってZigBeeの説明で「チャンネル11」というときは、2405MHzを指すことになります。これらの中で特に2.4GHz帯は世界共通で利用できるため、最も多く利用されている周波数になります。

そこで2.4GHzにフォーカスした場合の周波数の使い方と、家庭やオフィスで一般的に使われるようになった無線LAN(802.11b)との比較を下図に示します。

&ref(): File not found: "image8.PNG" at page "ZigBee入門";

802.15.4は隣合うチャンネル同士で影響を与えない点がポイントです。一方で802.11bはチャンネルの占有帯域が重複しており、完全に干渉を避けるにはチャンネルを4つ開ける必要があります。802.11bとZigBee(802.15.4)は共に変調方式にDSSSを使っていますが、802.15.4は中心周波数から2MHzを使い、802.11bは22MHzを使います。

また現在、900MHz帯を利用する802.15.4d, g, eの標準化も進行しており、そう遠くない将来にサブ1GHz上で動作するZigBeeが利用可能になると考えられています。

ネットワークとデバイスタイプ

ZigBeeでは3種類のデバイスタイプが存在します。それぞれ、コーディネータ、ルータ、エンドデバイスと呼ばれます。

コーディネータは、PANを開始し、必要ならば外部のネットワークともつながるゲートウェイとなります。エンドデバイスはスリープしても良い唯一のタイプで、多くの場合、センサーなどを接続して様々なデータを収集して送信します。この二種類のデバイス間に多数存在できてデータを転送する役がルータになります(もちろんルータにセンサーを付けても良いですが)。エンドデバイスと異なりルータはデータを中継するいわゆるルーティング能力を持ちます。いつどこからデータの中継を依頼されるか分からないため、スリープすることはできません。

ネットワークの形

ZigBeeには図のように3つのネットワーク方式があります。

【ネットワーク構成図】

image1

スター型は、例えば無線LANがこの形です。中央にアクセスポイント(=コーディネータ)があり、そこに末端端末(=エンドデバイス)も転送端末(=ルータ)も直接つながります。

ツリー型はその名のとおり木のように階層的にネットワークを形成する方法です。ZigBeeではツリーを形成する際に「分散アドレス割り当て」というユニークな手法を採用しています。この方式では、ある特定の計算式にしたがって親が子のアドレスをアサインしていきます。その計算式はツリーの深さと子デバイスの数から重複なくアドレスを生成でき、ネットワーク全体の情報を持つことなく一意なアドレスを割り当てていくことができるようになっています。さらに秀逸なのは、そのアドレスからツリーの深さや親デバイスを逆算できるため、ルーティングテーブルを使わなくてもネクストホップが確定できます。そのためネットワーク規模が大きくなってもメモリ消費量はそれほど増えないという大きな特徴をもっています。

(余談ですが個人的にはこの「分散アドレス割り当て」方式こそがZigBee最大の発明の一つだと思うのですが、惜しくもZigBeePROでは廃止になってしまいました。)

最後にメッシュ型ですが、これはネットワークがメッシュつまり網状に拡大していく形です。アドレスは基本的に「乱数」で割り当てられます。よってアドレスからは転送先が分からないため、いわゆるAODVと呼ばれる動的な経路構築のメカニズムを用いて通信経路を形成します。前述のように、ZigBeePROではツリー型は廃止されており、ZigBeeフューチャーセットの方で継続的にサポートされています。またビーコンネットワークをサポートしないZigBeePROではスター型とメッシュ型の区別も曖昧で、結果としてスター・ツリー・メッシュという3つのネットワークの区別は、現在ではかなり便宜的なものになっています。

アドレッシング

ここでは、非常に重要な「アドレス」について解説します。Zigbee機器は2種類のアドレス、つまりIEEE 64bitアドレス(またはロングアドレス、拡張アドレス等)と16bitアドレス(ショートアドレス、ネットワークアドレス)を使い分けます。それぞれ以下の意味を持ちます。

IEEE 64bitアドレス

デバイスに固有の識別子。世界中のZigBeeデバイスがそれぞれ固有の64bitアドレスを持ちます。通常、機器の製造元がきちんとアドレスを管理して出荷時に付与します。ただし評価ボードなど「実験、開発用」のZigBee機器にはIEEE 64bitアドレスが付与されてないこともあります。イーサネットの48bit MACアドレスと同じ役割を果たします。

16bitアドレス

後述するPANへの参加時に、動的にアサインされます。同じPANの中では必ず一意である必要がありますが、異なるPANであれば同じ番号が使われる可能性もあります。16bitアドレスはPANへ参加する度に異なる値がアサインされます。その意味ではDHCPで運用されているプライベートIPネットワークに似ています。

このうちZigBeeは、主に16bitアドレスを使って互いに通信します。

PANの生成と参加

ZigBeeネットワークの作り方を解説します。ZigBeeでは、各ネットワークはPAN IDという16ビットの識別子で区別されます。PAN IDが異なるデバイスはたとえ電波の届く範囲にいても直接通信はできません。逆にいうと、ZigBeeがネットワークを作るとは、各デバイスが同じPAN IDと周波数を共有するプロセスであるということが出来ます。

PANの生成[コーディネータ]

コーディネータはまず最初に各チャンネルの電波環境を調べ、ノイズの少ないチャンネルを検索します。同時にアクティブスキャンを行い、周囲に同様なコーディネータが存在しないか確認します。その上で、

1) PANが利用するチャンネル
2) PANが利用するPAN ID

を決定して起動します。

PAN IDは、原則的にはランダムに生成されますが、それだといろいろと使いづらい点も多いので、事前に生成するPAN IDを指定できる製品がほとんどです。

誤解を恐れずに思い切りざっくりといってしまえば、コーディネータの仕事はたったのこれだけです。

コーディネータは1つのPANに必ず1つだけ存在し、ショートアドレスは必ず0x0000を使うと決まっています。事前に割り当て値が予測できないルータ、エンドデバイスのショートアドレスと異なり、コーディネータだけは確定してます。センサなどで取得したデータをコーディネータに周期的に送信するといったコーディネータ方向へのアプリケーションは、事前にアドレスを調べることなく動作することができるわけです。

スキャン[ルータ・エンドデバイス]

ネットワーク参加の最初のプロセスとしてスキャンが始まります。多くの場合、各デバイスはアクティブスキャンを周期的に行いますが、その過程で周囲の端末に対して “Beacon Request”を同報します。それをキャッチした周囲の端末は “Beacon Response”をユニキャストで応答します。これにより周囲の端末の情報(Node Descriptor)を得ることができるわけです。

ブロードキャストで探索し、ユニキャストで応答する、これが基本です。

image2

次に、スキャンによって取得した周囲の情報(Node Descriptor)の中から、参加したいネットワークのPAN IDを選択します。デバイスを個別に選択するのでなく、あくまでPAN IDを選択するという点に注意が必要です。そして更にそこから、スキャンで取得したNode Descriptorを使って、そのPAN IDに接続できそうな最寄のデバイスをピックアップし、接続過程に入ります。

接続

アクティブスキャンで得られたNode Descriptorの中には、ビーコンを応答してきたデバイスのIEEE 64bit アドレスが格納されています。この情報を元にして接続要求元はMAC層のAssociation request, Association Response, Data requestを行います。この過程で接続先は、接続要求してきた端末のアドレスをランダムにアサインすると同時に、自分がもっているリスト(ネイバーテーブル)に追加します。

image3

デバイス通知

接続をリクエストした相手からAssociation Responseが成功ステータスで返答されると、ネットワークへの参加は成功になります。次に、新しく参加したデバイスは、自分のIEEE 64bitアドレスとショートアドレスの対情報とデバイスの属性を、ネットワーク全体にブロードキャストします。これはZDO層のdevice annceという特殊なメッセージによって実現されます。これによって新規にデバイスがネットワークへ参加したということを他のデバイスが知ることになります。

ここまでが、ZigbeeにおけるPAN生成とPANへの参加シーケンスの流れです。バッタもんでない、すべての正しいZigBeeデバイスは、必ずこの処理を行います。ただしこれらの処理はZigbeeハードウェアが自動で行いますので、使う側が意識することはほとんどありません。

参加に関するいろいろ

ここまでPAN生成とPANへの参加過程を解説しました。ZigBeeがネットワークを形成する一番根本かつ重要なメカニズムの一つです。いくつか補足事項を記します。

アクティブスキャン

アクティブスキャンは、ZigBeeの各チャンネル毎にビーコン要求をだして、しばらく待機し、また次のチャンネルで、、、というように繰り返し処理をします。このため、アクティブスキャンが完了するまでにしばらく時間がかかります。これがいわゆるZigbeeの「接続時間が長い」というやつです。通信できるようになるまでにしばらく時間がかかるなと思う時があるのは、アクティブスキャンをかけているからです。デバイスはスキャンをかけている間は原則、他の通信は行いません。

スキャンにおける各チャンネルの滞留時間は、一番短くて約15msec, 長くて約4分程度で、計算式は

15.36msec * 2^duration (ここで0 <= duration <= 14)

つまり倍々に増える形で滞留時間をコントロールできます。

さて、このアクティブスキャンを迅速に行うことは可能でしょうか? これはつまり接続時間の短縮につながります。

ZigBee的な回答としては2つの手段があります。

1. 上の式におけるdurationを小さい値にする
2.スキャンするチャンネルを全チャンネルでなく、いくつかのチャンネルに絞る

2は一般にスキャンチャンネルマスクといい、たとえばチャンネル11, 15, 19, 23だけスキャンするといった運用が可能です。当然、このチャンネルで起動しているPANだけしか発見できなくなりますが、ネットワーク形成を短縮したい場合のひとつの方法となります。

ZigBeePRO SDKでは「gnSK_APS_apsChannelMask」がチャンネルマスクに相当します。

接続の許可・拒否

PANへ新しいデバイスが参加してくるのを抑止するメカニズムはいくつかありますが、ここでは主要な方法を2種類あげます。

1) Association Permit (MAC層)
2) 最大接続デバイス数、最大接続ルータ数(NWK層)

1. Association Permit
Association PermitはMAC層のパラメータの一つで、名前の通りAssoationの発生を抑止します。このパラメータはアクティブスキャンの過程で、Beacon要求に対するBeacon応答に含まれて周囲に伝わります。アクティブスキャンをかけたルータやエンドデバイスは、Association PermitがFALSEのデバイスには接続要求してはいけないことになっています。これによってルータやコーディネータが接続してくるデバイスを制御します。

ZigBeePRO SDKでは「gnSK_MAC_macAssociationPermit」がこれにあたります。

一番よくある使い方としては、Association Permitは初期出荷状態ではオフ(接続不許可)にしておき、ボタン押下やスイッチ切り替えによって一定時間だけAssociation PermitがTRUEになるよう製品を作っておくことです。ユーザはネットワークを作りたい時だけボタンを押して接続を許可し、その間に子機の接続を完了させます。

ZigBee製品では、知らないデバイスに勝手に接続されてこられては困りますので、一般にこのようにして望むデバイスとだけPANを形成するようにします。

2. 最大接続デバイス数、最大接続ルータ数
Association Permitが、ユーザが意図的に接続の許可・不許可を制御するために使うのに対して、これらのパラメータはネットワークをバランスよく形成するために使います。最大接続デバイス数は、そのデバイスが収容できる機器(=ルータ+エンドデバイス)の総数、最大接続ルータ数は収容できるデバイスのうちルータの数を表します。このことから「最大接続デバイス数 - 最大接続ルータ数」が、そのデバイスが収容できるエンドデバイス数になります。

ZigBeeデバイスは、自分に接続してきているデバイスの数が上のパラメータ上限に達すると、「もう上限です」ということを示すフラグをBeacon応答の中に設定します。そしてこのフラグもアクティブスキャンによって周囲に伝わります。ZigBee仕様によって、上限に達しているデバイスへは接続要求をしてはいけないことになっています。

ZigBeePRO SDKでは「gnSK_NWK_nwkMaxChildren」が最大接続デバイス数、「gnSK_NWK_nwkMaxRouters」が最大接続ルータ数に相当します。

データ送受信

PAN生成と参加の次はデータ送受信です。ZigBeeではざっくりいうとこの2つさえ理解しておけば、実用上困ることはあまりありません。

送信のインターフェイス

受信のインターフェイス

Ackと再送制御

ブロードキャストとマルチキャストキャスト

メッシュルーティング

クラスタ番号

エンドポイント

休憩

そろそろおなか一杯ですか? もうすぐ終わりです。

省電力制御

ポーリングと間接送信

【「ZigBee PRO」の主な機能】

以下に、多くのZigBeePRO製品がサポートしている興味深い機能をあげます。ここでは書ききれませんでしたが、そのうち解説しようと思います。

1) 周波数アジリティー機能(Frequency Agility)

   ZigBeeの周波数帯(2.4GHz)は、無線LANやBluetoothなどが共用しており、電波が干渉する可能性があります。ZigBee PROでは、通信状況を常に把握しており、干渉によって通信状況が悪くなった場合は、コーディネーターがチャンネル変更の指示を出し、干渉しないチャンネルへ移動させて、ネットワークの安定性を高めることができるようになりました。

2) 分割配信機能(Fragmentation)

ZigBeeは1回に最大127バイトのデータが送信可能ですが、用途(画像送信等)によっては127バイトでは小さすぎる場合もあり、「ZigBee PRO」では、127バイトより大きなデータを自動的に分割して送信し、受信側で元データに自動的に復元します。この機能により、電子証明書を送付することができ、高度なネットワークセキュリティが可能となりました。事実、フラグメンテーションはSmart Energy Profileのセキュリティ機能で使われています。

3)ID コンフリクト解消機能(ID Conflict Resolution)

ZigBeePROでは、1つのネットワーク内で16ビット=65565通りのアドレスをランダムに割り当てますが、万が一そのアドレスが重なってしまった場合、衝突を検出してアドレスを自ら変更することで、衝突を解決する機能が備わりました。

4)メニー・トゥー・ワン機能(Many-to-one routing)

ZigBeeでは、これまで1台ずつ経路を作る必要があったために、端末台数が多いと通信負担が大きく、たとえば、コーディネーターを中心に10台がつながっている場合は10回の経路構築が必要でした。ZigBeePROのメニー・トゥー・ワン機能は、1回の経路構築で全端末分の上り方向(コーディネータ方向)への経路が作れるようになりました。この機能を持つコーディネータを特別にコンセントレータと呼びます。

5) リンク・ステータス機能(Link Status)

一般にワイヤレス通信では、往路はOKだけど復路はNGというように、片方向だけ電波状態が悪い場合が多くあります。ZigBeePROのリンク・ステータス機能によって、往復路でそれぞれ電波状態の良い経路を選べるようになりました。

最後に

本文章の文責はスカイリー・ネットワークスにあります。 書かれている記述内容について、ZigBeeおよびその関連団体が保証するものではありません。

ここ間違っているんじゃない?、この部分をもっと詳しく解説して欲しいというご指摘は「info atmark skyley.com」宛てにお寄せください。

ZigBeeは、ZigBee Allianceの登録商標です。 その他の名称はそれぞれの団体または企業のトレードマークです。

Skyley Networks, Inc. all rights reserved.


トップ   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS