Raspberry PiとクラウドのNode-REDを利用して、
簡単なIoTプロトタイピングを楽にやってみよう、というコンセプトの記事です。
概要
家に置いたRaspberry Piに繋いだ人感センサーで検知したデータを、
外にいながらウォッチするというシステムを作りました。
Watson IoT Platformを間に挟んで、
デバイス側とクラウド側の両方をNode-REDで構成します。
デバイスはこちら。
Raspberry Pi Zeroに人感センサーを接続しています。
USBハブの先についているドングルは、WiFi子機です。
自宅の無線LANに繋がっています。
メリット
- プログラミング(コーディング)はゼロあるいは最小限で実現できる
- 短時間で設定して試して遊べる
使用したもの
- Raspberry Pi
- センサー類
- Bluemix(IBM Cloud)のアカウント
なんでIBM Cloud(Bluemix)?
他のクラウドでも同様の環境を構築できますが、
Node-REDをワンボタンでデプロイできることや、
Raspberry Piから、Watson IoTに接続するノードを
すぐ使うことができるので、一番楽だという理由です。
つくってみよう
クラウド側の準備
IBM Cloudから、Watson IoT Platformと
Node-REDを利用開始します。
まず、Node-REDをデプロイします。ここでつけた名前がURLになります。
Watson IoT Platformでは、
デバイスを登録して、認証情報を取得します。
はじめて利用する場合は、
デバイスタイプの作成⇒デバイスの登録
という順で実施します。
IoTサービスの開始。
新しいデバイスタイプを設定します。
Raspberry Piというデバイスタイプを作りました。
続いて、デバイスの登録をします。
先ほどのデバイスタイプを選択し、デバイスを登録
自動生成トークンで発行します。
自動生成された認証情報が表示されます。
この認証情報は、Raspberry Pi側のNode-REDの設定を行う場合に利用します。
これで、Raspberry PiとWatson IoT Platformの
接続準備はできました。
次に、Watson IoT Platformとクラウド側のNode-REDを
連携する設定を行います。
IoTの画面の接続から、
クラウド側のNode-REDと「接続」を設定します。
これだけです。Watson IoT Platformの設定はできました。
クラウド側のNode-REDの設定
Node-REDのアプリURLにアクセスします。
Raspberry Piから飛ばしたデータを、Web画面で表示するため、
データのビジュアライゼーションとして
Dashboardノードを使用します。
(Dashboardノードは、@dz_さんから教えてもらいました!)
Dashboardノードは、ノードを追加する設定を行う必要があります。
Node-RED右上のメニューからパレットの管理で、dashboardノードを検索します。
今回、時刻処理をするため、momentノードも一緒に追加しました。
Raspberry Piからきた情報を処理するため、IBM IoTノードを設定します。
できたフローはこのようになりました。
途中で行っているデータ型の変換は
IBM IoTから引っ張ってきたデータの構成をそのまま画面に流しこんでも
うまく動作しなかったため、いれています。
処理としては、JSONデータであがってきたデータを、payload直下に配置しなおしています。
audio outは生成したメッセージを再生するのに使っているのですが、
今回の用途では不要でした。。。
これでクラウド側の設定も完了です。
デバイス側のNode-REDの設定
最後にデバイスを設定します。
Raspberry PiにNode-REDがプリインストールされているので、起動します。
今回、人感センサーを接続し、それをインプット情報として
Watson IoT Platformに送ります。
Watson IoT Platformへの接続は、
1でメモした認証情報を設定します。
最終的にできたフローはこのようになりました。
switchでは、pin40が1(人感センサー)が検知したときだけ、
クラウドに情報を送信するという設定をしています。
あとは、これを自宅の玄関に設置して、完成です!
できたもの
玄関の出入りの時間を、記録します。
ダッシュボードのURLにアクセスすれば、
外出先からも参照可能です。
Node-REDたーのしー!
なお、1週間ほど設置していたのですが、
自分以外のタイムスタンプが記録されていたらどうしようかと
ドキドキしていたことを付け加え、締めさせていただきます。