夏休みの子どもの自由研究に最適! 植物からメールをもらおう:Arduinoで始めるWeb技術者のためのIoT入門(3)(3/3 ページ)
今注目のInternet of Thingsを実現するセンサーデバイスのインターフェースとしてArduinoを使い、電子工作の基礎から実装までを紹介する連載。今回は、観葉植物の土が乾いたことを土壌温度センサーで検知し自動的にメールを送信するシステムをJavaScriptで作ります。
メールを送信するプログラムを実装
続いて、メールを送信するプログラムを実装していきましょう。「mailgun-js」というモジュールをベースに、ラッパーモジュールを作ります。下記コマンドを実行してmailgun-jsをインストールしておきます。
npm install mailgun-js
コード「mailer.js」は次のようになります。
var Mailgun = require('mailgun-js'); function Mailer(conf){ this.mailgunConf = { apiKey : conf.apiKey, domain : conf.domain }; this.mailData = { from : conf.from, to : conf.to, subject : conf.subject, ok_message : conf.ok_message, ng_message : conf.ng_message }; this.mailer = new Mailgun(this.mailgunConf).messages(); } Mailer.prototype.send = function (message) { this.mailData.text = message; this.mailer.send(this.mailData, function(err, body){ if (err) { console.log(err); } console.log(body); }); }; Mailer.prototype.notifyOK = function() { this.send(this.mailData.ok_message); }; Mailer.prototype.notifyNG = function() { this.send(this.mailData.ng_message); }; module.exports = Mailer;
先ほど得たAPI Keyやメールの宛先、本文をコンストラクターに渡します。OKに遷移したときはnotifyOK()メソッドを、NGに遷移したときはnotifyNG()メソッドを呼び、メールを送信します。
このように、前回説明したFirmataプロトコルを使って外部から制御するアプローチを取ったことで、ネットワーク越しの連携を非常に簡単に実現できました。これで必要なパーツが全て出そろいました。残すは、これらのプログラムを結合させて、起動するだけです。
いよいよ完成! メインプログラムを実装&実行
「センサー値の読み出し」「状態管理」「メール通知」のプログラムを結合して、システムを完成させましょう。「lib」というディレクトリを作成し、その下に先ほどの「stateMachine.js」「mailer.js」を配置します。
メインプログラムの実装
メインプログラムは次のようになります。コード中のXXXは適宜MailGun登録時に確認した値で読み替えてください。
var j5 = require('johnny-five'), arduino = new j5.Board(), Mailer = require('./lib/mailer'), StateMachine = require('./lib/stateMachine'); var MailConf = { apiKey : 'key-XXX', domain : 'sandboxXXX.mailgun.org', from : 'XXX@sandboxXXX.mailgun.org', to : 'XXX@XXX', ok_message : 'ありがとう(`・ω・´)シャキーン', ng_message : '土が乾いたよ(´・ω・`)\n' + 'お水ちょーだい' }; var mailer = new Mailer(MailConf); var stateMachine = new StateMachine({ threshold : 100, thresholdMargin : 50 }); arduino.on('ready', function(){ var sensor = new j5.Sensor({ pin : 'A0', freq: 1000 }); sensor.on('data', function(){ var transitionedTo = stateMachine.determineTransition(this.raw); if (transitionedTo === 'OK') { mailer.notifyOK(); } else if (transitionedTo === 'NG') { mailer.notifyNG(); } }); });
最初に紹介したコードから変更したのは次の点です。
- 3〜4行目:モジュール読み込み
- 6〜14行目:メールの設定。10行目のtoで通知メールの送信先を指定
- 16〜20行目:設定を指定してインスタンス化
- 29〜34行目:センサー値を基に状態を判断。状態が遷移したらメールを送信。
foreverでプログラムを手っ取り早くdaemon化して実行
さて、プログラムを起動しましょう。このプログラムをdaemon化するためには、他の言語と同じようにforkする処理を追加するのが正攻法ですが、手っ取り早く実現するために「forever」というCLIツールを利用します。
foreverは下記コマンドでインストールします。
npm install forever -g
下記コマンドでmain.jsを起動します。
forever start main.js
では、センサーを水に出し入れして、動作を確認してみましょう。水から出したときと水に入れたときとで違う文面のメールが届くことでしょう。
これで、あなたもIoTメーカーです!
Raspberry Pi上で動かせばPCみたいに場所をとらない
今回は、センサーとメールを連携させ、不要な通知を抑制する工夫を加えました。Firmataプロトコルを使うことで、JavaScriptでロジックやメール送信処理を記述でき、非常に短いコード量でIoTを実現しました。
実用する際は、このプログラムをRaspberry Pi上で実行することで、コンパクトかつ安価にシステムを構築できます。
以上、いかがでしたでしょうか。本記事が皆さんのアイデアの種となれば、そしてお子さんの夏休みの自由研究に役立てば幸いです。
次回は、スマホからArduinoを経由して、家電を操作
次回は、スマホからArduinoを経由して、家電(エアコンやコーヒーメーカーなど)を操作する方法を紹介する予定です。お楽しみに!
著者プロフィール
岩永 義弘(いわなが よしひろ)
株式会社インターネットイニシアティブ
データ分析とワインが好物。通信アノマリ検知システムや地震速報配信システムの開発と運用を経た後、Webアプリのフロントエンドに手を伸ばし、図らずもフルスタックな道を突き進んでいる。最近は趣味でHTTP/2の実装を楽しんでいる。
Twitter:@y_iwanaga_
Bot:@quake_alert @WeatherAlertJP
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 三国大洋の箸休め(26):忘れずに手を洗おう……ビッグデータとIoTの活用例
張り紙に頼る代わりに、センサーとInternet of Things(IoT)、ビッグデータといった技術を活用して手洗い忘れ防止を実現したケースを紹介する。 - Database Watch(2014年2月版):確定不能なデータたち――IoT時代を受け止めるOracle NoSQL、JSON Anywhere
エンタープライズを指向するOracle NoSQL、マルチデバイスでのデータハンドリングのための環境を整備するCouchbase、適用用途は異なるものの、IoT時代を見据えた開発を進める2つの非RDBをウォッチした。 - ATが影響、ただし「将来的には元凶となる恐れ」:冷蔵庫は「無実」――シマンテックがスパム発信元を調査
「インターネットにつながったスマート家電から75万通以上のスパムメールが発信された」という報道に関して、シマンテックは2014年1月27日、実際に感染していたのは同じホームネットワーク内のWindows搭載PCであり、冷蔵庫は「無実だ」とするブログを公開した。 - 「俺たちのJavaは、まだまだこれからだ」未来の鍵はInternet of Thingsにあり?〜JavaOne 2013まとめレポート(前編)
Java開発者の年次カンファレンス、JavaOne 2013がサンフランシスコで9月22〜26日に開催された。3つの基調講演、そして400を超えるセッションが行われるなど、圧巻のボリュームは、まさに「Java開発者の祭典」といえる。基調講演と主なセッション、全体の雰囲気を前中後編に分けてレポートする。 - Microsoft Azure情報アップデート:IoTをクラウドで管理、「Microsoft Azure Intelligent Systems Service」プレビュー公開
米マイクロソフトは2014年4月15日、デバイスやセンサーといった「モノのインターネット」(IoT)からのデータを収集し、ビジネスインテリジェンスツールと結び付けて分析する「Microsoft Azure Intelligent Systems Service」の限定パブリックプレビューを公開した。