Qiita Teams that are logged in
You are not logged in to any team

Log in to Qiita Team
Community
OrganizationEventAdvent CalendarQiitadon (β)
Service
Qiita JobsQiita ZineQiita Blog
10
Help us understand the problem. What are the problem?

More than 3 years have passed since last update.

posted at

updated at

Organization

Wio node + Groveセンサー + Node-RED + Ambientで超簡単IoT

Wio nodeという小型マイコンボードがあります。Groveセンサーが二つ繋げられて、WiFiで通信できます。Wio nodeを制御するNode-REDのノードを使って、Wio nodeに繋いだセンサーデーターをNode-RED経由でAmbientに送ってグラフ化しました。とても手軽にIoTのプロトタイプシステムが作れます。

Wio nodeの写真

つなぐモノの紹介

Wio node

Wio nodeはSeeed Studio社が開発したマイコンボードです(上の写真。右は大きさの比較に置いた単3乾電池)。ESP8266というマイコンチップを搭載し、Groveセンサーが二つ繋げられ、WiFiで通信ができます。今回、センサーとしては温湿度センサーと光センサーを接続しました。

Wio nodeにセンサーを繋いだ写真

Wio nodeとGroveセンサーの設定はこちらのページを参考にしました。

Wio nodeをNode-REDで扱う方法はこちらのページを参考にしました。

Ambient

Ambientはマイコンから送られるセンサーデーターなどを受信し、蓄積し、可視化(グラフ化)するIoTデーター可視化サービスです。Ambientのユーザー登録や使い方はこちらをご覧ください。

全体の構成と流れ

全体の構成は次の図のようになっています。

全体構成

最初、Node-REDはMacで動かし、後でIBM Mluemix上でも動かしてみました。

全体の大まかな流れは次のようになっています。

1.Node-REDのInjectionノードで5分毎にイベントを発生させ、3つのWio nodeのsensorノードを起動する
2.各sensorノードがWio nodeのセンサーデーター(温度、湿度、明るさ)を要求する
3.Wio nodeからセンサーデーターがNode-REDのsensorノードに返される
4.3つのsensorノードからのデーターが揃ったら、メッセージの形を変換する関数を経由してAmbientノードにデーターが渡される
5.AmbientノードがAmbientにデーターを送信し、Ambientがデーターをグラフ表示する

Wio nodeのsensorノードは温湿度センサーのように複数のデーターを返すセンサーであっても、そのうちのどれか一つの値を返すように作られています。そこで三つのsensorノードを置き、それぞれで温度、湿度、明るさデーターを取得し、その後にjoin関数で三つのデーターが揃うのを待つようにしました。

sensorノードにはWio nodeとの通信処理が含まれます。通信がエラーになった場合を考慮し、join関数ではただ待つのではなく、タイムアウトを設定し、一定時間以内に三つのデーターが揃わなかった場合、タイムアウトして一つまたは二つのデーターで処理を継続するようにしました。

join node

sensorノードは次のように設定しています。

sensor node

OutputのデフォルトはParsed Valueですが、これだと出力は数値だけになってしまい、三つの出力をjoinした時に扱いにくいので、Raw Objectに設定しました。三つのsensorノードの出力はそれぞれ次のような形式になります。

{"celsius_degree": 値}
{"humidity": 値}
{"lux": 値}

join関数の出力は

{"celsius_degree": 値, "humidity": 値, "lux": 値}

という形式になるのに対し、Ambientに渡すデーターは

{"d1": 値1, "d2": 値2, "d3": 値3, ...}

という形式なので、データー形式を変換する次のような関数を書きました。

    var data = {
        "d1": msg.payload.celsius_degree,
        "d2": msg.payload.humidity,
        "d3": msg.payload.lux
    }
    msg.payload = data;
    return msg;

出来上がったflowをDeployして動かすと、Wio nodeのセンサーで測定した温度、湿度、明るさがAmbientサイトでグラフでみることができます。左のグラフに温度と湿度を、右のグラフに明るさを表示しています。

チャート

IBM Bluemix で動かす

ここまでは、Node-REDはMac上で動かしていました。このシステムを常時動かすにはNode-REDをクラウドで動かしたほうが便利です。IBM Bluemixは高機能なクラウドサービスで、コンポーネントの一つとしてNode-REDが用意されているので、今回のシステムをBluemixで動かしてみました。

Bluemix上のNode-REDにサードパーティー製のWio nodeノードやAmbientノードをインストールする方法は少し分かりにくかったのでメモを残します。

BluemixのNode-REDにサードパーティー・ノードをインストールする

1.Bluemixのダッシュボードで「Gitの追加」をクリックする。ダイアローグが現れるので、「継続」「閉じる」をクリックするとGitリポジトリーが作られる。

dashboard

2.「コードの編集」をクリックする。

edit

3.package.jsonを選択し、その中のdependenciesに追加したいサードパーティー・ノードを追加する。今回は次の2行を追加しました。

        "node-red-contrib-wio-seeed":"0.1.x",
        "node-red-contrib-ambient":"0.0.x"

package.json

4.「BUILD&DEPLOY」をクリックする。

build-deploy

5.Gitのcommitとpushを促されるので、commitしてpushすると、BUILDされ、DEPLOYされる。

deploy

6.ダッシュボードに戻り、アプリを再起動し、Node-REDページをリドローすると、パレットにwio nodeノードとambientノードが追加されている

パレット

まとめ

Groveセンサーには豊富な種類のセンサーが用意されているので、アイデア次第で様々なIoTシステムを短時間に組み立てることができます。

ただし、Wio nodeはREST APIでデーターをやり取りするサーバーとして動作しており、CPUをDeep Sleepさせて低消費電力で待つといった使い方ができません。バッテリーで長時間動かすのは厳しく、実験やプロトタイプなどで使うのに適しているようです。

Why not register and get more from Qiita?
  1. We will deliver articles that match you
    By following users and tags, you can catch up information on technical fields that you are interested in as a whole
  2. you can read useful information later efficiently
    By "stocking" the articles you like, you can search right away
10
Help us understand the problem. What are the problem?