第5回
電子工作部

JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveで温度センサーを使ってみる〜

篠原


JavaScriptとArduinoではじめるIoT入門 〜Johnny-Fiveで温度センサーを使ってみる〜

こんにちは、DevRelチャンネル外部ライターの篠原です。株式会社モンスター・ラボという会社でAndroidアプリ開発しつつ、電子工作もやっています。

「IoTって最近よく聞くけどなんなのかわからない……」という方の参考になるよう、自分がIoTを始めたきっかけや経験を踏まえた「WebエンジニアのためのIoT入門の事例」を連載しています。1回目では、IoTの概要と、JavaScriptでIoTデバイスを動かせるフレームワーク「Johnny-Five」についてをご紹介しました。

2回目の今回は、Johnny-Fiveを使って、温度センサーとインターネットを繋いでみたいと思います。まずJohnny-Fiveと温度センサーを連携し、温度センサーから得たデータをSlackに通知するという流れです。

Johnny-Fiveが対応しているセンサー

JavaScriptでArduino互換のボードを動かせるフレームワーク「Johnny-Five」。Arduino IDEでの開発と比べて短く、またJavaScriptが分かる方にとっては親しみやすいコードを書くことができます。

そんな「Johnny-Five」は、アナログからデジタルまで多くのセンサーをサポートしています。今回は、使い方が簡単で比較的安く手に入る「温度センサー」を使ってみます。

代表的な温度センサーは「LM35」というもので、ひとつ120円程で購入することができます。温度センサー以外にも次のようなセンサーを使うこともできます。

  • 湿度センサー
  • 光センサー
  • 加速度センサー
  • 超音波センサー
  • 赤外線センサー
  • etc……

なかなか幅広いですよね。それぞれの使い方、サンプルコードは公式サイトにドキュメントがありますので、ぜひご覧ください。

1. Johnny-Fiveと温度センサーを繋いでみる

thermometer

さっそくJohnny-Fiveと温度センサーを繋げていきましょう。まずはArduinoと温度センサーを上記のように繋げます。シンプル過ぎて殺風景ですが……ちゃんと動きますのでご安心下さい。JavaScriptのソースコードは以下です。

var five = require('johnny-five');
var board = new five.Board();

board.on('ready', function() {
    var temperature = new five.Thermometer( {
        controller: 'LM35',
        pin: 'A0',
        freq: 5000
    });

    temperature.on('data', function() {
        console.log('celsius: ', this.celsius);
    });
});

温度センサー(LM35)を使う際は、Johnny-Fiveの「controller」というオプションを使うことができます。これは、特定のセンサーの使い方を簡略して記述するためにJohnny-Five側が用意している仕組みです。

 

node thermometer

ソースコードをJohnny-Fiveをインストールしたフォルダに格納し、上記コマンドで実行します。

 

スクリーンショット 2016-05-09 17.52.17

5秒毎にコンソール上に温度情報が表示されたら成功です!

2. 温度センサーから得たデータをSlackに通知してみる

センサーから出力された温度データを、インターネットを経由して受け取ってみたいと思います。今回は、チャットツールの「Slack」上にBotを用意して、温度データを通知してもらうようにしてみます。

2-1. Slack上でHubotを作成する

スクリーンショット 2016-05-09 18.07.01

まずはSlack上でBotを作成し、アクセス用のAPIトークンを取得します。「https://(Slackのチーム名).slack.com/apps」にアクセスしてHubotをインストールしてください。

 
スクリーンショット 2016-05-09 18.02.05

「https://(Slackのチーム名).slack.com/apps/manage」でHubotを選択、新しいBotを作成します。

 
スクリーンショット 2016-05-09 18.02.29_edit

「Add Configuration」をクリックし、

 
スクリーンショット 2016-05-09 18.03.13

Usernameを設定します。

 
スクリーンショット 2016-05-09 18.03.58

そして、作成したHubotの「API Token」をメモしておきましょう。これでHubot関連の操作は終わりです。

2-2. Johnny-FiveからSlack通知する仕組みを実装する

温度センサーの情報をSlackに通知するために、「slack-node」というモジュールをインストールします。

slack-node | Slack API library for node

情報を通知したいチャンネルやテキストを指定するだけで、簡単にSlack通知を実装することができます。

node install slack-node

コンソール上で上記コマンドを入力してインストールしてください。このslack-nodeを使って、先ほどのソースコードにSlack通知の仕組みを追記します。

var five = require('johnny-five');
var Slack = require('slack-node');
var apiToken = 'your API token'

var slack = new Slack(apiToken);
var presetTemp = 30;

var board = new five.Board();
board.on('ready', function() {
    var temperature = new five.Thermometer( {
        controller: 'LM35',
        pin: 'A0',
        freq: 60000
    });

    temperature.on('data', function() {
        console.log('celsius: ', this.celsius);
        if (this.celsius > presetTemp) {
            // slackに通知
            slack.api('chat.postMessage', {
                text: '部屋の温度が30℃を越えています。',
                channel: '#general',
                as_user: true
            }, function(err, response) {
                console.log(response);
            });
        }
    });
});

今回は、温度センサー周辺の温度(=部屋の温度)が30℃を越えたら、Slackに通知が来るようにしてみました!

まとめ

今回は、Johnny-Fiveを使ってセンサーデータをインターネット越しに受け取る仕組みを作ってみました。IoTと呼ぶには些細な事例かもしれませんが、アイディア次第でもっと応用できる仕組みだと思います。

以下スライドは、温度センサー x Slack通知を応用してみた事例なのですが、よかったら今回の例と合わせてご覧ください!

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

篠原
この記事を書いた人

関連記事