夏休みなので久々にラズパイをいじって、Node-REDでデータを収集できるようにしてみた。2年前に作成したラズパイ3での各種センサーの可視化した環境をNode-REDで収集できるようにし、それをホストPCで表示させるようにしている。
Node-redとは
Node-REDは IBMによって開発されたビジュアルプログラミング用のフローベースの開発ツールで、IoTデバイスとサービス構築のために相互接続が行えるようになっている。Nodeと呼ばれるプログラムの部品のようなものを線で繋いだフローを構築することで、アプリケーションを手軽に構築することができる。
ラズパイ側の環境構築
ラズパイにNode-redを以下のコマンドでインストールする。
bash <(curl -sL https://raw.githubusercontent.com/node-red/linux-installers/master/deb/update-nodejs-and-nodered)
Nodeの追加は右上のメニューからパレットの管理を選択して、必要なNodeを追加でき、今回は以下のNodeを追加している。温湿度センサーのBME280やCO2センサーのMH-Z19用のNodeも用意されている。(照度センサーのTSL2561のNodeもあるが、今回なぜか追加できず断念)
- node-red-contrib-bme280
- node-red-contrib-mh-z19-co2sensor
- node-red-dashboard
構築したフローは以下の図のとおりで、5分に1回センサーから値を入手し、ダッシュボードに表示させている。


ホストPC側の環境構築
ホストPCであるMacbook air 2021(M1)にもNode-REDをインストールしておく。
sudo npm install -g --unsfe-perm node-red
ホストPCのMQTT Brokerの構築
ホストPC側で様々なデバイスのセンサー情報を管理することを想定して、ラズパイとホストPCをMQTT(Message Queing Telemetry Transport)で通信させ、センサー値をホストPCに送信できるようにする。MQTTは軽量な通信規格で、Clientが発行した情報を他のClientが受信できるようにデータにトピックをつけてやりとりをする。このやりとりを可能にするために、Brokerと呼ばれるサーバーを立てる必要がある。今回はこの記事を参考に、以下の図のような構成でMacbook airにmosquittoと呼ばれるMQTTのBrokerを立ち上げてみる。

Macbook airにmosquittoをインストールする。
brew install mosquitto
外部のデバイスと接続するためには、追加設定が必要で、/opt/homebrew/etc/mosquittoの下にあるmosquitto.confに以下の2行を追加する。
allow_anonymous true
listener 1883
これで設定が完了し、ホストPCでBrokerを起動する。
mosquitto -v -c /opt/homebrew/etc/mosquitto/mosquitto.conf
ホストPCのMQTTクライアント(Subscriber)の設定
ラズパイ側で取得した情報をホストPCで受信するため、Node-REDで”mqtt in”のノードをフローに追加する。サーバーをBrokerのPC(つまり同じPC)のIPアドレスに設定し、ポートは1883をそのまま使用する。ラズパイ側と通信するためのTopicを設定する。(上の構成図のpi3/xxxxと3つのトピックを設定している)
ラズパイのMQTTクライアント(Publisher)の設定
次はラズパイ側にもmosquittoのクライアントソフトをインストールする。
sudo apt-get install mosquitto-clients
次はラズパイ側のNode-REDで”mqtt out”のノードをフローに追加する。こちらも同じくサーバーをBrokerのPCのIPアドレスに設定し、ポートは1883をそのまま使用する。ホストPCのNode-REDで設定したのと同じトピックを設定する。
MQTT接続
ラズパイでNode-REDを起動すると、ホストPCのMacbookの端末で以下のようなメッセージが表示され、通信ができてることが確認できる。

Macbook側のNode-REDでも正常に受け取っていることがわかる。

このようにセンサーを使った簡単なIoTシステムならNode-REDとMQTTを使うことで構築でき、非常に便利である。