ArduinoをJohnny-FiveからNode.jsで制御 Lチカしてみる
category:web

先日、渋谷で行われたNode.jsの祭典に参加してきたのですが、その中で「Hardware Hacking for JavaScript Developers」@girlie_macさんの実演が面白く、JS BoardやIoTと言った流行のキーワードに対して何かしら自分なりにアプローチをしておきたいと思っていました。
Tessel 2も魅力的だったんですが届くのに時間がかかりそうなので、以前Max/MSPを使っていたこともあり、C++は書いたことないのですが下記の通りNode.jsでも扱えるらしいのでArduinoを入門機に決めました。
電子工作の知識がないのですが、難なくLチカできたのでその内容です。
- 環境
-
- OS:Mac OS X 10.11.1
- Node.js:ver.0.12.7
- npm:ver.2.11.3
- fritzing:ver.0.9.2
- ARDUINO:Arduino UNO R3
- ARDUINO IDE:ver.1.6.6
- 参考記事
-
『JavaScriptエンジニアへのIoTのすすめ:Node.jsとArduinoでスマートデバイスのプロトタイプをしてみよう』
- @girlie_mac<p><a href="//www.atmarkit.co.jp/ait/articles/1406/23/news026.html">『電子回路を作る基礎を学びNode.jsでボードを操ろう』</a><br> <span style="display:block; text-align:right;font-weight:200; font-size:0.7em;">- <a href="https://twitter.com/y_iwanaga_" target="_blank">@y_iwanaga_</a></span></p> <p><a href="https://ics.media/entry/4758">『JavaScriptでArduinoをコントロール ― 第1回 Lチカ(LEDチカチカ)させてみよう!』</a><br> <span style="display:block; text-align:right;font-weight:200; font-size:0.7em;">- <a href="https://twitter.com/umi_kappa" target="_blank">@umi_kappa</a></span></p> </blockquote>
###Firmata通信とJohnny-Five
通常はこのArduino、C言語ベースのSketchというプログラムで制御されているらしいのですが、Firmataプロトコルを使うとJavaScriptだけでなく、RubyやPythonでも制御できるみたいです。
そしてNode.jsはArduino等に特化した「johnny-five」というモジュールをインストールするとNode.jsで制御することができる、ということです。
##Arduinoセットアップ
プログラム言語の「Hello World!」のように、Arduinoのようなマイコン回路工作ではLEDをチカチカと点滅させる『Lチカ』 がはじめの一歩的な作法のようです。
今回使うArduino UNO R3でLED点滅させるにもセットアップから入ります。
###Arduino IDEインストール
まずはArduino IDE (Arduinoのプログラム(Sketch)を書くためのソフトウェア) をインストールします。
Arduino IDEを起動する前に、ArduinoボードとコンピュータをUSBで繋いでおきます。
###マイコンボード、シリアルポート設定
Arduino IDEを起動し、メニューの ツール > マイコンボード から Arduino Uno を選択。
続いて同じくメニューの ツール > シリアルポート から /dev/cu.usbmodem1411 (Arduino/Genuino Uno) を選びます。

###StandardFirmataインストール
「johnny-five」を使ってNode.jsでコントロールする為に、ArduinoボードはFirmataプロトコル通信を行うえるようにします。
今度Arduinoボード側にStandardFirmataをインストールします。
Arduino IDEのメニューから、ファイル > スケッチの例 > Firmata > StandardFirmata を選択、すると新規ウィンドウが開きます。
StandardFirmataのプログラムをUSBで繋がっているArduinoボードに書き込みます。
(下のgifアニメでご確認ください。)

これでセットアップは完了です。
##Johnny-FiveでArduinoをLチカさせる
Lチカをさせる為に揃えたArduino UNO以外のハードウェアは以下の通りです。
- LED (単色)
- ブレッドボード
- ジャンパーワイヤー × 2本
- 抵抗器 330Ω × 1個

抵抗器の種類、Arduino UNOの接続部の説明、ブレッドボードの作り、LEDの扱い方など以下のチュートリアルが参考になりますので、そちらをご確認ください。
###Arduino Lチカの回路図
揃えたハードウェアとArduino UNOを接続すると下のような回路図になります。

###Johnny-Fiveモジュールをインストール
コンピュータ側にNode.jsがインストールされている前提で進めます。
今回のプロジェクト用のディレクトリを任意で作成します。
(例:デスクトップにl_chikaディレクトリを作成)
$ cd /Users/at3/Desktop $ mkdir l_chika $ cd l_chika
l_chikaディレクトリにnpmを使ってJohnny-Fiveをインストールする。
$ npm install johnny-five
準備完了です、いよいよLチカさせます。
###Node.jsでLチカさせる。
l_chikaディレクトリに適当なjsファイル、例えば今回はblink.jsを作成します。
$ touch blink.js
l_chikaディレクトリにできたblink.jsに以下のコードをペーストし保存します。
var five = require('johnny-five');
var board = new five.Board();
board.on('ready', function() {
var led = new five.Led(13);
led.blink(300);
});
blink.jsをnodeコマンド実行してみます。
$ node blink.js
正しく動作すれば下のgifアニメのように300msの間隔でLEDの点滅します。

今回は基本的な内容でしたが、普段ソフトウェアばかり扱っている当者にとって半田付けの必要もなく、つまずくことなく動作させることができました。
このままモチベーションを維持しつつ、センサーなど使ったネタを上げていければと思います。あと、Maxも久しぶりに触ってみたくなりました。
|
Arduino エントリーキット(Uno版) |
| Arduinoを始めるのに必要のものが揃っており、お手軽なエントリーキット。 今回の内容もこのキットを使っています。 |
|
|
Arduinoをはじめよう 第3版 |
| Arduino入門書の第3版。Arduinoエントリーキットとセットでたのしく電子工作を学べそうです。 | |



