Help us understand the problem. What is going on with this article?

Firmataを使ってNode.jsからArduinoを制御してみよう

More than 3 years have passed since last update.

先日、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でも動作するかは神のみぞ知るってところです。

app.coffee
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が再接続されても再び接続することができるので便利ですね。

dll7
Node.jsと眼鏡っ娘が大好き
http://blog.temp.ws
Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away