XBee Wi-Fi を手に入れてほったらかしにしてあったので、いい加減動かしてみる。
以前やった APIモードとADサンプリングで三軸加速度センサーを作った物を今度はWi-Fi経由で
PCに送るまでをやってみた...。
回路は以前のものと全く同じで、ボタン電池で駆動、D0~D2ピンに加速度のXYZ軸のピンをそれぞれアサインさせるもの。
XBeeはホストとして、サンプリングしたデータをアドレス指定したクライアントへUDP経由でたれ流す。
小文字が打てないのでIDやPKの設定はモデム通信用のソフトで。私は ztermを使用した。
主な設定としては..、
[ID] ネットワークのSSID: X-CTUでは大文字しか入力できなかったので、ZTermで手打ち設定。
[AH] Wi-Fiの種類: WPA2だったので2
[PK] ネットワークのパスワード: こちらも小文字が打てなかったのでZTermで手打ち。
[IP] プロトコル: UDPなので0
[DL] 送信先IP: デフォルトではローカル内でブロードキャストになっている。
[IR] XBeeのインターバルサンプル機能のサンプルレート: 0x0Aにしてみた インターバルの計算は0xFFFF [x 1 mSec] とのこと。
[AP] APIモードの設定 : 1でネーブルに。
[D0 ~ D2] i/oモード: 2でADCモードに。
うまく行けばリセット後、指定したSSIDに接続しようとして、DHCPでIPが自動で割り振られる。
ZTermでATMYコマンドなどで確認できる。
データはクライアント指定したIPへUDPで送られる。
当初SuperColliderで受けようとしたが、なんとSCLangでは 生のUDPソケット通信を受けるのができないとのこと..
OSCのパケットは受けられるが"/~"みたいに先頭がアドレスになっている物以外は"ERROR: OSC messages must have type tags"
というエラーを吐いて終わる..。なんてこった。
かろうじて送信はできるみたい。送信先をXBeeに割り振られたIP, ポート 9750( このポートが分からなかった*1)に。// SCLang Code // send raw udp to xbee wifi NetAddr("192.168.100.38",9750).sendRaw("Hello World!");
しょうがないのでProcessingで。
UDP用のエクステンションライブラリが あるので、これを使用する。
ソケットを ローカルホスト3054番( このポートも分からなかった、どこに載っていたんだ..*2[DE]設定で指定した物とは違うので注意)に。
以下Processingのコード(汚)
// Processing Code // import UDP library import hypermedia.net.*;
UDP udp;
void setup() { udp = new UDP( this, 3054 ); //port from xbee wi-fi udp.listen( true ); }
void draw() {;}
void keyPressed() {
String message = str( key );
String ip = "localhost";
int port = 9670; //port to xbee wi-fi
message = message+";\n";
udp.send( message, ip, port );
}
void receive( byte[] data, String ip, int port ) { int len = data.length; byte[] message = subset(data, 0, len);
for( int i = 0; i<len; i++ ){ if (message[i] == 0) { if (message[i + 1] == 7) println (message[i + 2] + " " + message[i + 3]+ " " + message[i + 4]+ " " + message[i + 5]+ " " + message[i + 6]+ " " + message[i + 7] ); } } }
パーズして6バイト分なにやら送られてきているのがわかる。 あとはこれを適切な値に変換してあげればいいはず。上記パーズするところ間違ってるくさい、後で直す。 と今のところはここまで。
*1 0x2616ポートDestination PortとSerial Communication Service Portのデフォルトのポートらしい。 *2 0xBEEポートといって特別なポートらしい。