honeylab's blog

各種ハードウェアの改造、主にファミコンミニなどをやってます(ました)

Programmable XBee 開発記録

Digi社から出ているXBee Programmableモジュールを取り扱おうとしてだいぶハマったので、必要な情報をまとめていきます。

 

XBeeとは

TTL 3.3VのシリアルインターフェイスやA/D,GPIOを持った無線モジュールです。

通信層に低消費電力のZigBee規格を用いていて、電池動作を行う無線ガジェットを簡単に作ることができます。

 

XBeeの機器構成

XBee通信ネットワークは以下の3種類のファームウェアを書き込んだモジュールで構成されます。(機械的には同じものです。ただし、各種特色を持ったハードウェアが存在します。)

・COORDINATOR

XBeeの通信に必要な無線チャンネルの設定、PAN ID(プライベートエリアネットワークID)の設定などを行い、メッシュネットワークを構築するためにネットワーク内に必ず一つは必要です。ROUTERとしても動作します。

・ROUTER

ROUTER,ENDDEVICEを配下に置くことができ、メッシュネットワーク内でデータを伝送します。また、ENDDEVICEはスリープモード(間欠的に動作する)が設定可能なため、ENDDEVICEが寝ている間、中継データを一時的にキャッシュする役割を持っています。

・ENDDEVICE

上記以外のデバイスです。

 

XBeeの通信モード(APIモードとATモード)

よくXBeeの通信モードと書かれますが、正確にはXBee内蔵の無線チップに接続されたTTL シリアルインターフェイスの入出力パケット形式のことです。

APIモードでは無線層で行われた通信の生データに近いパケットが直接シリアルに出てくるため、細かい制御が出来る代わりに、単純なシリアル通信が出来ないという欠点があります。

ATモードでは上記パケットのやり取りを無線チップがラッピングしているため、シリアルインターフェイスには単純なシリアル信号が出てくるという利点があります。

また、ATモードではパケットの宛先アドレスを設定するには無線チップの不揮発メモリにコマンドで設定してやる必要があり、途中で設定するのは面倒です。

複数の宛先に対して送信してやるためには、APIモードを使い、宛先アドレスを設定したパケットを無線チップに送信してやる必要があります。

このため、双方をATモードに設定すると、簡単にマイコンから無線通信が出来る代わりに、1対1でしか通信ができないということがあります。

ここで向して通信するモジュールそれぞれをAPIモード、ATモードのどちらに設定しても通信ができるという意外と知られていない使い方ができます。

(データシートには「一つのネットワーク内にATモードとAPIモードが混在できるよ(意訳)」ときちんと書いてあるのですがね)

ATモードに設定したモジュールに生のシリアルデータを渡すと、APIモードに設定された受信側のモジュールでは、送信先のMACアドレスのついた生パケットを受信することができます。

この機能を利用して、マイコンなどあまり複雑な処理を嫌う処理系からデータを受信することができ、1対Nの通信が可能になります。

 

XBeeモジュールの種類

現在国内で流通している(というか秋月で買える)モジュールは以下のようです。

XBee各種シリーズ 取り扱い通販コード
シリーズ PCB
アンテナ
RPSMA
コネクタ
U.FL
コネクタ
Wire
アンテナ
WiFi(S6版) M-05782 M-05783 M-05784 M-05785
WiFi(S6B版) M-06676 M-06677 M-06678  
802.15.4 M-06505 M-05792 M-05791 M-05789
802.15.4(Pro)   M-05796 M-05795 M-05793
ZB M-06195 M-05801 M-05800 M-05799
ZB (Pro) M-04483 M-05802 M-05803 M-05804
ZB (Pro)
Programmable
M-05805 M-05806 M-05807 M-05808
アンテナ単体   M-05810 M-05809  

ここで、確認しておく必要があるのは「シリーズ」と書かれている部分です。

WiFi

・802.15.4

・ZB

の3種類があり、それぞれ通信規格が違い、相互通信ができません。

しかも、XBeeZigBeeは名前が似ているにもかかわらず、「802.15.4」は「ZigBee」ではありませんw。

 

http://www.geocities.jp/bokunimowakaru/std-zigbee.html

とりあえず、シリーズ内でしか通信ができないということを覚えておく必要があります。

また、Proモジュールは消費電力が増える代わりに長距離通信に対応しています。

 

Programmable XBeeとは

上記のXBeeモジュールの中で Programmableと記載されているものは(またややこしいことに「Pro」とは違う)、内蔵無線チップに加え、Freescale社の8bitマイコンが内蔵されています。また、Programmable以外のモジュールではシリアル入出力ピンが直接内蔵無線チップに接続されていましたが、このバージョンのモジュールではピンから内蔵マイコンに接続されています。内蔵マイコンはUARTを二本持ち、上記のUART0を外部入出力、UART1を無線入出力(radio)として扱うことができます。

 

内蔵マイコンの型番は  MC9S08QE32CFT というもので、組み込み8bitマイコンとして定番の機能をひと通り搭載しています。

 

Programmable XBeeブートローダ

通常のXBeeモジュールは電源投入後、すぐにシリアル入出力を開始することができますが、Programmalbe XBeeではブートローダが起動します。

ブートローダは内蔵マイコン用のアプリが書き込まれていればアプリの起動ベクタにジャンプしますが、それ以外の場合メニューが表示されます。

 

標準搭載のファームウェアとして「バイパスモード」を搭載しています。

このモードに入れば通常のXBeeとしても使うことができます。

ボーレート 9600,N,1で接続し、リセット後にEnterかSpaceを押すことでメニューが表示されます。

初めてこのモジュールを購入したときは、X-CTUでも全然反応がなく、不良品を掴まされたのかと散々悩んだ挙句、数十個を部品箱に眠らせることになりましたw。

同様に悩んだ方も多いようです。

http://marsee101.blog19.fc2.com/blog-entry-2046.html

http://roshiago.blog.so-net.ne.jp/2012-01-16-1

 

うっかりこちらのモジュールを購入してしまった方は、以下の手順で使うことができます。

http://nanoappli.com/blog/archives/4564

上記手順でバイパスモードに入ればX-CTUで通常のパラメータ読み書きができます。

アプリを書き込んだ場合、ブートローダがアプリを起動してしまい、X-CTUから設定ができなくなってしまいます。

これを回避する方法として、Bootloaderメニューを起動する手順があります。

 

上記のような手順は Digi社にある Programmable XBee SDKとCode Warriorをインストールすることで非常に詳細に見ることができます。というか、それ以外の情報が無さすぎなんですが…

しかし、上記をインストールすると、今まで何を苦労していたのかというほどのきちんとした情報と、内蔵マイコン用のライブラリ(ソースコード完備)を手に入れることができます。

必要なことは

・Programmable XBee SDKのインストール(要登録)

http://www.digi.com/products/wireless-wired-embedded-solutions/zigbee-rf-modules/zigbee-mesh-module/xbee-zb-module#docs

 

・Code Warriorのインストール

※Programmable XBee SDKのインストール中に「Code Warrior 10.2が入ってないのでこのボタンを押してダウンロードしますよ」と言われるのですが、押して飛んだ先には全然見つかりませんw。ここでFreescaleのサイトに移動し、自力でCode Warrior 10.2のEvaluationをダウンロードする必要があります。(要登録)