こんにちは、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と温度センサーを繋いでみる
さっそく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をインストールしたフォルダに格納し、上記コマンドで実行します。

5秒毎にコンソール上に温度情報が表示されたら成功です!
2. 温度センサーから得たデータをSlackに通知してみる
センサーから出力された温度データを、インターネットを経由して受け取ってみたいと思います。今回は、チャットツールの「Slack」上にBotを用意して、温度データを通知してもらうようにしてみます。
2-1. Slack上でHubotを作成する
まずはSlack上でBotを作成し、アクセス用のAPIトークンを取得します。「https://(Slackのチーム名).slack.com/apps」にアクセスしてHubotをインストールしてください。
「https://(Slackのチーム名).slack.com/apps/manage」でHubotを選択、新しいBotを作成します。
「Add Configuration」をクリックし、
Usernameを設定します。
そして、作成した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通知を応用してみた事例なのですが、よかったら今回の例と合わせてご覧ください!
次回もお楽しみに! 最後まで読んでいただきありがとうございました。