見出し画像

Day9. 非エンジニアでもシステム構築可能。IoTのキラーアイテム『Node-RED』

ひとりでIoTまるっとチュートリアル Advent Calendar 2018
9日目の記事です。まだ登録していない方、ぜひともお願いします!

昨日はRaspberry Piを使って、リアルタイム温度計を作りました。

なかなかできることが広がってきて楽しくなってきましたね。

しかし、見ていただければわかるのですが、実際に温度可視化のコードを書いたりするのって、結構大変なんですよ。

・データの変換/分岐
・webフレームワークの理解・可視化ツールの作成
・データのストア

などなど、それぞれ言語で書かなければならず、骨の折れる作業です。

そんなのが、直感的に・簡単にできたら最高じゃないですか。できるのです。そう、Node-REDならね

目次
・NodeRedとは
・導入編(インストール)
・【使い方】リアルタイム温度計+slack報知機能を一瞬で作る
・【Slack連携】温度管理システムを作ってみる
・便利な読み込み・書き出し機能

Node-RED

下記のような特徴を備えています

フローチャートで直感的に処理基盤を構築
・node.jsが動く環境ならどこでも動く。クラウドでもラズパイでも。
オープンソース
・パレットを探せば、色々なノード(処理機能)があり、拡張性も高い

直感的な操作でデータ処理の流れを記述できるため、本当に重要な

・どんなデータで価値を出すか
・どんな処理で価値を出すか
・どんな表示方法で価値を出すか

などに集中でき、、クリエイティブな思考を加速させてくれます。しかも無料。ローカルサーバーを立てて動くため、多少処理が重くなりますが、それでもプロトタイピングには最適なツールです。


導入編(インストール)導入編(インストール)

※ここではRaspberry Pi model 3B/ Raspbian OSを用います

まずはインストールです。Raspberri Piの準備が出来ていない方は、
Day8. を参照してください

ターミナルを開き、下記コマンドをぶち込みましょう。

bash <(curl -sL https://raw.githubusercontent.com/node-red/raspbian-deb-package/master/resources/update-nodejs-and-nodered)

これだけでOKです!
(参考にしたサイト : Node-RED : Running on Raspberry Pinodered.org)

起動も簡単で、

node-red

と打つだけです。そうするとローカルサーバが立ち上がるので、webブラウザからhttp://localhost:1880にアクセスしましょう。ここまでで準備完了です。

【使い方】リアルタイム温度計を作ってみる。

それでは、Rasberry PiとNode-REDを使って、Day8. で行ったようなリアルタイム温度計を作っていきましょう。配線は、Day8. のものと同じです。

配線が終わったら、プログラミングの時間です。しかし、Node-RED は、必要最小限のプラグラミングでOKです。それを可能にするのが、フローチャートプログラミングというもので、下図のように、

ノード : 各所で行う機能
エッジ : データの流れ

を使って、GUI(Graphical User Interface)で直感的に実装できます。

また、オープンソースなので無料で使え、欲しい処理のノードを先人が作ってくれていたら、パレットから追加するだけでその処理を行うことが出来ます。つないでつないで、右上のデプロイをポチッと押せば、データの処理が完成です。これはめちゃくちゃ便利!

それでは、実際にNode-REDを使って、処理の流れを書いていきましょう。

まず、I2Cからのセンサー読み込み部です。と言ってもデフォルトのノードはありません。調べると、おすすめのパレットなども出てくるので、参考にしながらパレットから追加しましょう。(参考 : Raspberry Pi で I2C を利用するための設定)

次に、ノードを左の入力欄から選び、データの流れに従ってエッジでつないでいきましょう。

一度つないでみた図がこちらです。

パレットで追加したI2Cノード以外は、Node-REDの超基本的な関数で、事あるごとに使います。それぞれ処理の内容は図に書いてある通りで、基本的にこんなふうに構築します。Injectで、どういうふうにデータを入力していくか(頻度など)を記述し、関数を通ってdebugで出力します。

※Functionノードは、自前でコードを用意しなければいけません。どうしても対象ノードがパレットで見つからないときに書くという認識でいいと思います。

I2Cノードでは、必要な情報を記入していきます。これはArduino, ラズパイのときと同じですね。下図のように入れればOKです。

ちなみに今回は仕様書からアドレスを抜き出しましたが I2C Scanというノードを用いれば、アドレスを自動でスキャンしてくれます。

I2Cの読み込んだデータはバイト列なので、ある程度変換する必要があります。Functionに、変換するjavascriptを記述するのですが、下記のコードをコピペしてみてください。

a1 = parseInt(msg["payload"][0]);
a4 = parseInt(msg["payload"][3]);
msg["payload"] = parseFloat(a1+256*a4)/16/8;
return msg;

ここまでして、温度がdebugに現れるようになれば、成功です!!

次に、温度に合わせてLEDを光らせる処理を追加しましょう。
Raspberry Pi専用のノードがあるのでその中から「gpio out」ノードを選びます。すると、ピン配置やPWMが可能かどうかなどが視覚的に分かるようになっています。これは本当に便利!
GPIOは13番に設定して、PWMで出力しましょう。

これで、LEDへの出力ができたので、次はDay8でやったようなグラフ出力をしてみましょう。これも、パレットから”Chart”というノードを追加して、必要な情報を設定してやると、なんとすぐに書けるようになります!

設定後ダッシュボードボタンを押し、グラフ画面に飛ぶと温度が可視化された時系列データが見られます。たったこれだけ。自分で可視化用のスクリプトを組むことなく、Day8と同じような結果を得ることが出来ました!

【Slack連携】温度管理システムを作ってみる。

最後に、せっかくなのでIoTらしいことをしてみましょう。
使うのは、Switchノードとslackノードです。
Switchノードは、条件分岐が出来ます。アラートは、slackに送りましょう。パレットからslackのノードを追加すると、できるようになります。

Slack設定に関してはこちらを参考にしください。

こうして設定すると、このように、温度が30℃以上でアラートを上げるなどが可能になります。

こんな簡単に、遠隔でも温度が監視できるようになるわけです!もうこれはIoT機器ですよね。

便利な読み込み・書き出し機能!

最後に、Node-REDの便利な機能「読み込み・書き込み機能」を紹介します。さっきのようなノードとエッジをいちいち自分でセッティングするのも面倒じゃないですか?

これを、別環境に配布するときに、JSON形式でグラフを出力することが出来ます。右のメニューから書き出しを押すと、グラフ情報が出てきます。

これをコピペして、別環境Node-REDで読み込むだけで、全く同じグラフをNode-RED上ですぐに作ることができきます。

今回のグラフは、githubにあげておくので、センサやボードを持っている人は実際に試してみてはいかがでしょうか??

(Slackのトークンは各自で設定してください。)

まとめ

いかがでしたか?
難しいプログラミングなどほとんど必要なく、IoTツールを作ることができちゃうNode-RED。ツールを使う楽しさを実感できて、とても楽しいです。

更に勉強したい方は、下記記事が参考になります。読んでみましょう。

さて、明日は、今一部の界隈で大流行(?)中のM5Stackについてお話します。
省電力何でもできる、そして遠隔デプロイまで可能という、至れり尽くせりな端末。使い方と実際に使ってみた様子を書いていこうと思います。ではではっ

前の日 : Day8. 『Raspberry Pi』セットアップからはじめリアルタイム温度計を作る!
次の日 : Day10. IoTプロトタイプに最適!『M5Stack』で温度警報器を作る

サポートいただけると励みになります! よろしくおねがいします!!