XBeeの使い方(スリープ無し,電子工作で簡単に無線通信、リモートセンシングを実現する方法)
無線通信とリモートセンシング
電子工作でも2.4Ghz帯を用いた無線通信が簡単に出来るようになりました。
今回はDigi international社から販売されているXBeeモジュールを用いて、無線通信を設定する手法をレポートします。
以前に報告いたしました「Arduinoを用いた進化するお風呂タイマー」においては赤外線通信が出来ない(直接目視できない)離れた距離にある二つのデバイスの通信にドアチャイムを分解して用いておりました。デジタル通信の導入で、混信の心配が無く遠くまで届くようになりました。Last undatepd on Jan. 4, 2012.
動作状況(左がレシーバーとArduino,右がトランスミッター(送信機))。レシーバーの緑LEDに注目してください。
用意する部品類
無線通信の確立には最低2台のXBeeモジュールが必要となります。一台2000円弱ですので、少し値段が張りますが、
XBeeはかなりの高機能であるため、たくさん遊べそうですね。
2番目のXBee変換モジュール2 mmピッチのXbeeを標準の2.54 mmピッチに差し替えるための物です。これは電圧レギューレータを内蔵しているので非常に使いやすいものとなっております。3番目のUSB-シリアル経由のデータ書き込みデバイスは他の安価なものでも代替可能です。
- XBeeモジュール,2台
- XBee変換モジュール
- USB-シリアル経由XBee用データ書き込み機(1台)
- Arduino開発環境
- ブレッドボード、電池、LEDなど。
XBeeユニットと書き込み用のUSB接続機
XBeeユニット。小さいですね。消費電力も少ないです。
XBee変換モジュールの組み立て手順。
手順1:X-CTUのダウンロードとインストール
まずはXBeeの設定を変更するために役に立つソフト(X-CTU)を
をDigi Internaational社のウェブページからダウンロードします。
ダウンロードページ
手順2:2台のXBeeの設定変更
XBeeの設定方法については明確な記述をした日本語のウェブページがありませんね。ポイントは以下の2点かと思われます。
- 通信を行うグループで同じPAN IDを設定
- 通信グループの1台をCoordinatorに設定
単なるシリアル通信機として用いる場合には2台ともATモードを用います。他方、子機にアナログ、デジタル入出力をさせて送信させる場合には、親機(Coordinator)の方をAPI設定とする必要があります。
レシーバー(受信機,Coordinator)の設定
- ZigBee Coordinator API (今回は子機で読み取らせたデジタル信号を受信させるので、(ATではなく)API設定にする必要があります。)
- PAN ID=1357 (16進数で最大0×FFFFFFFFFFFFFFFFまでの値。適当な10進数数値をつければOK)
- ATDH(Destination High)=通信する相手の上位アドレス(0013A200)
- ATDL(Destination Low)=通信する相手の下位アドレス(********,16進数8桁。XBee本体の裏に記載あり)
- APIモードをenableとします。
ソフトウェア(X-CTU)での設定の変更画面。
Coordinator側の設定。Destinationに通信相手のアドレスを記入する。
APIモードをenableとします。モードは1の方がデータが扱いやすいです。(2012年6月修正)
固有の値を持つアドレスはXBeeの裏側に記載があります。
トランスミッター(送信機,ルーター)の設定
- ZigBee rooter AT (送信側はATモードです。)
- PAN ID=1357 (上記Cordinatorと同じ番号)
- ATDH=通信する相手の上位アドレス(13A200)
- JVchannel=enableとして、通信チャネルの確立を確認するモードとします。
- ATDL=通信する相手の下位アドレス(********,16進数8桁。XBee本体の裏に記載あり)
- IOsettingにおいてD0をDigital In端子として働かせます。
- IO samplingのIRにおいてデータ送信周期を1秒=1000 msec(=3E8, 16進数)とします。
Rooter ATモードとして通信先のアドレスを打ち込みます。
JVchannelをenableとします。
Inputとして使用する端子と機能を選びます。(ここではD0=Digital In)。
ルーターの設定はTerminal(Tera Termなどでも良いですし、X-CTU中のterminalでも可)を
用いて、キーボード入力により変更/確認することが可能です。[+++]を押して1秒待つと
通信モードに移ります。
設定書き込み時のエラーに対処する方法
設定書き込み時にエラーが出た時には、そのままの状態でXBeeをUSB書き込み機から一度引き抜いてから差し込みます。
これでresetされ、自動に書き込みが始まります。
データ書き込み時にエラーが出た場合には、XBeeをそのまま引っこ抜き、再度差し込みます。
データの読み取り
受信データのパソコンでの読み取り
以上の設定で、3-5 V程度の入力をXbee変換基板に接続することで動作が始まります。
このデータをパソコンで読み取るには、XBee用のUSB-シリアル変換アダプタを用いてシリアル通信で
受信します。DI=LOW,HIGHの時で20バイト目のデータが変化することがわかります。このどちらかのデータが1秒(1000 msec)ごとに送信されます。
データの番号(バイト)
00 01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21
DI=Highの時
7E 00 12 92 00 13 A2 00 40 69 2E F6 24 DA 01 01 00 01 00 00 01 E9
DI=Lowの時
7E 00 12 92 00 13 A2 00 40 69 2E F6 24 DA 01 01 00 01 00 00 00 EA
受信データのArduinoでの読み取り
親機で受信したデータをArduinoで読み取るスケッチを用いることでArduinoで読み取って、マイコン動作に移すことも可能です。受信したデータのうち20バイト目のデータのみを取り出し、これが1の場合には12番端子の出力を1秒間 Highとするプログラムです。データを受信している確認のために
スタートバイトを受信したら13番端子に接続されたLEDを10 mseだけ点灯させるように設定しています。この時のXBeeとArduinoとの接続は簡単で以下の通りです。もちろん、XBeeにもArduino(ATmega)にも所定の電源電圧を印可する必要があります。
XBeeとArduinoとの接続
- XBee(DOUT=2番端子)=Arduino(D0=RX,ATmegaの2番端子)
- XBee(DIN=3番端子)=Arduino(D1=TX,ATmegaの3番端子)
パソコンで受信した受信データの一例。
1秒ごとに22バイトのデータが送られています。
上のArduinoスケッチではここから必要なデータ(後ろから2番目)を抽出しています。
宣伝
スイッチサイエンス (ほぼ最安値でXBee, Arduino部品)
初めてのトライの時にはネットの情報より書籍が役に立ちますよね。
戸田システムウェア
ここで公開するアイデア/装置は安全性を保障しておりません。
用途に応じた設計を行い、十分な安全検査を行ってからご利用ください。
本サイトの情報の営利目的での利用はご遠慮ください。
本サイトの内容の無断転載を禁じます。© 2012 TYK