東京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のパケットの節目ごとに切り取ってくれたり、パケットの中身をオブジェクトに分解してくれたり、送信時には逆にパケット長やパリティを付加してくれたりなど、よきに計らってくれる機能を実装しています。
全体の構成
![DaiNagoya_v4.010](https://lh3.googleusercontent.com/blogger_img_proxy/AEn0k_u8T6vN-kxqtKhxVVOsjQopKiulLvKOaz4uOl1m81jaHmGSgfLs6bpFCCGe_Rf65n2IG07HSLA0X7h32Cw4WDiadIB7rMgZPpmjH_xqvoftT4dIFhWPqHojy0vA3_QRwYR6=s0-d)
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がノードとなってつなげている例と言ってもよいのではないでしょうか。