LoginSignup
41
37

More than 5 years have passed since last update.

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

Last updated at Posted at 2014-12-23

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

41
37
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
41
37