このページにはXBee ZigBee の基本的な使い方や動作確認を行うための情報を掲載しています。まずは、簡単に動かして動作確認をしてみましょう。
なお、XBeeモジュールには様々な種類があり、それらの違いについては「XBee ZigBee Wi-Fi モジュールの種類」にアンテナ、無線性能などの特長や選び方について記載していますので参照ください。
XBeeをPCに接続するにはDigi純正のXBIB-U-DEVボードやsparkfun製XBeeエクスプローラUSBなどを使用します。下記は市販のUSBエクスプローラの比較表です。それぞれの製品によって機能に違いがありますので、比較して購入すると良いでしょう。
親機に使用するのであればLEDやSWは不要のように思われるかもしれませんが、開発時のデバッグ用と考えるとなるべく多くの機能がついている方が良いでしょう。なお、PCと接続する場合は必須ではありませんが、子機として使用する場合はネットワーク参加状態の確認と参加要求などを行うためにアソシエートLEDとコミッションSW(スイッチ)があった方が良いでしょう。
下図は上表の中でも多機能なUartSBee(参考価格¥1,964円)です。XBee以外にもArduinoとのシリアル接続端子(右側)やBitbangによるArduinoのファームウェア書き込み用の端子(コネクタは別売)もあります。
前述の@よりも安価に接続する方法もあります。Arduino Ethernetや LilyPad などの書込みに使用するFTDI Basic Breakout 3.3V(FT232RL搭載小型USB-シリアルアダプタ 3.3V)や秋月 AE-UM232Rを使用してXBeeのシリアルをUSBに変換する方法です。本ページの先頭の図はXBeeをFTDI Basic Breakout 3.3Vに接続した一例です。
FTDI Basic との接続方法
| 秋月 AE-UM232R との接続方法
| XBee ZigBee
|
| FTDI Basic
| XBee ZigBee
|
| 秋月 AE-UM232R
| pin
| name
| pin
| name
| pin
| name
| pin
| name
| 10
| GND
| ―→
| 6
| GND
| 10
| GND
| ―→
| 7
| GND
| 3
| DIN
| ←―
| 3
| TX0
| 3
| DIN
| ←―
| 1
| TXD
| 2
| DOUT
| ―→
| 2
| RXI
| 2
| DOUT
| ―→
| 5
| RXD
| 1
| VCC
| ←―
| 4
| 3.3V
| 1
| VCC
| ←―
| 19
| 3V3
| |
下図にUSBシリアル変換モジュール「秋月 AE-UM232R」を使用した例を示しています。XBeeモジュールをXBee用の電源レギュレータ付基板「秋月 AE-XBee-REG-DIP」に載せて、AE-UM232Rと接続します。電源はAE-UM232Rの15番ピンに5Vが出ていますので、それをAE-XBee-REG-DIPの1番ピンに接続します。(上の表はXBeeの電源ピンへ直結する場合を想定しているので3.3V出力である19番ピンをXBeeの1番ピンに接続しています。)
PCへはFTDI製のVCPドライバのインストールが必要です。VCPドライバは下記のページからダウンロードできます。
USBシリアル変換ICの安定性についての補足説明
XBeeとPCを接続する純正XBIB-U-DEV評価ボードはMaxStream社が設計したもので、FTDI社製FT232BMが採用されました。その後、DigiがMaxStreamを買収しましたが同設計を継承したFTDI製FT232RL等が使用され続けています。一方、ZigBee ICにはEmber社のEM250およびプロトコルスタックをベースにXBee独自機能が追加されています。シリアル経由のファームウェア書き込み用ブートローダもEmber社のものをXBee専用に変更したものが使われており、その評価用としてもFTDI社のシリアル変換が使用されています。
このような経緯から、ファームウェアの書き込みにはFTDI製のUSBシリアル変換ICを使用することを推奨します。実際、他社製では動作の安定性に欠ける場合が確認できています。
ただし、最近になって、SILICON LABS社がEmber社を買収しており、SILICON LABSもUSBシリアル変換ICを提供していることから、今後はSILICON LABS製のUSBシリアル変換ICについても注目してゆく必要があります。
電源の安定性についての補足説明
上記ではFTDI社製FT232RLに内蔵されているLDO電源を使用しています。この電源の元々の目的はUSB信号線を3.3Vでプルアップするための電源で50mAまでしか出力できませんが、実力的にXBeeを動作させることが可能です。(とはいっても、XBee PROは接続しない方が良いでしょう)
但し、周囲温度やチップのバラつきなどで安定的に動作しない恐れもあります。そういった場合は電源に大きなコンデンサを追加したり、ATコマンドの「ATPL00」や「ATPM00」を使って送信出力を下げることで使えるようになります。(コンデンサを追加した場合はオフ時の逃がし用ダイオードも必要です)
ブートローダ書き込みのための接続
シリアル信号のTXとRXを接続しておけばファームウェアの書き換えは可能です。しかし、ブートローダを書き込む場合は、TXとRX以外に秋月 AE-UM232RのDTR(2)、RTS(3)をXBeeに接続する必要があります。ファームウェアの書き込みに失敗してしまった場合などに必要になります。
通信を行うには少なくとも2台のXBee ZigBeeモジュールが必要です。2台とも上記のように市販品やFTDI Basic Breakoutなどを使ってもよいのですが、パソコンにずっと接続して使うような場合は片方にUSB変換基板「XBee-Fly USB」を製作して用いる方法もあります。但し、こちらはXBeeモジュールのファームウェアの書き換え機能などを省略しているので、少なくとも1台は市販品が必要です。また、製作にはハンダ付けやマイコンの知識、マイコンのソフトウェアの書込み器が必要です。(前述の秋月 AE-UM232Rで書き込むことも可能) |
XBee-Fly USB(詳細=「XBee-Fly USBの作り方」) |
XBeeネットワーク内には少なくとも1台の「Coordinator」と呼ばれる「ネットワーク親機」が必要です。XBeeモジュールを購入した時点では「Router」と呼ばれる「子機」に設定されているので、何台か購入したXBeeモジュールのうちの1台を「親機」に設定しなければなりません。実際には「Router」同士でも通信が出来るのですが、本来の使い方では無いのでここでは省略します。
XBeeモジュールを設定するにはDigiのホームページからX-CTUというソフトウェアをダウンロードします。下記のリンクで「Diagnostice, Utilities and MIBs」の項目をクリックすると「XCTU xxxx installer」が現れますので、そちらからダウンロードしてインストールします。
X-CTUを起動し、「PC-Settings」タブ内でXBeeモジュールを接続したCOMポートを選択します。下図では3つのCOMポート番号が括弧内に表示されていますが、選択するのはXBeeモジュールが接続されているCOMポートです。COMポートの名前はFTDIドライバで割り当てられた名前で、通常は単に「USB Serial Port」と名づけられます。COMポートが不明な場合は、一度、USBを抜いて、X-CTUを再起動したときに見えなくなったCOMポートを見つけるか、適当に選択して「Test/Query」のボタンでテストして探します。
次に「Modem Configuration」のタブに移って「Read」をクリックすると下図のような画面が表示されます。「Modem」の部分にXBeeモジュールの種類が、「Function Set」の部分にファームウェアの種類、「Version」にファームウェアのバージョンが表示されています。また、下半分のエクスプローラ風の枠にはXBeeモジュールの設定値が表示されます。
ここで「子機」を「親機」に変更してみます。上図のファームウェアの種類「Function Set」には「ROUTER」の文字が含まれていることから、このXBeeモジュールは「子機」であることが分かります。ここでは「Coordinator」に変更するために、プルダウンメニューから「ZIGBEE COORDINATOR AT」を選択します。
最後に「Write」ボタンを押すとXBeeモジュールにCoordinator用のファームウェアが書き込まれて、「子機」を「親機」に設定することが出来ます。「子機」に戻したい場合は「ZIGBEE ROUTER AT」を選択してから「Write」ボタンで書き込みます。書き込み後は「Restore」を選択し、設定を初期化しておきます。経験上、初期化しないと不具合が発生しやすいです。
ファームウェアの種類に「AT」のつくものと「API」のつくものがあります。「AT」のつくものを使用するとX-CTUの「Terminal」からATコマンドを入力することが出来ます。しかし、ATコマンドは親機として使用するには不十分な機能しか使えません。したがって、本来の親機では「API」を使用します。
※ここでは実験のために「AT」を選択しています。
※当サイトで配布している「オリジナル XBee 管理用ライブラリ ZB Coordinator API」では本来の「API」を使用しますので、その時は「API」に再変更してください。
次に2台のXBeeモジュールのネットワーク参加設定(以下ペアリング)の方法について説明します。ペアリングにはいくつかの方法があります。初期状態では電源を入れるだけでペアリングが可能です。自動でペアリングが出来ない場合は、「ATNR」を実行するかCommissionスイッチを4回押下してネットワーク解除を行ってからペアリングを行います。なお、ここでは2台なのでペアリングという表現を使用していますが実際に行っているのはネットワーク参加設定です。
|
CommissionスイッチはXBeeモジュールの20番ピンを使用します。Coordinator/End Device共用XBee基板回路図に記載のXBeeモジュールの右上端の「参加設定」と書かれたスイッチです。スイッチを押すとGND(20番ピン)に接続されるように配線します。
プッシュ 回数 内容
| 1回
| ネットワークに参加します。参加中の場合は他機の | 参加状況LEDを、1秒間、高速に点滅します。 2回
| ネットワーク参加に制限をかけている場合に、60秒 | 間、制限を解除します。(≒ATNJ3C+再起動) 4回
| 他のネットワークに参加してしまった場合に、ネッ | トワーク設定を消去します。(≒ATNR) |
うまくいかない場合は、まずX-CTUの「Modem Configuration」のリスト中にある「I/O Settings」の「D0」の設定が[1]の「COMMISSIONING BUTTON」になっていることを確認します。もし、変更していた場合は訂正して「Write」します。
誤って近所のZigBeeネットワークに参加してしまったり、他のネットワークに参加していたXBeeモジュールの場合は、一度、該当するXBeeモジュールのネットワーク設定をリセットする必要があります。XBeeモジュールの電源が入った状態でAD0(20)に接続したプッシュスイッチを連続で「4回」プッシュします。
ペアリングが完了している状態で、XBeeネットワーク参加プッシュスイッチを1回だけ押すと参加している全てのXBeeモジュールの参加状況LED(ASSOCIATION出力)が1秒間、高速点滅します。親機、子機のどちらを押してもかまいません。ただし、End Deviceは親機のボタンを押された瞬間に起動していなければ点滅しませんので、子機側のボタンを押して確認します。
X-CTUのTerminalを使用してATコマンドを使用します。通信を行いたいXBeeモジュールが2台の場合はX-CTUを2つ起動し、それぞれ異なるCOMポートの「Terminal」を開きます。
XBeeモジュールへのコマンドは、X-CTUのTerminalから「+」キーを3回入力すると、1秒後に続いて「OK」の応答があり、ATコマンド入力モードに切り替わります。但し、初期設定だと10秒後にATコマンドモードが解除されますので、実際のコマンドは速やかに入力しなければなりません。また、「+++」を入力して1秒後の「OK」の応答前にコマンドを入力してしまっても、入力は受け付けずにATコマンドモードが解除されます。※「+++」のあとに「改行(Enter)」も入力してはいけません。
1秒後に「+++」に続いて「OK」が表示されれば上図のようにATコマンドモードに入っていますので、「A」「T」「改行(Enter)」を入力し「OK」の応答があることを確認します。「AT」は何もしないで「OK」のみを応答するコマンドです。
「AT」を含むATコマンドは「AT」から始まる命令で、コマンドの語尾には「改行(Enter)」が必要です。以降、改行については明記していない場合がありますが、「+++」は改行なし、ATコマンドには語尾に改行を入力してください。
ペアリングが正しくできているかどうかをATコマンドで確認します。「+++」を入力して1秒後の「OK」の応答後に「ATND」と入力します。アルファベットは大文字でも小文字でも構いません。下図のように登録されている相手の上位アドレス「0013A200」と下位アドレス「00123450」が表示されます。
自分自身のアドレスはXBeeモジュールの背面もしくは「ATSH」(上位8桁)と「ATSL」(下位8桁)で知ることが出来ます。
なお、アドレスは上位8桁、下位8桁を合わせた16桁(8バイト・64ビット)で表されますが、XBeeを使用している限り上位8桁の「0013A200」は変化しません。
ここでは、XBeeモジュール(ZB)からメッセージを送信する方法について説明します。まずはブロードキャスト(ネットワーク内の全XBeeモジュールへの)送信方法について説明します。
送信したいXBeeモジュールに対して「+++」入力でATコマンドモードに設定し、「ATDH00000000」「ATDL0000FFFF」「ATCN」を入力します。「ATDH」と「ATDL」はあて先を設定するコマンドで、コマンドに続いて8桁の16進数を入力しています。上位アドレス「00000000」と下位アドレス「0000FFFF」はブロードキャストを意味しています。0を省略して「ATDH0」と「ATDLFFFF」としても同じです。また、「ATCN」はATコマンドモードを解除するコマンドです。(入力しなくても10秒待てば抜けます)
この状態で、テキストを入力すると同じネットワークに参加する全てのXBeeモジュールに入力した文字を送信することが出来ます。また、受け取ったXBeeデバイスのシリアルポートからデータ出力され、そのシリアルポートが接続されたパソコンのTerminalに表示されます。
|
以上はブロードキャストの送信ですが、ブロードキャストは受信側が省電力状態であったり、Routerを経由して接続されていたりするとメッセージが正しく届かない場合があります。また、3台以上のXBeeモジュールがあった場合に不要な相手にもメッセージが届けられてしまいます。これらを防ぐために宛先指定送信があります。
宛先指定送信は特定の相手だけにメッセージを届ける送信方法です。まずは相手先のアドレスを確認します。既に実施したようにATコマンドモードで「ATND」と入力すると、送信可能な相手のアドレス等の情報が表示されます。
接続相手のアドレスが分かれば、「ATDH」と「ATDL」で宛先を設定します。「ATDHxxxxxxxx」「ATDLxxxxxxxx」の「xxxxxxxx」に、それぞれ上位アドレスと下位アドレスを入力します。そして、「ATCN」でATコマンドモードを抜けます。
この状態で、テキストを入力すると相手にメッセージが伝わります。ネットワーク内に2台しかいない場合はブロードキャストと変わりない動作に見えます。
|
最後に、比較的、よく使用するATコマンドについて説明します。「ATNJ」はCoordinatorまたはRouterに対する設定で、新しい機器の参加を受け入れる時間を設定します。設定した秒数を超えると新しい機器の参加が受け入れられなくなります。
「ATOP」はPAN ID(ネットワークID)を表示します。同じネットワークに参加している機器は同じPAN IDになっています。CoordinatorのPAN IDと他の機器のPAN IDを確認して、一致していなければ、接続されていないか他のネットワークに接続されています。
「ATNR」はネットワーク設定をリセットします。各機器がCoordinatorと同じPAN IDでは無かった場合に、実行することで同じPAN IDに設定されるまで繰り返します。
Coordinatorで実施する場合はCoordinator以外の機器もリセットする必要があります。引数に1を加えた「ATNR1」を実行すると傘下の全ての機器のネットワーク設定をリセットすることが出来ます。
AT
内容
| +++
| 1秒後にATコマンドモードに入る。コマンドにCRは不要
| ATCN
| ATコマンドモードを抜ける。データ転送になる。
| AT
| 何もしない。正常ならOK応答
| ATNJ
| ネットワーク参加受付時間[秒]の設定。FFで無制限。
| ATOP
| PAN ID表示。Coordinatorと同一のPAN IDが表示される
| ATNR
| ネットワーク設定をリセットしてネットワークの再構築
| ATSH | ATSL 自分のアドレスの上位4バイト(8桁の16進数) | 自分のアドレスの下位4バイト(8桁の16進数) ATND
| ネットワーク内の機器検索。3〜4行目が発見したアドレス
| ATDH | ATDL 接続相手のアドレスの上位4バイト。 | 接続相手のアドレスの下位4バイト。 |
この中でも「ATNJ」は重要です。購入した状態のままだと「ATNJ」は「FF」に設定されており、常に参加受け入れ状態になっています。この状態だと、例えば、近所で別のZigBeeネットワークを構築しようとしても参加受け入れ状態のネットワークを見つけてしまって新たなネットワークの構築が行えません。実験で複数のネットワークを構築するときも妨げになります。もちろん、セキュリティの観点からも容易にネットワークに侵入できる状態は好ましくありません。
したがって、通常は30秒くらいに設定しており、必要に応じて参加設定を行うのが良いでしょう。「ATNJ1E」で30秒に設定します。Commissionボタンを押したときや電源を入れなおしたとき、リセットをかけると30秒間、ネットワークの参加を受け入れます。ネットワークの初期化を行うと「FF」に戻るので忘れずに「1E」に戻します。
次は本格的なセンサネットワークを構築する手順の説明です