Node-REDとは
APIやオンラインサービス、デバイスなどの機能を繋げてアプリケーションを作成していくオープンソースのプラットフォーム。ブラウザ上のエディタのマウス操作によって処理フローを作成することができる。
この記事の対象者
- Node-REDの使い方を1から学びたい人。
- 他のデバイスやシステムからRaspberryPiのGPIOを簡単に制御したい人。
- IoTデバイスの開発を考えている人。
今回の学習に必要なもの
- Rapsberry Pi(zero系でも可能)
- OSが入ったmicroSDカード
- ジャンパ線
- LED
- ブレッドボード
Node-REDのインストール&起動
-
Node-REDの導入
$ sudo apt install nodered $ update-nodejs-and-nodered
-
GPIO操作用のPythonライブラリの導入
sudo apt update && sudo apt install python-rpi.gpio
-
Node-REDの起動
sudo node-red-start
※本来Node-REDはsudoが不要ですが、今回はGPIOの操作に権限が必須のためsudoで起動します。
-
ブラウザで以下のURLを開く
http://{実機のIPアドレス}:1880
- Node-RED編集画面
Node-REDの基本操作確認
ノード
Node-REDフロー上にある処理を指す。ワイヤーで複数のノードを結合することで連続的な処理を指示できる。
基本的な作成手順
- Node-REDをブラウザで開く。
- パレットからノードを取り出し、エディタ上に並べる。
- ノード同士をワイヤーで繋げる。
- デプロイボタンを押す。
処理フローの作成
- 左側のノード一覧の「input」から「inject」を取り出し、フロー上に設置する。
- 設置した「inject」ノードをダブルクリックし、以下のようにプロパティを変更後Doneを押下する。
項目 | 設定内容 |
---|---|
Payload | String |
値 | Node_RED TEST |
- ノード一覧の「output」から「debug」ノードを取り出し、フロー上に設置する。
-
設置した2つのノードをLinkノードで接続する。
-
右上の「Deploy」ボタンを押下し、「Successsfully deployed」が表示されることを確認する。
-
設置した「inject」ノードの左端をクリックすると、デバッグウィンドウに「inject」から送られた値が表示される。
※デバッグウィンドウが表示されていない場合はエディタ右端から展開する。
解説
-
今回「inject」ノードに設定した値は、文字列型の値としてmsg.Payloadに格納されている。このノードは入力として働くため、変数の値は接続した先のノードへ送られる。
-
デフォルトのdebugノードはmsg.Payloadを表示するようになっており、入力から送られた値がデバッグウィンドウに表示される。
GPIO制御
injectノードからLEDを点灯・消灯する。
- 以下のように電子部品を接続しておく。
-
injectノード
項目 設定内容 Payload Boolean 値 Trueまたはfalse
-
RPI-GPIO(output)ノード
項目 設定内容 Pin GPIO04 - 7 Type Digital output
- 「true」側のinjectノードをクリックすると、GPIOに接続されたLEDが点灯されることを確認する。
GPIOから入力を検知する
- 2つのノードを以下のように設置し、デプロイする。
-
RPI-GPIO(input)ノード
項目 設定内容 Pin GPIO08 - 14 Register pulldown
WebAPI化
WebAPIからNode-REDを呼び出し、メッセージを返す処理を作ります。
コード
msg.payload = "テスト";
return msg;
-
http responseノード
設定不要(デフォルトでmsg.payloadを返すようになっているため)。
-
ブラウザで以下のURLを開く。
http://{実機のIPアドレス}:1880/test
functionノードで設定した「テスト」が表示されたら成功。
(応用編)WebAPIでLEDを制御する
- ノードを以下のように設置し、デプロイする。
-
httpノード
項目 設定内容 Method GET URL /onと/off -
functionノード
ONメッセージ
msg.payload = "ON"
return msg;
OFFメッセージ
msg.payload = "OFF"
return msg;
true返却
msg.payload = true
return msg;
false返却
msg.payload = false
return msg;
-
RPI-GPIO(output)ノード
項目 設定内容 Pin GPIO04 - 7 Type Digital output -
http responseノード
設定不要
-
ブラウザで以下のURLを開く。
- ONのパターン
http://{実機のIPアドレス}:1880/on
「ON」が表示され、LEDが点灯する。
- OFFのパターン
http://{実機のIPアドレス}:1880/off
「OFF」が表示され、LEDが消灯する。