4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-10-01

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させて低消費電力で待つといった使い方ができません。バッテリーで長時間動かすのは厳しく、実験やプロトタイプなどで使うのに適しているようです。

4
10
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
10

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?