EspruinoやTessel、imp、Spark、EdisonのmraaなどNode.js/JavaScriptのインタフェースを持ったマイコンや小型コンピューターが増えてきました。これまでIoTのJavaScriptフレームワークとしてCylon.jsを主に使っていました。Cylon.jsのDSLはシンプルで良いのですが、もうちょっとNode.jsらしく書けないか別の方法を探しています。mraaはLow Level過ぎたりなかなか難しいです。Johnny-Fiveも同様のJavaScript Roboticsフレームワークです。FirmataプロトコルがベースになっているのでArduinoを使ってLチカのサンプルを書いてみます。
FirmataとI/O plugin
Johnny-FiveはArduino以外のFirmataファームウェアを持たないマイコン用に、I/O pluginというFirmata互換のI/Oクラスを用意しています。インタフェースをFirmataにあわせてくれるので異なるマイコンにも同じようにプログラミングができます。Cylon.jsのDSLのアプローチよりJohnny-FiveのFirmataのI/Oクラスをベースにしたフレームワークの方が、ロジックをNode.jsで普通に実装できそうです。
Johnny-Fiveのインストール
Johnny-FiveはArduino Firmataを使うので、前回OSXに構築したArduinoをCylon.jsからFirmataプロトコルで操作する環境がそのまま使えます。ざっとインストールコマンドだけ復習します。Arduino UnoとOSXをUSBシリアル接続します。Gortを使いavrdudeのインストールと、ArduinoにFirmataファームウェアをアップロードします。
$ cd ~/Downloads |
Johnny-Fiveの実行環境としてNode.jsをインストールします。
$ curl https://raw.githubusercontent.com/creationix/nvm/v0.24.0/install.sh | bash |
Lチカ
リポジトリにExamplesがたくさんあります。定番のLチカはled-blinkを使います。まずはプロジェクトを作成します。
$ mkdir -p ~/node_apps/johnny-five-start |
package.jsonを用意します。johnny-fiveのパッケージを定義します。
{ |
プログラムはとても単純です。1秒間隔でLチカを繰り返します。
var five = require("johnny-five"); |
npm start
でプログラムを実行します。終了するときはCtrl+C
を2回押します。
$ npm start |
REPL
Johnny-FiveはREPLが使えるのでインタラクティブにマイコンを操作できます。REPLのサンプルを使います。EspruinoのコンソールもREPLとして使えました。JavaScriptを使うとコネクテッドデバイスの操作がイベント駆動で直感的に書けます。
var five = require("johnny-five"); |
プログラムを実行します。Returnを1回押してREPLの待ち受けを表示します。
$ node repl.js |
プログラムではonとoffの関数を定義しているので、REPLからそれぞれ呼び出すことができます。on()
でLEDを点灯しoff()
で消灯する命令をインタラクティブに実行することができます。
>> on() |