littleBitsのArduinoモジュールにjohnny-fiveをインストールしてNodeJSで制御しやすくするメモ

littleBitsのArduinoモジュールにjohnny-fiveをインストールしてNodeJSで制御しやすくするメモです。

私の現状

もともと、なるべく技術要素は薄めに触れて理解したい意識があり、デジタルのON・OFFレベルであれば、

そろそろlittleBits Arduinoモジュール使用時のルールを決めて使いやすくしておくメモ – 1ft-seabass.jp.MEMO

の、自前のArduinoコードをベースに

入出力を整えたlittleBits ArduinoモジュールとNodeJS(node-serialport)で連携するメモ – 1ft-seabass.jp.MEMO

で、serialportライブラリでのシンプルな制御で、登壇時のデモはできることは限られるものの、短時間で内容を伝えるにはちょうどよくて気に入ってはいます。

しかしながらの問題点

ある程度、整っては来たものの、やりにくさもちらほら。

  • シリアルポート未接続時の回避が丁寧にやれてない
    • つまり未接続時は落ちる
    • 登壇ではなかなかのリスク
  • 名指しでシリアルポートを指定しないと外した場合にエラーになる
    • 接続する度にシリアルポートがズレるケースもある
    • 登壇ではなかなかのリスク
  • デジタルのON・OFFでは良いが、繊細な入出力、つまりアナログ入出力を捉えたい場合に難儀する
    • やりとりするデータが変わるためArduinoプログラムを調整しなおし
      • つまり改修が気軽でなくもろもろ影響を受ける
        • プロトタイプ力低下
  • NodeJSとArduinoでコードが分散する
    • 現状だとArduino 50%、NodeJS 50%くらい

そこでjohnny-five

そちらを解決するのがjohnny-fiveです。すでに文献も多く以下が読みやすいです。

FirmataはArduino IDEの Firmata > StandardFirmata でソースと読み込みlittleBits Arduinoモジュールに書き込みます。

littlebits-johnnyfive-startup_2

Arduino側のプログラムはFirmataというプログラムを焼きこんで万能に仕上げておき、Firmataに対応したコードでNodeJSを書き込めるの一つの方法がjohnny-fiveということになります。

littleBits ArduinoモジュールはArduino Leonardoでできているため、Firmataもすんなりインストールが可能です。

johnny-fiveのサイトのサンプルをlittleBits Arduinoモジュールに合わせて書いてみます。

今回は、あえてデジタルのON・OFFではなく、繊細なアナログ反応をさせるフェードインフェードアウトにしています。

var five = require("johnny-five");
var board = new five.Board();

board.on("ready", function() {
  // littleBitsで上から2番目の出力
  var led = new five.Led(5);
  // フェードイン
  led.fadeIn();
  // 2秒後フェードアウト
  this.wait(2000, function() {
    led.fadeOut();
  });
});

こちらのコードを

node index.js

して、起動してみると以下のように動きます。

おおー。ふんわりうごく。

johnny-fiveのよいところ

といったように、

  • シリアルポート未接続時のちゃんとエラーになる
  • 自動でシリアルポートを探してくれる
    • 名指しで指定する必要が無い
  • NodeJS側にコードを集約できる
    • Arduino 5%、NodeJS 95%くらいの意識で書ける
    • Firmataを書き換えるケースはほぼない
  • アナログ値やI2Cの連携もしやすそう

が良いなと思いました。使いやすい!

そして、NodeJSで処理を寄せることで見通しも良くなり、プロトタイプ力がアップする機運が高まりました。登壇時の恐怖である、シリアルポートまわりエラーについても、素で書くよりははるかに手厚く、ありがたいです。

おわりに

個人的には、継続してマイコンの仕組み自体も知りたいのでArduinoコードの中身も追っていきたいですが、しかし同時に自分が手を突っ込む部分が結構複雑になっています。

そうすると、他の人に伝えにくくなったり技術ポイントがむしろ増える心配が増えてしまうので、そういったときに、FirmataをArduinoに入れるだけで、動きはNodeJSに寄せて書けるというのは、安心感が増す場所も多いでしょう。

制作物に適宜組み込んでいきたいと思います。それでは、よき littleBits & johnny-five Lifeを!