先日、FirefoxOS端末がKDDIからお披露目されましたよね。その会場にいたしょぼっちです。
私はその会場でひっそりと、Arduinoを使った作品を展示していました。
そこに使った技術を紹介したいと思います。
まずはArduinoでの開発の際に面倒な点をいくつか上げたいと思います。
Arduinoって面倒じゃね!?
- 普段サーバーサイドしか書かないのにC++なんて書けるか
- そもそもArduinoはC++じゃなくてArduino語だし、書くの面倒だからもうやめたい
- パソコンとのシリアル通信が致命的にダメ。
などなど、あげたらキリがありません。
所詮、レギュレータとUSBドライバの内蔵されたAVRってことですね。
しかし、そんなArduinoを完全にnode.jsで制御するためのプロトコルがあるのです。
Firmataとは
元々はProcessingとArduinoをつなぐ物として注目されていました。
仕組みとしては、こちら側から操作するPINを指定して上げることで色々できるってわけです。
パソコンにGPIOが直接生えた間隔で操作できるため、とても楽しいです。
問題点としては、パソコンが無いと動かないため、今回、私が設置した際はRaspberry PiをLinuxボードとして動作するように設置しました。
Firmataの使い方
ArduinoにFirmataを導入する
ArduinoのIDEから
File > Examples > Firmata > StandardFirmata
あたりにでもアクセスして、コードをそのままArduinoに焼きます。
以上で設定完了です。
http://yoppa.org/tau_bmaw13/4772.html
導入に関して、ココらへんのサイトが詳しいので、詳細は参考をしてください。
node.jsの設定
ライブラリとしてjohnny-fiveを使用します。
https://github.com/rwaldron/johnny-five
npm init
npm install --save johnny-five
とでもやって、一発で導入してしまいましょう。node.jsが入ってなかったり、rootのnode_modulesがrootに入っているとかは知らないです。
あと、Windowsでも動作するかは神のみぞ知るってところです。
j5 = require "johnny-five"
arduino = new j5.Board()
arduino.on "ready", ->
led = new j5.Led
pin: 13
led.strobe(400);
これで一先ずLチカは完成です。
https://github.com/ky0615/arduino_show_brightness
私はこれでLCDディスプレイを弄ってみました。
簡単にArduino側の値を取得できるため、その場でサーバーに送ることも可能になります。
また、デバッグもパソコン側で全て出来るため非常に楽です。
最終的にはpm2が動いているLinuxサーバーでこのアプリをデーモン化させれば、USBが再接続されても再び接続することができるので便利ですね。