第3回
電子工作部

JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveを使ってみる〜


JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveを使ってみる〜

はじめまして、DevRelチャンネル外部ライターの篠原と申します。普段は株式会社モンスター・ラボという会社でWebエンジニアとしてAndroidアプリ開発を担当しつつ、社内にある「Lab」という新規事業開発のスペースで電子工作もやっています。

今回から連載として、自分がIoTを始めたきっかけや経験を踏まえた「WebエンジニアのためのIoT入門の事例」をご紹介します。「IoTって最近よく聞くけどなんだかよくわからない、何をすればいいかわからない……」という方の参考になれば幸いです。1回目の今回は、IoTの概要を説明しつつ、導入としてArduinoをJavaScriptで動かしてみます。

▼目次

そもそもIoTとは?

そもそもIoTとは何なのでしょう。Internet Of Thingsという言葉の頭文字を取ったもので、訳すと「モノのインターネット」という意味になります。「物体や空間が直接インターネットに繋がって、通信できるようになる仕組み」と捉えていただいて問題ないです。

Wikipediaでは、「一意に識別可能な『もの』がインターネット/クラウドに接続され、情報交換することにより相互に制御する仕組みである」と解説されています。

ここで言う「一意に識別可能な『もの』」は、大きく「物体」と「空間」に分けることができるでしょう。車、本、衣服などの「物体」と、家、レストラン、オフィスなどの「空間」です。こういった「もの」とインターネットが繋がることが「IoT」となります。

IoTのためのデバイス

ここ最近「IoT」という言葉がバズワード化していますが、その背景として「IoTのためのデバイス」が多く普及するようになり、個人が気軽に手にいれられるようになったという要因が大きいかと思います。もちろん、大手SIer各社のトレンド事業になっていることも挙げられるかと思いますが。

以下の2つは「IoTのためのデバイス」としてよく使われるデバイスです。「マイコンボード」と呼ばれ、どちらも低消費電力プロセッサを搭載した、安くてプログラミング可能な簡易コンピューター(参照)です。

Raspberry Pi

RaspberryPi

Arduino

Arduino-400x320

それぞれにメリットとデメリットがあり、使い勝手も違いますが、個人的に初めてIoTやってみる・電子工作してみるという方には、Arduinoをおすすめします。
理由となるメリットが2つあります。

  • 使い始めの初期設定が少ない。
  • Raspberry Piに比べて安く調達できる(スタンダードなArduino は1台3,000円ちょっとで購入できます)

ということで、Arduinoをつかって開発をおこないます。

Arduinoのソフトウェア開発

開発環境と言語について

スクリーンショット 2016-02-29 20.47.56

Arduino向けには「Arduino IDE」という統合開発環境があり、一般にはこれを使ってプログラミングします。プログラミング言語は、Arduino向けに最適化されたC言語風の言語です。(厳密にはマイコン用のCコンパイラ+Wiring+その他プラスαのArduino言語です)

たとえば、LEDを点滅させる処理をArduino IDEで書くと、以下のようなコードになります。

#define LED_PIN 13
void setup () {
    pinMode (LED_PIN, OUTPUT);
}
void loop () {
    digitalWrite (LED_PIN, HIGH);
    delay (1000);
    digitalWrite (LED_PIN, LOW);
    delay (1000);
}

ArduinoをJavaScriptで動かせる「Johnny-Five」

Arduino IDEでの開発は、C言語ライクに書けるとはいえ、書き慣れない人にとっては取っ付きづらいものです。。そんな「もっと簡単に見慣れた言語で書けないかなぁ……」というエンジニアの方にぴったりのフレームワークがあります。その名も、「Johnny-Five」。

・Johnny-Five is the JavaScript robotics programming framework.
http://johnny-five.io/

JavaScriptでArduino互換のボードを動かすことのできるフレームワークです。早速、Johnny-fiveを使って先ほどのLEDを点滅させるプログラムと同じものを書いてみます。

var board = new five.Board();
board.on("ready", function() {
  var led = new five.Led(13);
  led.blink(1000);
});

Arduino IDEの方と比べて短く書くことができて、しかもチョットJavaScriptワカルという人にとってはかなり親しみやすいコードになりましたよね!

スクリーンショット 2016-02-29 19.08.47

実際は、ホスト側のマシンとArduinoを繋いで動作させることになります。ホスト側ではNode.jsが動いています。

Johnny-Fiveの使い方

それでは、Johnny-Fiveで書いたコードをArduinoで動かすまでの手順を説明します。

1. 回路を作る

まずはLEDを光らせるための回路を作ります。以下のデバイスと部品があれば簡単な回路を作ることができます。

  • Arduino
  • LED
  • ブレッドボード(LEDやセンサーを仮留めするための台)
  • ジャンパー線(基板とセンサー、ブレッドボードを繋ぐための線)

回路の作成例

sample

2. Arduinoに「Standard Firmata」を書き込む

スクリーンショット 2015-11-05 20.53.26

「Arduino IDE」にて、ArduinoへFirmataを使うためのスケッチ「Standard Firmata」を書き込んでおきます。Firmataとは、Arduinoのようなマイコンとホスト側のマシンが通信するための汎用プロトコルです。

3. Johnny-Fiveをインストールする

Node.jsのパッケージ管理ツール(npm)を使って、Johnny-Fiveをインストールします。(※あらかじめ、ホスト側のマシンにNode.jsをインストールしておいてください)

JavaScriptのコードが格納されているフォルダ内で下記コマンドを実行してください。

npm install johnny-five

4. コードを実行する

Johnny-Fiveのインストールが正常に完了したら、先ほどFirmataスケッチを書き込んだArduinoをホスト側マシンに接続し、下記コマンドを実行します。

node sample.js

Arduinoと繋がっているLEDが点滅を開始したら成功です!

まとめ

今回は、IoT事始めの導入としてArduinoをJavaScriptで動かしてみる方法をご紹介しました。

とはいえ、このままでは「ただLEDチカチカしてるだけじゃん?!」と言われてしまいますね……。今後は実際にいろんなセンサーを使い、以下のような「IoTやってみた」の事例をご紹介します!

  • センサーをインターネット越しに操作
  • センサーから受け取ったデータをホスト側で処理

次回もどうぞお楽しみに! 最後まで読んでいただきありがとうございました。


この記事を書いた人

篠原
株式会社モンスター・ラボのAndroidエンジニアです。趣味開発でフロントエンドやゲームフレームワーク(Unity, cocos2dx)を触ったり、時々電子工作をやります。