2週間くらい前に「XBeeをはじめてみよう(シリーズ1編)」という記事を書きました。その記事ではXBeeシリーズ1を使ったArduino Uno R3とWindows PCのデータ通信を無線化しました。今回はXBee ZB(シリーズ2)を使って、同じようにArduino Uno R3とWindows PCのデータ通信を無線化します。
*スケッチのアップロードはUnoをPCに直結して行います。またOSはWindows 7で、Arduino Unoは既に使用経験がある(Arduino IDEをインストール済み)という前提で話を進めますので、ご了承ください。
全体の流れは以下の通りです。
- 下準備
- X-CTU(XBee設定ソフト)のインストール
- XBee USB アダプター(リセットスイッチ付き) の接続
- X-Beeの設定
- Arduino UnoをPCに接続して通信確認
- Arduino UnoをPCから切り離して通信確認
では、はじめます。
1.下準備
□用意するもの
- Arduino UNO
- ワイヤレスプロトシールド
- XBee USB アダプター(リセットスイッチ付き)
XBeeエクスプローラUSB もしくは XBeeエクスプローラUSBドングル でもOK - XBee ZB / チップアンテナ型*2個
今回はZB(シリーズ2)を使います。写真はチップアンテナ型ですが、ワイヤアンテナ型やU.FLコネクタ型にアンテナを付けたものでもかまいません。 - USBケーブル(A-B)
- USBケーブル(A-microB)
XBeeエクスプローラUSB の場合はUSBケーブル(A-miniB) 、XBeeエクスプローラUSBドングルの場合はPCへ直挿しあるいはUSB延長ケーブル(Aオス-Aメス)になります。
※他にArduinoを単独で動かすための電源をご用意ください。PCをもう1台使用されてもかまいません。
ところで、XBee ZBはZigBee規格によって1対1の接続以外に、スター型の1対多や、メッシュ型のネットワークも組めます。そのため、それぞれのXBeeに役割を割り当てる必要が出てきます。
役割は3種類あります。まずは、ネットワークの構築や制御を行うCoordinator(コーディネイタ)。これはZigBeeネットワーク中に1個だけ必ず必要になります。次は中継地点にも端末にもなるRouter(ルーター)です。最後に末端に接続されるEnd Device(エンドデバイス)です。End Deviceは省電力であるのが特徴です。
1対1接続の場合、一方は必ずCoodinatorでなければいけませんが、もう一方はRouterでもEnd Deviceでもかまいません。ただしXBeeをEnd Deviceにすると、自動的に省電力モードになって通信が反応しなかったりするなど、入門の動作確認としてはちょっと分かりにくなってしまいますので、今回はPC側のXBeeをCoordinator に、Arduino側のXBeeをRouterにすることにします。
では、実際の作業を始めます。
最初にXBeeの個別IDを控えておきます。個別IDはXBeeの裏面にあるので、ソケットに挿すと見えなくなってしまいます。またPCとArduinoのどちらに繋げるかあらかじめ決めておきましょう。個別IDは16進数で表され、上位8桁4バイト、下位8桁4バイトで出来ていて、上位8桁4バイトは固定された値0013A200になっています。
Coodinator PC側XBee個別ID: 0013A200 /[ ]
Router Arduino側XBee個別ID: 0013A200 /[ ]
また他のグループと通信が切り分けられるためのPAN IDを決めなければいけません。PAN IDも16進数で表され4桁2バイトの数値になります。0000とFFFF以外で任意に設定します。サイコロを4回振って決めてもいいかもしれませんね。このPAN IDが同じになっているXBee同士が通信を行えます。
PAN ID:[ ]
次にXBeeの設定ソフトX-CTUをダウンロードします。X-CTUのダウンロードページを開いてください。
ダウンロードページ: http://www.digi.com/support/productdetail?pid=3352
このページのDiagnostics, Utilities and MIBsをクリックします。
するとXCTU 32-bit ver. 5.2.7.5 installer(2012/7/20現在の最新版)が現れますので、これを右クリックして対象をファイルに保存して下さい。
場合によっては40003002_B.exe の発行元を確認できませんでした。の様な警告メッセージが出るかもしれませんが、無視して保存をします。
これで下準備は終了です。
2.X-CTU(XBee設定ソフト)のインストール
先ほどダウンロードしたファイルを実行して下さい。 警告が出ますが無視して実行します。
ファイルが展開され終わるといよいよインストールが始まります。
Next>をクリックします。
License Agreemetの画面が出ます。
同意できればI Agreeを選択し、Next>をクリックします。
Select Installation Folderの画面が出ます。
特に変更の必要が無ければ、そのままNext>をクリックします。
Confirm Installationの画面が出ます。
今までの設定に問題が無ければNext>をクリックします。
インストールの途中で、ファームウェアのアップデートをチェックするかどうかの画面が出ます。少々時間がかかると思いますが、推奨されているので実行してください。
はい(Y)をクリックします。
アップデートファイルのダウンロードが終了するとレポート画面が出ます。
確認してOKをクリックします。
Installation Comleteの画面が出ます。
Closeをクリックします。これでインストールは終了になります。
3.XBee USB アダプター(リセットスイッチ付き)の接続
XBee USB アダプター(リセットスイッチ付き) (XBeeエクスプローラUSB もしくは XBeeエクスプローラUSBドングルでも可)にArduino側XBee(Router)を載せ、PCに接続します。※最終的にXBee USB アダプター(リセットスイッチ付き) に搭載されるのはPC側のXBee(Coodinator)ですが、先にArduino側XBee(Router)の設定を済ませることとします。
この時、デバイス ドライバー ソフトウェアは正しくインストールされませんでした。と表示される場合があります。
表示されなければ4.XBeeの設定から続けてください。
スタートボタンをクリック、コンピュータを右クリックして、出てきたメニューの中のプロパティをクリックします。
デバイス マネージャーをクリックします。
!マークの付いているFT232R USB UARTを右クリックしてメニューの出てきたドライバーソフトウェアの更新をクリックします。
下段のコンピューターを参照してドライバー ソフトウェアを検索しますをクリックします。
参照を使って、Ardino IDEのフォルダ中の\drivers\FTDI USB Driversを選択し、次へをクリックします。
ドライバーがインストールされて、USB Serial Converterとして認識されます。閉じるを押して、画面を閉じ、COMポート番号を確認してください。
4.XBee の設定
2でインストールしたX-CTUのアイコンがデスクトップ上にあるので、それを起動します。
SelectComPortに3で認識させたUSB Serial Port(COMx)が表示されています。(xは3で確認した番号)
Communication with modem. OKと出たら接続出来ているので、OKをクリックして閉じます。
画面のModem Configurationタブをクリックします。
Readをクリックします。
XBeeの現在の設定値が読み込まれます。PAN IDは既定値が入っている場合があります。
Function SetがZIGBEE ROUTER ATとなっているのを確認してください。(もし違っていた場合は、変更してください)
ID-PAN IDをクリックして1で準備した16進数4桁2バイトのPAN IDを入力します。
DH-Destination Address Highをクリックして、0013A200(XBeeのID上位番号)を入力します。
DL-Destination Address Lowをクリックして、1で控えたPC側XBee(Coodinator)の固有ID下位番号を入力します。※このDH,DLは通信相手の番号なので、今設定しようとしているArduino側XBbee(Router)の番号ではありません。
下に少しスクロールして、Sleep Modeの設定箇所を見つけ、SM - Sleep Mode が 0 - NO SLEEP [ROUTER]になっていることを確認してください。
Sleep Modeを設定すれば、省電力に出来ますが、使い方によってタイムラグが発生したりするので、今回は使用しません。
入力が出来たら、WriteをクリックしてXBeeに設定を書き込みます。
書き込みが出来たら、XBee USB アダプター(リセットスイッチ付き) をPCから取り外し、XBeeをPC側(Coodinator)のものと差し替えます。そして再び、PCに接続してください。
今度は、PC側XBee(Coodinatoer)の設定をします。X-CTUを立ち上げなおし、Test/QueryのチェックをしたらModem Configurationタブを開きReadをクリックします。
さらにFunction SetでZIGBEE COODINATOER ATを選択してください。
設定項目が読み込まれたら、PAN ID,DH,DLを入力します。
DLにはArduino側XBee(Router)の番号を入力するのを忘れないでください。
Writeをクリックすると設定の書き込みが始まります。ファームもRouterからCoodeinatorに変更されるので、少々時間がかかります。
こちらの画面が出て完了です。
5.Arduino UnoをPCに接続して通信確認
このテストではArduino Unoには何も仕事をさせず、ただPCとXBeeをつなぐ基板として使うためです。スケッチを使った通信確認は6で行います。
Arduino Unoに何もシールドを載せない状態で、PCに接続します。
Arduino IDEを起動します。
Arduino IDEのメニューからファイル(File)→ スケッチの例(Examples)→01.Basics→BareMinimumを開き、Arduino Unoにアップロードします。
Arduino IDEを閉じ、Arduino UnoをPCから取り外します。
ワイヤレスプロトシールドのSERIAL SELECTスイッチをUSB側にします。
ワイヤレスプロトシールドにArduino側XBeeを載せ、Arduinoに接続します。
X-CTUを2つ起動し、PC側,Arduino側のそれぞれのCOMポートを選択します。
Terminalタブを開いて、入力エリアをクリックし、適当な文字列をタイプします。
XBee同士の通信が出来ていれば、タイプした入力エリアには青い文字で、もう一方の入力エリアには受信したデータが赤い文字で表示されます。双方の入力エリアで試してみてください。
6.Arduino UnoをPCから切り離して通信確認
いったんArduino UnoをPCから切り離し、さらにワイヤレスプロトシールドをはずします。
再度Arduino UnoをPCに接続し、Arduino IDEを起動します。
Arduino IDEのメニューからファイル(File)→ スケッチの例(Examples)→04.Comunication→ASCIITableを開き、Arduino Unoにアップロードします。
Seleal Moniterを開きます。
Arduino UnoからASCII Tableのキャラクタマップが送信されてきます。ここまでは有線接続です。
確認が出来たらSerial Moniterを閉じます。
またArduinoUnoをPCから切り離します。
ワイヤレスプロトシールドのSERIAL SELECTスイッチをMICRO側にして、Arduino Unoに載せます。
Arduino IDEのメニューのツール(Tools)→シリアル ポート(Serial Port)→PC側XBeeの使用しているCOMポートを選択します。
Serial Moniterを立ち上げたら、Arduino UnoをPCとは別の電源に接続します(別のPCに接続してもかまいません)
すると、Serial Moniterに先ほどと同様に文字データが送られてきます。
これで、Arduino Uno上のスケッチがXBee間の無線通信を通してPCにデータを送った事が確認できました。
ワイヤレスプロトシールド上のRESETスイッチを押すと再度文字列が送信されます。
以上で、XBeeをはじめてみよう(ZB編)は終わりです。ここまで設定と動作確認が出来ていれば、まずはXBeeを有線シリアル通信の置き換えに使えると思います。
XBeeは他にも色々機能がありますが、ここでは説明し切れませんので、オフィシャルの資料や書籍・雑誌、ブログなどをご参照ください。