2017年3月8日水曜日

Johnny-Five を Arduino で試してみた

概要

Johnny-five を使って Arduino で L チカしてみました
Johnny-five を 使えば Arduino を JavaScript で制御することができるようになります

環境

  • Arduino IDE 1.6.7
  • Mac OS X 10.11.4
  • Johnny-five 0.9.43
  • Nodejs 5.9.1
  • npm 3.7.3

Johnny-five のインストール

今回は Mac 上で Johnny-five を使います
Johnny-five 自体は Nodejs で動作するパッケージなので npm コマンドを使ってインストールすることができます
Nodejs および npm は事前に Homebrew を使ってインストールしています

  • npm install johnny-five

Arduino に Firmate のスケッチを書き込む

Mac に Arduino を接続します
Arduino IDE を開いて Firmate の StandardFirmate というサンプルスケッチを書き込みましょう

ファイル -> スケッチの例 -> Firmate -> StandardFirmate

j5_with_arduino_show_sketch.png

で開いたらあとは書き込めば OK です

配線

いつもの L チカ配線で OK です
j5_with_arduino_circuit.jpg

抵抗は 1KΩ を使っています

Nodejs スクリプト

Nodejs で L チカするためのスクリプトは以下の通りです

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

board.on("ready", function() {
  var led = new five.Led(13);
  led.strobe(500);
  this.on("exit", function() {
    led.off();
  });
});

あとはこれを

  • node control_arduino.js

と実行すれば OK です
Arduino 用の COM ポートを自動で探してくれるみたいです
実行中は LED が点滅すると思います
また実行中は REPL 状態になるのでここでスクリプトを直接記載することもできるみたいです

1461310285586 Device(s) /dev/cu.usbmodem1421
1461310285597 Connected /dev/cu.usbmodem1421
1461310289291 Repl Initialized
>

終了したい場合は Ctrl + D で OK です
終了すると LED は消灯します

メリット・デメリット

今回は L チカだけでしたが Johnny-five を使うと結局何が嬉しいのかというのは自分なりに メリット・デメリットとしてまとめてみました

メリット

  • いろんなマイコンやシングルボードコンピュータをサポートしているので 1 つの Nodejs スクリプトを複数のマイコンやシングルボードコンピュータで動かすことができる
  • どんなボードでも Nodejs で制御することができる
  • Nodejs のシナジーを使うことができる ( 文法やライブラリ、コールバック処理の仕組みなど )

デメリット

  • Johnny-five が対応していないセンサや通信モジュールがある場合は自作しなければいけない
  • マイコンでずっとプログラム動かさなければいけないときに直接焼きこむことができないので制御側 (今回なら Mac ) と接続した状態で、かつ Node のスクリプトをデーモン化しておく必要がある
    • ここは詳しく調べていないので何とも言えないですが方法はあるかもしれません

最後に

超簡単ですが Johnny-five を試してみました
個人的には Apache Cordova 的な印象を受けました
要するにマルチプラットフォームをサポートして Nodejs だけでいろんなマイコンやシングルボードコンピュータを制御できますという感じでしょうか

ただ、いろんなボードを持っていて、それぞれの異なるボードで同じ処理をしたい人がいるかというとそんなにいないような気がします
なので、想定ケースとして C や C++ が嫌いで Johnny-five を使えば Nodejs で書くことができるようになるというケースで使われるほうが多いような気がします ( と、考えると RubyMotion 的な立ち位置とも言えなくもないか、、、)

とりあえず触っただけなので適当なことを言っている可能性が高いです
別のボードで試してみたり、別のモータやモジュールを制御してみるといろんなことがわかってくるような気がします

参考サイト

0 件のコメント:

コメントを投稿