東京Node学園祭2012 アドベントカレンダーの21日目ぶんになります。ひとつまえの記事にて、Node.jsとXBee ZBを使ったiPhone〜Arduinoの無線制御について書きました。このときからのアップデートについてまとめます。
XBeeをAPIモードでつかう
前回の内容では、XBeeを透過モードで使っていました。ここをAPIモードにかえています。これによってXBeeボードに搭載されているAD変換のモニタリングなどが使えるようになる一方、きちんとパケットを組み立てなければならなくなっています。透過モードではシリアルポートに値を入れれば、それがネットワーク内のすべてのXBeeにそのままの値で飛ばされるので、周辺のコードを書く分には楽なのです。が、特定のモジュールにだけ飛ばすとか、XBeeボードのちょっと便利な機能を利用できないという弱点があるのです。
XBeeボードの詳細については、オライリー・ジャパンから出版されているXBeeで作るワイヤレスセンサーネットワークを参照ください。
node-xbeeを使う
Node.js〜XBee〜Arduinoとなりますが、Node.jsとXBeeの間はnode-xbeeという便利なモジュールを使っています。基本的にシリアルポートを経由しての通信はかわらないのですが、0x7Eのパケットの節目ごとに切り取ってくれたり、パケットの中身をオブジェクトに分解してくれたり、送信時には逆にパケット長やパリティを付加してくれたりなど、よきに計らってくれる機能を実装しています。
全体の構成
APIモードのAD変換機能を、基板上の電源電圧の監視につかっています。XBeeでAD変換の後Node.jsに投げて、WebSocket経由でiPhoneへ飛んでいく部分。ここはオシロスコープの経験を流用しています。ソースコードについてはgithubをごらんください。動かしている様子はこちら。
iPhoneとXBee/Arduinoが直接つながっているように見せたくて、Node.jsの動いているMacは画面の外にしてしまいました。LEDが全部点灯すると引き込まれる電流が増えるため、エネループが電圧降下をおこしている様子がiPhone上のグラフから読めると思います。
さいごに
2011年の東京Node学園祭より。Node.jsという名前の由来について、「グラフ理論のノードが由来。今はまだNode.jsをノードとしたノードは少ないけど,これからそれらがどんどん多くなるのを期待している」とRyan氏。いままでつなげることが難しかったデバイス同士を、Node.jsがノードとなってつなげている例と言ってもよいのではないでしょうか。