XBee ZigBee End Device ボタンの製作方法

by ボクにもわかる地上デジタル

XBeeメインメニューへ戻る
地デジトップへ戻る


XBeeボタンの製作例
ZigBee ボタンの製作例

このページについて

 このページではZigBee の END DEVICE 用 ボタン子機 XBee Buttonの製作方法と CYCLIC SLEEP with Pin-Wakeを使用した設定に関する情報を掲載しています。
 低消費電力で動作させるためにEND DEVICEとして動作させています。そのあたりの説明や設定が分かりにくい場合、読み飛ばしていただき、まずはROUTERで動作させて確認してみてください。(XBeeを購入した状態ではRouterになっていますので、X-CTUでのファームウェアを書き込まなければ、Routerとして動作します。)


製作方法

 まずはブレッドボードを使用して製作します。このまま秋月で売られている「片面ガラス・ユニバーサル基板(ブレッドボード配線パターンタイプ)」で製作しても構いません。
 下図はボタン(子機)の製作例です。右側のプッシュスイッチを押すと XBeeの PORT 1の状態が変化(Hレベル→Lレベル)して親機へボタンが押されたことを知らせます。左上のプッシュスイッチはコミッション用の参加設定スイッチです。また、この製作例ではXBeeのSLEEP_RQ端子(XBee_pin 9)を利用したZigBee End Deviceによる低消費電力動作に対応しています。なお、ZigBee Routerとして動作しているときは信号が無視されるだけなのでSLEEP_RQ端子へ接続していても接続していなくても問題ありません。

XBeeボタンの製作例
ZigBee ボタンの製作例

 左上のコミッション用の参加設定スイッチ(基板1行J列目)はGNDとXBeeの20番ピンに接続する対角(図の右上と左下)の2端子のみを接続し、残る2端子は折り曲げて基板に差し込まないようにします。ブレッドボード配線パターンのユニバーサル基板を使用する場合は、ボタン付近にある背面のマイナス電源ライン(-)パターン1行目と3行目間をカッターなどで切断しておく必要があります。(XBeeの20番ピンがGNDに接続されないように)。ブレッドボードではパターンの切断が出来ないので、プッシュスイッチの足を内側に折り曲げて挿さらないようにします。

End Deviceの設定方法について

 XBeeを低消費電力で動作させるためには、購入時のZigBee Routerの状態からZigBee End Deviceに変更する必要があります。(Routerのままでも動作はします。)
 End Deviceへの変更するにはX-CTUを使用してファームウェアを書き換えます。X-CTUの「Function Set」のファームウェアの種類の部分で「ZIGBEE END DEVICE AT」を選択します。X-CTUの使い方やファームウェアの変更方法「XBee ZigBee 基本編 ワイヤレス通信を始めよう」を参照してください。
 一度、End Deviceに設定すると、XBeeはCYCLIC SLEEPモードで動作するようになりますので、以降はX-CTUとXBeeとの通信を行う直前にXBeeのリセットを押して、すばやくX-CTUを操作する必要があります。CYCLIC SLEEPモードではXBeeの電源がOFF状態になる期間が発生するためです。また、XBeeをリセットすることで一定の時間だけXBeeを強制的に起動させることが出来ます。
 XBeeの設定はX-CTUを使用しなくても、シリアルやXBee親機からのATコマンドでも設定することが出来ますが、スリープとなっているEND DEVICEにATコマンドで設定するのは難しいと思います。End Deviceの各種設定については、XBeeに予めX-CTUで設定しておくことをお勧めします。

End DeviceのCYCLIC SLEEP with Pin-Wakeについて

 ZigBee End Deviceが低消費電力で動作するための動作モードです。CYCLIC SLEEPはEND DEVICE が定期的に起動して省電力に動作するモードです。SYCLIC SLEEPの詳しい説明は「XBee ZigBee スリープ方法 CYCLIC SLEEP」を参照してください。
 ZigBeeボタンではCYCLIC SLEEPモードに加えてSLEEP_RQ端子から起動する機能を併せ持ったモードであるCYCLIC SLEEP with Pin-Wakeモードを使用します。
 設定にはX-CTUを用います。X-CTU の Sleep Modes (SM)を0x05(Cyclic Sleep Pin-Wake)に設定することで、このモードに設定できます。
 また、ボタン入力のIOポートの設定やIC(I/O Change Detection)も設定しておきます。具体的な基本設定例を下表に示します。

ZigBee End Device ボタン用 X-CTUの基本設定
AT name 初期 説明
SM Sleep Mode 0x04
Cyclic
0x05
Cyclic+Pin
No Sleep(00)/Pin Hibernate(01)/Cyclic Sleep(04)/Cyclic Sleep Pin-Wake(05)の切り換え。Cyclic Sleep wakes on timer expiration.
ST Time before Sleep 0x1388
5000[ms]
0x01F4
500[ms]
シリアルやRFの通信終了後、省電力モードに移行するまでの待ち時間[ms]。
SP Sleep Period 0x0020
32x10[ms]
0x07D0
20秒
ZigBeeデータ通信のための省電力モードの持続時間x10[ms]。RouterとCoordinatorは情報の最大保持期間。設定範囲は0020(320ms)〜0AF0(28sec)。
SN Sleep Number 0x0001
毎回起動
0x0001
毎回起動
外部CPUを起動するまでの起動カウンタ。SP後に通信データが無い場合は省電力モードになり、それがSN回続くと外部On/Sleep pinへON信号(H)を出力する。(SP×SNの間隔で起動)
SO Sleep Options 0x00
オフ
0x00
オフ
0x02 - Wake for ST time on each cyclic wake (after sleeping for SP*SN)
0x04 - Enable extended cyclic sleep (SP毎にポーリングしない)
DH Destination Address High 0x00000000 0x0013A200 親機(宛先)の上位アドレスを指定する
DL Destination Address Low 0x0000FFFF 0xXXXXXXXX 親機(宛先)の下位アドレスを指定する
D1 AD1/DIO1 Config. 0x00 0x03 DIGITAL INPUT
PR Pull-up Resistor 0x1FFF 0x1FFF プルアップ有効(ボタン入力のプルアップを無効にしたい場合は0x1FF7)
IC I/O Change Detection 0x0000 0x0002 port 1を検出に設定(port1〜3を検出にする場合は0x000Eを設定)

 なお、END DEVICEをX-CTUで読み込み/書き込みするには、前述のようにCYCLIC SLEEPを一時的に解除するために頻繁にリセットボタンを押す必要があります。このとき、XBeeモジュールがソフトウェア的に壊れることもあります。XBeeモジュールのソフトウェアが壊れてしまった場合は、「Always Update Firmware」をチェックしてFirmwareの書き込みを行うことで初期状態に戻すことが出来ます。Firmwareの書き込みにはFTDI製のUSB変換ICを使用します。また、書き込み後にチェックを外すのを忘れないようにします。

本ハードウェアの注意点

 この回路には一つの課題があります。ボタンを押下するとXBeeのSLEEP_RQ端子の電圧が変化(Hレベル→Lレベル)してXBeeモジュールが起動し、そのすぐ後に、XBeeのDIOポート1の電圧もHレベルからLレベルに変化し、XBeeモジュールはDIOポート1の状態変化を検出します。ところが、ボタンを押下した状態のままにしておくと、電圧Lレベルの状態のままXBeeモジュールがスリープに入ってしまいます。XBeeモジュールがスリープ状態の時にボタンを放すと、ポート1の電圧がHレベルに戻ってもXBeeモジュールは検出することが出来ません。したがって、SP値で設定した20秒に1回の起動のタイミングまでXBeeモジュールは電圧の変化に気づきません。とはいっても、最大20秒後にはHレベルに戻ったことを検出して状態変化土を送信しますので、ボタンが押された通知(Lレベル)だけを親機側で検出するようにすれば、多くの場合は問題ないでしょう。

ユニバーサル基板上での製作例

 最後に2.0mmピッチのユニバーサル基板上での製作例を示します。左上の端子は電源入力用です。2mmピッチ基板に45°の角度で実装すると、なんとなく実装することが出来ます。左上のLEDはアソシエートLEDです。やはり45°の角度で実装し、すぐ左下にある1kΩの抵抗を経由してXeeの15番ピンに接続します。
 右側のボタンは上側がコミッショニング用のボタン、下側が呼び出し用のボタンです。右下の端子はポート1のボタンを外部信号で押下するための入力端子です。入力抵抗100kΩを経由し、トランジスタ(2SC1815)のエミッタが接地され、コレクタはボタン(DIOポート1)に接続されています。その他の回路はブレッドボードのものと同じです。

XBeeボタンの製作例
ZigBee ボタンの基板製作例

ソフトウェア

 当サイトで公開しているPC用およびH8マイコン用の「XBee 管理用ライブラリ ZB Coordinator API」を親機側のXBeeに使用することができます。受信用関数「xbee_rx_call」を用いることで、子機となるZigBee ボタンから送られてきた信号を親機側で検出することが出来ます。
 ZigBeeボタンを検出するためのサンプルソフトは「基本編 プログラムを作ってみよう」のサンプル2「スイッチ状態取得」を参照してください。
 ただし、ZigBee End Deviceとして動作させたいは、本機(子機)のGPIO設定を行っている「xbee_gpio_init(dev_gpio);」の部分を削除しておいたほうが良いでしょう。本関数で設定しているのは、前述の基本設定の表に記したD1値とIC値の設定ですので、親機から設定する必要が無いからです。また、SP値を20秒に設定しているので、親機からコマンドを送っても、それを子機が受信するまでに最大20秒が必要です。また、親機側のXBeeにもZigBeeボタン(子機)に設定したSP値とSN値の同じ値を設定しておく必要があります。


XBeeメインメニューへ戻る

地デジトップへ戻る

XBee USB変換基板 XBee-Fly USB

ピッチ変換基板 XBee-Fly


Arduino互換ボード AE-ATmegaの製作と使い方