2014年8月2日土曜日

FirmataとXBee

Firmataについて

Processing 2.0でもFirmataが使える。インポートライブラリで簡単にインストールできる。

Webで検索してみて、FirmataとXBeeの関係が分からなかった。
調べていくにつれて、Firmataで通信するにはXBee Series 1が必要であることがわかった。
Series 2でもATモードで1対1通信ならできないことはないように思う。
しかしAPIモードには対応していないため。1対他通信はATモードでブロードキャストを使うしかない。
動かないことはないかもしれないが、おそらく無理だろう。

Arduino Fio Programmingに
http://arduino.cc/en/Main/ArduinoBoardFioProgramming
You can't use the DigiMesh or ZB series radios (aka Series 2 or 2.5). 
と書かれていた。なるほど。

徐々に分かってきた。
ArduinoのプログラムであるStandardFirmataはSerialで全てのピンのデータを送りつける。
また信号を受け取って、オンオフをするという処理をしている。
Arduino側では一切処理をせずに、シリアルでリモコン制御するようになっている。
よって、これをXbee S2 (ZigBee)用に変えるのは難しくない。
しかし、対応するFirmataライブラリ側も変更しないといけないので、それは面倒である。
そもそもオープンソースだろうか?

オープンソースであった。ソースは
Arduino.javaとFirmata.java
の二つからなる。いずれもシンプルなコードだ。
シリアル通信を中に隠蔽して通信する単純な仕組みである。
デジタル入力、出力、アナログ入力の配列を持っていて、
それをシリアルでArduinoとやり取りしている。
ただ、Processing側からは、つまり外側からは、そのやり取りが隠されていて、
Arduinoというオブジェクトに指示しているように見える。
良く出来ている。私が作るとしてもこう作るだろう。

これはそのままではXBee ZigBeeのAPIモードでは使えない。
ZigBeeのAPIパケットを扱う部分がなく、シリアル通信そのままだからだ。
Arduino.list()という呼び出しも中でシリアル回線をリストアップしているだけだ。

ZigBeeに対応させようとすると、現在ネットワークに接続しているZigBeeノードを
リストできるようにする必要がある。
またシリアルとしては、Coordinatorが接続されているシリアルを接続することになる。
ZigBeeノード毎に、Arduinoというオブジェクトが対応するように、中で橋渡ししてやれば、
Firmataプロトコル自体を、APIパケットに内包させることができるだろう。
できないことはないが、そこまでする必要もないと思う。

Firmataを作っている人たちにまかせておこう。