[[FrontPage]] *0. はじめに [#u77776c8] 最近、ZigBeeを使う人が非常に増えきたなと感じます。 それも、必ずしも「ZigBee業界」でない方々が、自分たちのやりたことを実現するための手段として、ZigBeeを選択しはじめています。つまりZigBeeを使うのが目的でなく手段になってきています。古くからワイヤレスネットワークに取り組んできた私たちとしては非常に嬉しい限りです。 ただ残念なことに、通信規格としてのZigBeeは今や複雑巨大なモンスターになってしまい、たとえ技術者であっても、ZigBeeを理解して使いこなすのはなかなか困難と言わざるを得ません。しかしながら、インターネットを使いこなすためにTCP/IPの知識が必然であるのと同じように、ZigBeeを使いこなすなら、そして今後ZigBeeがより広く使われていくならば、ZigBeeプロトコルの知識はある程度は知っておくべきだと信じます。 それにしてもZigBeeの仕様書は英語で分厚いですし、先頭から読んで理解しろというのはあまりに眠くて酷ですよね!(そういう苦労は自分たちだけで十分)。 スカイリー・ネットワークスは、ZigBeePROプロトコルをフルスクラッチで開発してZigBee Allianceのコンプライアンステストに合格している数少ない独立系ソフトハウスです(数少ないというのは、今や海外のそういう会社はみんな買収されちゃいましたから)。言ってみれば、幸か不幸かZigBeeを隅々まで理解しています。 そんな我々が、より実践的に、現実的に、ポイントを抑えたZigBeeの解説を作ろうと考えました。この解説で「ZigBeeモジュールを導入してみたけど動作がよくわからん」という「??」が少しでも解決されれば嬉しいと願っています。 *1. ZigBeeとは [#u77776c8] ZigBeeとは、低消費電力を特徴とする無線通信規格のことで、国際的な非営利団体「ZigBee® Alliance」によって策定され、数百の企業がアライアンスに加入して製品が開発されています。 日本にも、国内普及を目的とした有限責任中間法人「ZigBee SIG ジャパン」があります。通信距離は数m~数100mで、狭いエリア内で使用する無線ネットワークWPAN(Wireless Personal Area Network)のひとつになります。また、基礎部分の仕様(物理層/MAC層)については、IEEE 802.15.4として規格化されています。 想定市場は、家庭用電化製品、健康機器、産業用制御、ビルオートメーション、ホームコントロールなど多岐にわたり、とりわけ近年ではスマートグリッドを担う要素技術としてスマートメーターへの応用が注目されています。 *2. 通信プロトコル [#o721d5bc] **●はじめに [#t2deac6f] ZigBee通信規格は2004年の発表から現在に至るまでに、仕様上の大きな改訂が何度かありました。とりわけ2007年頃策定された最新規格においてはZigBeePROフューチャーセット(通称「ZigBeePRO」)が登場し、それまでのいわゆる伝統的なZigBee規格は「ZigBeeフューチャーセット」という呼び名で区別されることになりました。 &ref(image5.PNG,nolink,image5); ZigBeePROとZigBeeの違いを一言でいいますと、ZigBeePROではツリー型ネットワークが廃止され、メッシュネットワークのみになりました。また初期のZigBeeではスター型においてスーパーフレームを利用するいわゆるビーコンネットワークが可能でしたが、ZigBeePROではビーコンネットワークはサポートされなくなっています。したがってZigBeePROではもはやスター型とメッシュ型の区別もあまり意味がなくなり、スター型とは「コーディネータとエンドデバイスだけで構成されるメッシュネットワークである」と考えることもできます。 また「ZigBee PRO フィーチャーセット」は、これまでZigBeeが不得意だった比較的大きなサイズのデータを自動的に分割しながら送信する「分割配信機能」や、2.4GHzの同じZigBeeの周波数帯で干渉し合うような場合に、干渉検知を行ない、自動的に空いている帯域に移行させる「周波数アジリティ機能」などがサポートされ、ZigBee規格の中でセキュリティや信頼性に富んだネットワークを実現するものになりました。 現在の主流はZigBeePRO規格となっており、ZigBee解説書の中にはZigBeePROで通用しない機構が解説されているものもありますので、場合によっては注意が必要です。 このWikiでは主にZigBeePROを解説しますが、ほとんどの記述がZigBeeにも当てはまります。ただし特に区別が重要な箇所については、その区別を明確にして解説しています。 **●周波数 [#t2deac6f] ZigBeeは物理層として主にIEEE 802.15.4という規格を利用します。IEEE 802.15.4はその名の通りIEEEで策定されている通信規格で、ネットワーク層以上を定めるZigBeeと物理層を定める802.15.4は策定している団体が異なります。802.15.4で利用できる周波数は以下のようになっています。 -2.4GHz帯・・・世界共通 -868MHz帯・・・欧州のみ -915MHz帯・・・米国のみ また各周波数には分かりやすいように連番で論理番号が割り振られています。 -868MHz帯・・・チャンネル0 -915MHz帯・・・チャンネル1-10 (906MHzから2MHz刻みで全10チャンネル) -2.4GHz帯・・・チャンネル11-26 (2405MHzから5MHz刻みで全16チャンネル) したがってZigBeeの説明で「チャンネル11」というときは、2405MHzを指すことになります。これらの中で特に2.4GHz帯は世界共通で利用できるため、最も多く利用されている周波数になります。 そこで2.4GHzにフォーカスした場合の周波数の使い方と、家庭やオフィスで一般的に使われるようになった無線LAN(802.11b)との比較を下図に示します。 &ref(image8.PNG,nolink,image8); 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が利用可能になると考えられています。 **●デバイスのタイプ [#t2deac6f] ZigBeeでは3種類のデバイスタイプが存在します。それぞれ、コーディネータ、ルータ、エンドデバイスと呼ばれます。 コーディネータは、PANを開始し、必要ならば外部のネットワークともつながるゲートウェイとなります。エンドデバイスはスリープしても良い唯一のタイプで、実際の用途、例えば温度計測するなら温度センサー、二酸化炭素濃度を計測するならCO2センサー役になります。この二種類のデバイス間に多数存在できてデータを転送する役がルータになります(もちろんルータにセンサーを付けても良いですが)。エンドデバイスと異なりルータはデータを中継するいわゆるルーティング能力を持ちます。いつどこからデータの中継を依頼されるか分からないため、スリープすることはできません。 **●ネットワークの形 [#t2deac6f] ZigBeeには図のように3つのネットワーク方式があります。 ***【ネットワーク構成図】 [#tec9311d] &ref(image1.PNG,nolink,image1); スター型は、例えば無線LANがこの形です。中央にアクセスポイント(=コーディネータ)があり、そこに末端端末(=エンドデバイス)も転送端末(=ルータ)も直接つながります。 ツリー型はその名のとおり木のように、幹、枝、葉というように階層的につながっていく形式です。ZigBeeではツリーを形成する際に「分散アドレス割り当て」というユニークな手法を採用しています。この方式では、ある特定の計算式にしたがって親が子のアドレスをアサインしていきます。その計算式はツリーの深さと子デバイスの数から重複なくアドレスを生成でき、ネットワーク全体の情報を持つことなく一意なアドレスを割り当てていくことができるようになっています。さらに秀逸なのは、そのアドレスからツリーの深さや親デバイスを逆算できるため、ルーティングテーブルを使わなくてもネクストホップが確定できます。そのためネットワーク規模が大きくなってもメモリ消費量はそれほど増えないという大きな特徴をもっています。 (余談ですが個人的にはこの「分散アドレス割り当て」方式こそがZigBee最大の発明の一つだと思うのですが、なぜかZigBeePROでは廃止になってしまいました。) 最後にメッシュ型ですが、これはネットワークがメッシュつまり網状に拡大していく形です。アドレスは基本的に「乱数」で割り当てられます。よってアドレスからは転送先が分からないため、いわゆるAODVと呼ばれる動的な経路構築のメカニズムを用いて通信経路を形成します。前述のように、ZigBeePROではツリー型は廃止されており、ZigBeeフューチャーセットの方で継続的にサポートされています。またビーコンネットワークをサポートしないZigBeePROではスター型とメッシュ型の区別も曖昧で、結果としてスター・ツリー・メッシュという3つのネットワークの区別は、現在ではかなり便宜的なものになっています。 **●ZigBeeの基本動作 [#p824fd21] ZigBeeネットワークの作り方を解説します。ZigBeeでは、各ネットワークはPAN IDという16ビットの識別子で区別されます。PAN IDが異なるデバイスはたとえ電波の届く範囲にいても直接通信はできません。逆にいうと、ZigBeeがネットワークを作るとは、各デバイスが同じPAN IDを共有するプロセスであるということが出来ます。 ***●コーディネータ [#fb931340] コーディネータはまず最初に各チャンネルの電波環境を調べ、ノイズの少ないチャンネルを検索します。同時にアクティブスキャンを行い、周囲に同様なコーディネータが存在しないか確認します。その上で、 ・PANが利用するチャンネル コーディネータは1つのPANに必ず1つだけ存在します。 ***●ルータ・エンドデバイス [#v26c9420] まずはじめのプロセスとしてスキャンが始まります。多くの場合、各デバイスはアクティブスキャンを周期的に行いますが、その過程で周囲の端末に対して “Beacon Request”を同報します。それをキャッチした周囲の端末は “Beacon Response”で応答します。これにより周囲の端末の情報(Node Descriptor)を得ることができるわけです。 ***【スキャン】 [#k30fc936] &ref(image2.PNG,nolink,image2); 次に、スキャンによって取得した周囲の情報の中から、接続したいネットワークのPAN IDを選択します。更に接続したいMAC層のAssociation request, Response, Data requestを行います。つまり、ネットワークを作りたい端末に向かって、接続したいというサインを出すということです。この過程で接続先は発信してきた端末のアドレスを自分がもっているリストに追加します。 ***【接続】 [#lcf221bb] &ref(image3.PNG,nolink,image3); これでネットワークが完成されました。このしくみをもとに、自己構築、自己修復が可能で、転送しながら(マルチホップ機能)ネットワークをつなぎ、拡げていく、これがZigBeeのコア技術といえます。 **【「ZigBee PRO」の主な機能】 [#u74aab89] 1) 周波数アジリティー機能(Frequency Agility) ZigBeeの周波数帯(2.4GHz)は、無線LANやブルートゥース(Bluetooth)などが共用しており、電波が干渉する可能性があります。「ZigBee PRO」では、通信状況を常に把握しており、干渉によって通信状況が悪くなった場合は、コーディネーターがチャンネル変更の指示を出し、干渉しないチャンネルへ移動させて、ネットワークの安定性を高めることができるようになりました。 2) 分割配信機能(Fragmentation) ZigBeeは1回に最大127バイトのデータが送信可能ですが、用途(画像送信等)によっては127バイトでは小さすぎる場合もあり、「ZigBee PRO」では、127バイトより大きなデータを自動的に分割して送信し、受信側で元データに自動的に復元します。この機能により、電子証明書を送付することができ、高度なネットワークセキュリティが可能となりました。 3) ストキャスティック・アドレッシング機能(Stochastic Addressing) これまでのZigBeeでは親機のアドレスから自機のアドレスが決まっていたので、一度接続が完了すると場所を移動させることができませんでした。「ZigBeePRO」のストキャスティック・アドレッシング機能によりアドレスが乱数になったのでデバイスの親子関係を意識する必要がなくなり、たとえば、ディスプレイを移動するなど、構成するデバイスの位置移動が楽になりました。 4) ID コンフリクト機能(ID Conflict) ZigBeePROフューチャーセットでは、1つのネットワーク内で16ビット=65565通りのアドレスをランダムに割り当てますが、万が一そのアドレスが重なってしまった場合、衝突を検出してアドレスを自ら変更することで、衝突を解決する機能が備わりました。 5) ルート・レコード機能(Source Routing) ZigBeeでは、自動的にルートを選択してデータを中継しますが、どのルートを辿ったかということがこれまで分かりませんでした。「ZigBee PRO」のルート・レコード機能によって、途中ルートが分かるようになります。 6) メニー・トゥー・ワン機能(Many-to-one) ZigBeeでは、これまで1台ずつ経路を作る必要があったために、端末台数が多いと通信負担が大きく、たとえば、コーディネーター(Coordinator)を中心に6台がつながっている場合は6回の通信確認が必要でした。「ZigBeePRO」のメニー・トゥー・ワン機能は、1回の通信で全端末分の経路が作られるようになりました。 7) リンク・ステータス機能(Link Status) Z一般にワイヤレス通信では往路はOKだが、復路はNGというように、片方向だけ電波状態が悪い場合が多くあります。「ZigBee PRO」のリンク・ステータス機能によって、往復路でそれぞれ電波状態の良い経路を選べるようになりました。