ZigbeeのスリープとBLEのスリープの省電力化機能を比較する
今日勉強したばかりの人が超テキトーに書いているのでちゃんと調べてね☆
まず、第一にZigbeeとBluetoothは兄弟みたいなものである。というのもどちらもIEEE 802.15という物理レイヤー上に構築された通信規格である。IEEE 802.15.1がBluetoothでIEEE 802.15.4がzigbeeである。どちらにせよ2.4Ghz帯は汚染されているのでロボコン会場で動かなくなったりするだろうが、そんなことは今回はどうでもよい。あとZigbeeはXbeeしか使ったことなかったりする。
Bluetooth
BLEのスレーブレイテンシーについて説明したいが、その前にBluetoothの通信について説明する。
Bluetoothは、セントラルとペリフェラルという二種類のデバイスからスター型ネットワークを構築して通信することが一般的である。
- セントラル:通常PCであったり、スマホといったデバイスが相当し、通信の中心となるデバイス。ZigbeeにおけるCoordinatorに相当すると思われる。
- ペリフェラル:ペリフェラルはヘッドホンやキーボード、スマートロック(スイッチボットはいいぞ)などが相当する。ZigbeeではEnd Deviceが相当する。
Connection Interval とSlave Latency
今回のキーとなる要素としてコネクションインターバルとスレイブレイテンシについて説明する。コネクションインターバルというのはBluetoothの通信に関するパラメータであり、セントラルがペリフェラルに対して、どの程度の間隔で通信を行うかというパラメータである。Bluetoothは通常一度、セントラルとペリフェラル間で通信を確立すると一定間隔で相互通信を行うことで接続関係を維持することになる。この通信間隔がコネクションインターバルに相当する。コネクションインターバルは1.5msから4sまでの広い範囲で変動する。ちなみにnRF52840で1秒以上の通信間隔を設定しようとした場合ファームウェアに拒否される。
次に、スレイブレイテンシーについて説明する。スレイブレイテンシーはペリフェラルがセントラルからの通信を無視できる回数である。Bluetoothにおいて例えばスマート体温計とかであれば、継続に時間がかかるので4秒とか高頻度で通信を行いたいわけではない。なのでSlavelatencyを利用する。例えば1秒の中で1回送信データが発生するシステムの場合、SlaveLatencyを99、コネクションインターバルを10msとした場合、おおよそ、99回分の通信を無視することが可能である。SlaveLatencyにはクイックトランスミッションという機能があり、コネクションインターバルに従って任意のタイミングでペリフェラルからセントラルに送信ができる。これを組み合わせたら通常1秒に1回通信を行いつつ、特殊イベントのみペリフェラルからセントラルに急遽データ転送することができる。
Zigbee
本稿の話題はこれがZigbeeでもできるの?って話である。
まずZigbeeとBluetoothの一番大きな違いはZigbeeの方がセンサネットワークなどを意識した構造になっており、ラウティング(発音がネイティブで悪いな(・ω<))のための機能を持つことである。また、Bluetoothが基本的にスマートフォンやPCの周辺機器をターゲットとしているのに対してZigbeeはメッシュネットワークを構築するためのテクノロジーが提案されています。
Zigbeeはノードの種類と、ノードの関係性の二種類に注目する必要があります。 なんかこの辺に詳しく書いてある。https://www.digi.com/resources/documentation/Digidocs/90002002/Concepts/c_device_types.htm まずZigbeeはセントラルとペリフェラルのようにロールが属性に一致するわけでなく親と子という関係があります。更にノードの種類にはEnd Device、Router、Coordinatorの三種類のデバイスが存在します。
Coordinator:Bluetoothにおけるセントラルに相当するデバイスでTCP/IPに対するゲートウェイを担当したりします。Coordinatorの特徴は親を持たないことです。ネットワークとしてはルートノードになるみたいです。
Router:これは普通のBluetoothには存在しない機能です(いやBluetooth Meshだろリレーノードに相当する気がするがZigbeeよりかなりめんどくさいのでこの話はしない)。Coordinatorを親としてEnd Deviceを子とするみたいです。
End Device:Bluetoothにおけるペリフェラルっぽいです。スリープを行ったりBluetoothっぽい機能がいろいろそろってます。今回はこの辺に関してよく知りたかった。Zigbeeの仕様ではスリープモードになれるのはEndDeviceだけらしい。
Cyclic Sleep Mode
Zigbeeの仕様はややこしい、特にZigbeeはIEEE802.15.4上に構築されており、IEEE802.15.4そのものがZigbeeではないらしい。Zigbeeの規格はZigbeeアライアンスというところが決めているらしい。なんかZigbeeの仕様書の日本語訳があったのでここに貼っておく。
Polling
Zigbeeの通信は親が子に向かって送信するデータが無いか質問するらしい。Zigbeeの省電力デバイスは普段は寝ていて送信データがあるときにだけ起動してデータを送信できるらしい。なのでSleepy End Devicesと呼ばれるらしい。この辺はBluetoothのコネクションイベントとかなり似ているかもしれない。しかしSlabeLatencyを考えるとBluetoothではセントラルがペリフェラルに問い合わせをしていたのに対して、Zigbeeではエンドデバイス側から問い合わせをするという点で異なる。
また、Zigbeeでは非同期で通信が可能であるらしく任意のタイミングでデータが遅れるらしい(じゃあPolling Interval)って何?
ポーリングに関していい感じの資料を見つけたのでここに貼っておく ポーリングの役割は以下の二つらしい
- 親と子の間で生存報告をする
- SEDが親に対してデータを要求するときに使う。
更にややこしいことにポーリングには2種類あるらしい。 - Long Poll :Long Poll Intervalはエンドデバイスから親デバイスへのデータリクエストの最大時間を表す。つまり、デバイスが通信を行う必要が無い場合は、このLong Pollの間隔で通信を行うことで接続を維持することになる。Connection Intervalと同じように考えればいいのかな? - Short Poll : エンドデバイスがネットワークから送られてくるメッセージに対して応答する場合このShort Pollの間隔で通信することになるらしい、この状態を“Fast Polling mode”と呼ぶ。Bluetoothで言えばコネクションインターバルに相当するって認識でよいのかな?
まとめ
調査してみましたが分かりませんでした。いかがでしたか?- Bluetoothと同様にZigbeeにも省電力化機能がありました。
- Bluetoothがセントラルとペリフェラルから構成されるのに対して、ZigbeeはCoordinator、Router、EndDeviceの三種類のデバイスから構成されて、その中でもスリープ時間が長いものをSleepy End Deviceと呼ぶことが分かりました。
- Bluetoothではセントラルがペリフェラルに対して要求をするのに対して、ZigbeeではEnd Deviceが親に問い合わせをすることが分かりました。
- Bluetoothでは一定間隔の通信を間引いて省電力化するのに対して、ZigbeeではEndDeviceが要求するPollingが通信間隔を決定することが分かりました。