Node-REDのコントリビュータをしている横井一仁です。今回は、Raspberry Piで植物を栽培するシステムを、Node-REDを用いて開発してみました。用いた植物は、すぐに育つカイワレ大根です🌱🌱🌱
開発したものは「リモート監視ダッシュボード」と「LED照明の自動制御」の2つです。
リモート監視ダッシュボード
植物が置かれている場所の温度や湿度の環境データを、リモートから監視できるようにするダッシュボードです。
-
システム構成
-
エッジ側のフロー
まずRaspberry Pi上のNode-REDで、温湿度センサデータの値をクラウドへ転送するフローを作成しました。
上のフローでは、定期的にGroveノード(node-red-contrib-grove-base-hatのgrove-light-sensor-v1_2ノード)で温湿度データを取得し、そのままデータをshiftr.ioへMQTTプロトコルで転送しています。 -
ブラウザ上で動作するフロー
次に、温湿度のデータをリモートから監視できるダッシュボードも作成しました。
こちらはhttp requestノードを用いて定期的にshiftr.ioのREST APIにアクセスして、転送した温湿度データを取得しています。その後、changeノードで温度と湿度のデータに分けてそれぞれ、chartノードで時系列グラフを表示しています。 -
ブラウザ上で動作するダッシュボード
パス/uikit
を指定してページを開くと、温湿度データの時系列グラフがリアルタイムに表示されます。
WebContainer上のダッシュボードがどんな感じで動くのか、興味のある方向けにデモページのボタンを用意しました。Google Chrome上で以下のボタンをクリックすると、ランダムデータを表示するリモート監視ダッシュボードが表示されます。
WebContainerは、GitHubリポジトリからフロー( https://github.com/kazuhitoyokoi/node-red-ogiri-sapporo/blob/main/flows.json )をダウンロードし、自動的に「npm install node-red」と「npm start」のコマンドを実行してくれます。WebAssemblyの技術を用いて、これをブラウザ上で行なってくれるのがWebContainerです。
これで、外出中でもカイワレが置かれている場所の温度や湿度が分かるようになりました❗️
LED照明の自動制御
カイワレ大根が夜も光合成を行えるよう、LED照明の自動制御も同じRaspberry Piで行いました。
-
システム構成
-
USB電源の制御コマンド
まずRaspberry PiでUSBのON/OFFを制御するために、uhubctlコマンドをインストールします。- uhubctlコマンドをインストール
sudo apt-get update sudo apt-get install uhubctl
電源のON/OFFは以下のコマンドで行います。-lオプションには、USBハブのIDを指定します。Raspberry Pi 4に内蔵されているUSBハブを指定する場合のIDは「1-1」です。-aオプションには、USBハブの電源をONにしたい時に0、OFFにしたい時は1を指定します。
- uhubctlコマンドをインストール
-
照度に応じてUSB電源ON/OFFを操作するフロー
次にuhubctlコマンドを用いたNode-REDのフローを作成しました。
このフローでは、grove-temperature-humidity-sensor-sht3xノードを用いて、定期的に照度センサの値を取得しています。switchノードを用いての大小を比較し、値が小さい時に1(電源ON)のメッセージ、大きい時に0(電源OFF)のメッセージをchangeノードで生成するようにしています。今回はswitchノードの閾値を「300」としました。終端にあるexecノードは受け取った1または0のメッセージをもとに、uhubctlコマンドの-aオプションを指定して、USB電源のONとOFFを切り替えています。 -
フロー実行時の様子
テストとして部屋の照明をつけたり消したりしてみました。部屋の照明が消えている時はUSBライトがONになります。一方、照明をつけるとすぐUSBライトがOFF、再度照明を消すとUSBライトがONに変わります。
もちろん、運用時は日が沈むとUSBライトが自動的に点灯し、日が昇ると消灯します🌅
成長の様子
最後に
開発した後に思ったことは以下の2つです。
- リモート監視ダッシュボードは、カイワレ大根の置かれている状況確認より、エアコンの消し忘れ確認で便利❗️
- LEDは制御しなくても、24時間をつけておく方がカイワレ大根の成長が早いのでは❓🤔
というオチでした(笑)。ただ、今回の開発を通して、他のシステムにも応用できそうなWebContainerやUSBの電源制御の知見を得られたことは良かったです😊👍
※使用機材
- ハードウェア
- Raspberry Pi 4 Model B (メモリ4GB)
- Grove HAT
- Grove 光センサ
- Grove 温度湿度センサ (SHT31)
- USBライト (ダイソーで購入)
- ソフトウェア
- Node-RED
- Groveノード (node-red-contrib-grove-base-hat)
- React Node-REDダッシュボード
- サービス
- shiftr.io (MQTTやREST APIでデータを送受信できるMQTTブローカ)
- WebContainer (Node.jsをブラウザ上で実行できるWebAssembly実装の環境)
- その他
- カイワレ大根の種
- 水耕栽培用の容器