Node.jsとJohnny-five使えばJavaScriptでArduinoを動かせる

Node.jsとJohnny-five使えばJavaScriptでArduinoを動かせる

会社に使われていないArduino Uno R3があって、貸してもらえることになりました。
ArduinoはJavaScriptで動かせるらしいので、ぜひやってみたい。

とりあえずJSでどうこうするよりも前に、まともに配線できないと困るので、まずは渡された本に書いてあった通りに配線して、サンプルコードをそのまま書き込んでみた。

すごく簡単だった。
そりゃ、本のとおりにやってるだけだもん。
正直、初のLチカにあまり感動できなかった…

上記の記事でNode.jsに触れてみたので、せっかくだからNode.jsでArduinoを動かしたい。
ってことでさっそくぐぐってみました。

「Arduino」「JavaScript」「Node.js」とかでぐぐると…

まー出るわ出るわ
みんな「Johnny-five」って言ってる。
ここは素直に使ってみることにします。

ハマりました。

誰も助けてくれない。

周りが明るすぎてイマイチ変化がわからない。

面白くない…(;´Д`)

その後あきらめて自分であれこれバージョンを下げたりしてみるか、と思ってとりあえずNode.jsのバージョンを5.0.0から4.2.2にインストールし直し。
左側のほうですねー

node.js

すぐ動きました。

ちなみに、自宅のWindows8でも動きました。

これで前に進める…!

ローカルに適当なディレクトリを作って、ここにjsファイルやNode.jsのモジュールを入れます。
Node.jsのコマンドプロンプトでカレントディレクトリをこのディレクトリにします。
そしてnpmコマンドでインストールを実行。

npm i johnny-five

Windowsだとパスが長くてどうのこうのって警告みたいなのが出るんですけど、とりあえず動いたからこのままにしてるよ!
Node.js5.0.0のときはnpmのバージョンが3に上がっていて、ディレクトリがフラットになっているんですけど、これはこういう問題を解決するためでもある…のでしょうかね?
でも5.0.0にしたら動かなくなっちゃうんだよジョニー。

次はArduino側。

これもバージョンの差異が気になるところですが、試したところ最新(2015/11/16現在)の1.6.6でも動きました。

Arduinoのサイトで、「Download」をクリックします。
私の場合はWindowsなので「Windows Installer」をクリック。
そうすると寄付の金額を選ぶような画面が出てくるんですけど、申し訳ないと思いつつ「JUST DOWNLOAD」をクリック。
これでインストールを進めます。

インストールが完了したら、アイコンをクリックしてIDEを開いて…っとその前に、ArduinoをUSBでPCに繋いでおきます。
ドライバのインストール&更新を忘れずに。
それから、ポート名も確認しておきます。

ArduinoのIDEで「ツール」>「マイコンボード」で自分が使うボードをチェックしておくことと、「ツール」>「シリアルポート」でさっきチェックしたポートを選んでおくのを忘れないようにします。

で、Node.jsでなにかするときには、Firmataというプロトコルを使うらしいので、その準備をします。
「ファイル」>「スケッチの例」>「Firmata」>「StandardFirmata」を選択するとサンプルのソースが表示されますので、これをそのままArduinoに書き込みます。

Arduino側のソースは、これだけでオッケー☆⌒d(´∀`)ノ

あとはLEDを1個配線しておいて…今回は13番ピンにしました。

Johnny-fiveでArduinoを動かす

そして、先ほど用意したプロジェクトのディレクトリに、jsファイルを用意します。test.jsとでもしておきましょう。

var five = require('johnny-five');
var board = new five.Board({port:'COM3'});
board.on('ready', function() {
  console.log("準備できたよ");
  var led = new five.Led(13);
  led.on();
  console.log('onだよ');
  console.log('5秒待つよ');
  setTimeout(function(){
    console.log('offにするよ');
    led.off();
  },5000);
});

setTimeout()がダサいとか言わない。

あちこちにあるサンプルではnew five.Board();ってなってることが多いのですが、Windowsの場合はポート名を指定しないといけないみたいです。
new five.Board({port:’COM3′});
こんな感じで。

あとはこれを、nodeコマンドで実行します!

node test.js

最初にreadyになるときとか、いつもLEDが「チカチカチカッ…チカッチカッチカッチカッ」ってなるんだよね。これはなんだろう。変えられるのかな?

少しずつ黒い画面に慣れつつあります…NEOPIXEL RING – 16もポチっちゃったので、届いたらこれもキラキラさせてみたいと思います!