Lynx-EyEDの電音鍵盤 新館

広帯域制御屋の駄文とか

MARYDuinoがXBee Arduinoライブラリに対応

久々のMARY基板ネタです。
巷ではXBeeが流行っているようです。
自分も秋月でお安くなっていたXBee Series2を3個買ってみました。

「何これわかんねぇw」

無線化されたUARTの如く使える透過モードはいいとして、APIモードとか解りません。便利そうなんだけどね…
しばらく放置の方向にしようと思いましたがそんな折に、h.Suga氏のwebでArduino Freaks::xbee_arduinoライブラリを知りました。

ライブラリをさっそくダウンロード。可読性の高いライブラリで自分にも使えそうです。
で、Arduino標準API互換のMARYDuinoに移植しました(maryduin_XBee20111108.zip)。もちろんLPCXpresso LPC1114でも動作します。

1カ所(Coodinator)から複数の通信相手(Router)にシリアルに文字列を送りたいと思っていた訳なんですが、、このライブラリなら出来そうです。
図にするとこんな感じ。


XBee本体をこの通信が出来るよう設定します。今回は通信相手のRouterは2つです。(以降、Routerその1、その2とします)
最初はCoodinatorの設定。

Coodinator APIモード、エスケープモード(AP=2)でWriteします。

次はRouterその1とその2の設定。
Routerは単純にCoodinatorからのデータを貰えば良いだけなので、APIモードにする必要は有りません。ATにします。

Router ATモードにしてそれぞれのシリアルナンバー(SH,SL)を控えておきます。デスティネーションアドレス(DH,DL)はゼロにしておきます。
これでXBee Series2本体の設定おしまい。

先ほどのMARYDuinoのダウンロードのサイトからXBeeの文字が入っているmaryduinoプロジェクトを持ってきます。
CoodinatorをMARY(LPC1114)から制御します。
main.cppがArduinoの.pdeファイルに相当するファイルです。
ここにArduino語で記述します。

#include <libmary.h>
#include <stdlib.h>
#include "maryoled.h"
#include "XBee/XBee.h"

uint8_t text1[] = {'H', 'e', 'l', 'l', 'o', '1'};
uint8_t text2[] = {'H', 'e', 'l', 'l', 'o', '2'};


XBee xbee = XBee();
XBeeAddress64 remoteAddress1 = XBeeAddress64(0x0013a200, 0x12345678);       // Routerその1のアドレス(SH,SL)
XBeeAddress64 remoteAddress2 = XBeeAddress64(0x0013a200, 0x87654321);       // Routerその2のアドレス(SH,SL)

ZBTxRequest zbTx1 = ZBTxRequest(remoteAddress1, text1, sizeof(text1));
ZBTxRequest zbTx2 = ZBTxRequest(remoteAddress2, text2, sizeof(text2));

void setup () {
  xbee.begin(9600);
  delay(1000);

}

void loop () {
  xbee.send(zbTx1);
  xbee.send(zbTx2);
  delay(100);
}

たったこれだけ。コンパイルしてFlash Magicで書き込み。
書き込みを終えたら、CoodinatorのXBeeをMARY XB基板に載せてMARY基板本体にマウント。
Routerその1、その2はXBeeエクスプローラなどに載せて(8N1,9600baud)でTera Termコンソールなどから覗いてみる。


うまくいってれば、その1のコンソールには”Hello1” その2のコンソールには"Hello2"が永延と出力されるはず(ウワァw


参考文献