Arduino XBee ネットワーク実験キットは、ワイヤレスネットワークでデータ通信を行うための実験キットです。
ソリューション例として、温度・湿度を計測するセンサネットワークが簡単に構築できます。
データ通信は、Digi社のXBeeワイヤレスモジュールを使用します。
XBeeワイヤレスモジュールは、ZigBee製品認証を取得した製品で、簡単にZigBeeワイヤレスネットワークを構築できます。
この実験キットでは、XBee製品シリーズの"XBee(R) ZB RF Module"を使いZigBeeワイヤレスネットワークを組んでいます。
XBee(R) ZB RF module(以下XBee ZBと略)は、ZigBee PRO (ZigBee2007)のプロトコルを採用しています。
ファームウェアを書き換えることによって、コーディネータ、ルータ、エンドデバイスに設定することができます。
ファームウェアバージョンは以下の種類があります。
20xx Coodinator AT/透過モード
21xx Coodinator APIモード
22xx Router AT/透過モード
23xx Router APIモード
28xx End Device AT/透過モード
29xx End Device PAIモード
XBee ZBには、透過モードとAPIモードの2種類があります。それぞれ、モジュールへの通信やコントロール方法が異なります。
今回のセンサネットワークでは、単純にエンド・デバイスからコーディネータにデータを送信するだけですので、分かりやすい透過モードを使います。ちょうど、シリアル通信を無線通信に置き変えたと考えられます。
APモードを使うと、遠隔のモジュールの設定を変更することも可能にjなり、より複雑で高度な制御が可能になります。
XBee ZBは、プロセッサとはシリアルで通信します。透過モードでは、プロセッサからみれば、シリアルポートに対して "Serial.Read/writeでコマンドやデータを読み書きするだけです。一切のZigBeeプロトコルの面倒はこのXBee
ZBがまとめてメンドー見てくれます。
詳細はDigi社のホームページのSupport Page Product Manualを参照して下さい。
センサーネットワーク実験の概要
今回は、コーディネータ 1台、エンドデバイス 2台を使って、各エンドデバイスからデータをコーディネータにデータを送るという単純なネットワークを組むことを想定しています。
エンド・デバイスを増やすのは簡単です。後で述べるエンド・デバイスの設定をして電源を入れるだけで、あとは勝手にXBee
ZBがZigBeeネットワークに参加してデータをコーディネータに送りはじめます。

それぞれのエンド・デバイスは、センサ(温度センサ、湿度センサ)で測定したデータをコーディネータに送り続けます。
コーディネータはデータを受信し、そのままシリアルポート-USB経由でPCに転送します。
PC側では、USBポートからデータを読み込んでグラフ化しています。
実験キットの構成
実験キットは、以下のユニットで構成されています。
・Coodinator USB 接続ユニット
・End Device 温湿度センサー・ユニット
各ユニットの概要は以下です。
Coodinator USB 接続ユニット

Coodinator USB接続ユニットはその名のとおり、XBee ZB をPCに接続するためのシリアルーUSBアダプタつきの基板にXBeeが載ったユニットです。このユニットは組み立て済み完成品です。
基板のウラにはリセットスイッチが付いています。
このUSB接続ユニットは、2つの用途があります。
ネットワーク稼動中は、XBeeとPCの接続インタフェースとして働きます。
もう一つの役割として、各XBee ZBの設定の際にPCとの接続に使用します。
XBee ZBの設定やファームェアの書き換えは、PC上のツールX-CTUで行います。
ほかの方法(TTYターミナルで、キャラクタベースのコマンドを送る等)でもXBee ZBの設定やファームェアの書き換えができますが、X-CTUで行うのが便利です。
XBee ZBの設定の際、モジュールをリセットする必要が生じる場合があり、そのためにUSB接続ユニットにリセットスイッチを取り付けてあります。
End Device 温湿度センサー・ユニット

End Device 温湿度センサー・ユニットはンサー値を取得しフォーマットを整えてCoodinatorに送信します。
このセンサーユニットは単体でも以下の機能を持っています。
・測定値をLCDに表示する
・アラームの閾値を設定する。1Kオームの半固定抵抗器で設定する。
・測定値を監視しアラームや、リレーを駆動する。
これらの制御もArduinoで行っています。
詳しい組み立て方法はこちらをご参照ください。
XBee ZBの設定
XBee ZBの設定は、Digi社が無償で提供しているツールX-CTUを使うのが便利です。
X-CTU ダウンロード
Coodinator,End DeviceともにUSB接続ユニットに装着し、PCにUSB経由で接続して設定します。

X-CTUの詳しい使い方は、
ユーザーズガイドを参照してください。
X-CTUを立ち上げ、USB接続ユニットがつながっているCOMポートを指定して、ModemConfigurationタブをクリックします。
Coodinatorの設定手順
"READ"ボタンをクリックし、現在接続されているXBee ZBの現状の設定値を確認します。初期設定が以下のようになっていない場合(多分ほとんどのデバイスが該当)、ファームウェアを更新し、その他の項目を設定します。
ま
た、"READ"でエラーになることがありますが、その場合は気にせず、次のファームウェアの更新に進みます。
Modem:のプルダウンメニューから、"XB24-BZ"を選択します。
今回は透過モードを使いますので、XBee ZBモジュールにはAT firmwareを入れます。
Function Setのプルダウンメニューから、
"ZIGBEE COODINATOR AT"を選択します。
ファームウェアの
Version表示が20xxになります。
Parameter Viewの
"Show Defaults"ボタンをクリックし、パラメタのデフォルト値をローディングします。
この状態で、
"Always update firmware"にチェックを入れ、"Write"ボタンをクリックします。
ファームウェアのアップデートが始まります、途中で、以下のようなアラートが表示されたら、USB接続モジュールのリセットボタンを押してください。
完了したら、
"Read"ボタンをクリックしてXBee ZBに書き込まれた値を確認します。
Adressingの
SH Serial Number Highと
SL Serial Number Lowには、XBee ZBのMACアドレスが書かれています。
このアドレスは、XBee ZBのウラに印刷されているものと同じはずです。
次に以下の2つのパラメタを書き換えます。
Networking:
PAN ID (Personal Area Network ID)
8バイトのPAN IDを 1-0xFFFFFFFFFFFFFFFF の範囲で指定します。
X-CTUでの値の設定は、前ゼロは省略可能です。
また、PAN IDの"0"は特別な意味があるようです。”set ID=0 for the
coordinator to choose a random PAN ID.”
できれば"0"以外の適当な値にしてください。
PAN IDは忘れないようにメモしておきます。あとで、End Deviceにも同じ値を設定します。
Addressing:
DH Destination Address High 0
DL Destination Address Low FFFF
Destination Addressを 0x000000000000FFFFにすると、CoodinatorからはPAN ID内のすべてのデバイスを対象にメッセージが送信されます(ブロードキャスト)。
DHは、Destination Adressの上位4バイト(0x00000000)、DLはDestination Adressの下位4バイト(0X0000FFFF)を指定します。
X-CTUでの値の設定は、前ゼロは省略可能です。
書き込みが終了したら、10秒程度待ってから、XBeeの電源を切ります。(XBeeをUSB接続モジュールからはずします)
未確認ですが、書き込み直後に電源を切るとうまく書き込まれていない場合があるようです。
End Deviceの設定
Coodinatorと同様に、USB接続モジュールにXBee ZBを装着します。基本的な手順はCoodinatorと同じです。
Modem Configuration画面で、"Read"ボタンをクリックし、
Function Setのプルダウンメニューから、
"ZIGBEE END DEVICE AT"を選択します。
ファームウェアの
Version表示が28xxになります。
Parameter Viewの
"Show Defaults"ボタンをクリックし、パラメタのデフォルト値をローディングします。
この状態で、
"Always update firmware"にチェックを入れ、"Write"ボタンをクリックします。
ファームウェアのアップデートが始まります、途中で、アラートが表示されたら、USB接続モジュールのリセットボタンを押します。
完了したら、
"Read"ボタンをクリックしてXBee ZBに書き込まれた値を確認します。
Adressingの
SH Serial Number Highと
SL Serial Number Lowには、XBee ZBのMACアドレスが書かれています。
このアドレスは、XBee ZBのウラに印刷されているものと同じはずです。
次に以下の2つのパラメタを書き換えます。
Networking:
PAN ID (Personal Area Network ID)
Coodinatorに設定した値と同じ値にしてください。
Addressing:
DH Destination Address High CoodinatorモジュールのMACアドレス(上位4バイト)
DL Destination Address Low CoodinatorモジュールのMACアドレス(下位4バイト)
End Deviceは、Coodinatorに向けてデータを送りますので、Destination AddressにCoodinatorのアドレスを設定してユニキャスト通信(相手先特定の通信)をします。
ソフトウェアの説明
この実験キットでは、2種類のソフトウェアを使います。
End DeviceユニットのArduino用のスケッチと、Coodinatorユニットに接続したPC上で動作する、グラフ表示プログラムです。
PC側のグラフ表示プログラムは、
"Processing"を使いました。ProcessingはArduinoのIDEのベースになっている開発環境で、画面もArduinoIDEとよく似ていますので、Arduino
IDEを使ったことがあれば取り組みやすいと思います。
スケッチはそれぞれ以下からダウンロードできます。
Coodinator スケッチ
HomeSensor4.lzh Processing用のスケッチです。PC上のProcessingで実行させます。
End Device スケッチ
temp_Humidity_bb.lzh
データフォーマット
それぞれのスケッチの使い方の説明の前に、End DeviceからCoodinatorに送られるデータのフォーマットを説明します。
エンド・デバイスから送るデータは、ユニットNo.、温度(測定値)、湿度(測定値)、温度(設定値)、湿度(設定値)です。
こららのデータを以下のフォーマットでASCIIコードのテキストとして送ります。
Tn:vv.vv,aa.aa/Hn:vv.vv,aa.aa(LF)
Tn:温度データを示すヘッダー部
Hn:温度データを示すヘッダー部
nはユニットNO.
vv.vv :温度測定値データ。桁数は可変の小数を含む整数
aa.aa :アラームなどの設定値。桁数は可変の小数を含む整数
LF : 0x0A 改行記号 データの終わりを示すデリミタで、必ず必要です。
エンド・デバイス用スケッチ
エンドデバイス用スケッチでは、一定間隔で温度センサ、湿度センサ、2つの閾値をアナログポートから読み込み、データフォーマット整形してSeriaポートに書き出します。同時に、LCDにも表示します。
このとき、設定した閾値と測定値を比較し、ブザーやリレーを駆動します。
スケッチをArduinoに転送する際、ユニットNo.を設定する必要があります。
サンプルスケッチの先頭にある#defineを切り替えてからArduinoにアップロードしてください。
下の例は、ユニットNO.1の例です。
#define T1
//#define T2
// #define T3
// #define T4
PC用スケッチ
Processing初期画面

ArduinoのIDEによく似ています。ArduinoIDEはこのProcessingを元に開発されたもので、JAVA言語で記述しますが、C言語を知っていればソースを読むのはそれほど苦労はしないと思います。
ArduinoIDEとの大きな違いは"Upload"ボタンが無いことです。
一番左の三角ボタン(ArduinoIDEではVerify)が実行ボタンです。
ソースの読み込みは、ArduinoIDEと同じ上矢印のボタンです。
ダウンロードしたHomeSensor4.pdeをProcessingで読み込みます。
PC上で動作するProcessingスケッチは、USBポートからテキストデータを読み込み、グラフを描画します。
読み込むUSBポートは、Processingのターミナルウィンドウに表示されたCOMポート一覧(Serial.list)を目で見て、CoodinatorのCOMポートのイオンデックス値をnew.SerialPortに指定します。

たとえば、上の例でCoodinatorがCOM12"の場合、インデックス値は”2”なので、このように
int XBee = 2;
と指定します。
これで、どのCOMポートからデータを読込むかの指定ができましたので、
再度一番左の三角ボタン(ArduinoIDEではVerify)を押してスケッチを実行します。
COMポートからデータが読込めると、下記のような画面が表示されてグラフが表示されます。

Copyright (C)2009, Techand All rights reserved