RaspberryPiのLチカ
ゲートウエイに使うRasberryPiのI/Oポートに対し、Node-REDの機能使ってLEDを点滅させる方法を紹介します。
RaspberryPiにインストールされているNode-REDには、I/Oピンを制御するノードが標準実装されていますので、この機能を使います。
(1)まず、I/Oピンに接続するLED+抵抗の回路を作成します。こちらの記事を参考にしてください。
回路図
装着した状態
(2)以下に示す事例を参考にNode-REDのフローを作成します。
・ノードの準備
Node-REDの画面左側のパレットでRaspberry Pi のノードが利用できる状態になっていることを確認してください。LEDを扱うには、「rpi – gpio out」ノードを使用します。
LEDの操作をするために、ここでは「inject」ノードを使用します。同じように、ノードが利用できる状態になっていることを確認してください。
injectノード2つと、rpi-gpio outノード1つを、左のように並べます。最初はノードの名称は左のようになっています。
次に、2つのinjectノードの出力(右側の端子)から、rpi – gpio outのーどの入力(左側の端子)にマウスでワイヤを接続します。
次に、injectノードのプロパティを編集していきます。
(1)まず、上側のinjectノードをダブルクリックしてプロパティ編集画面を開きます。
リストのmsg.payloadの右側のボックスのプルダウンメニューから「数値」を選んで、「1」を設定します。正しく設定できると左の図のようになります。
設定できたら「完了」を押します。
(2)同じように、下側のinjectノードも同様にプロパティ編集画面を開き、「数値」で「0」を設定します。
こちらも設定できたら「完了」を押します。
次に、rpi-gpio outノードのプロパティを設定します。
rpi – gpio outノードをダブルクリックしてプロパティ編集画面を開きます。
ここでは11番ピン(GPIO17)に接続された赤色LEDを使用しますので、「端子」のリストから「GPIO17 – 11」のボタンにマークを入れます。
下部のBCM GPIOには「17」がセットされます。
更に、以下の設定を行います。
・出力形式を「デジタル出力」に
・「端子の状態を初期化」をONに
・「端子の初期化レベル-High(1)」を選択
以上が設定できたら「完了」を押します。
ここまで進めていると、各ノードの表示は下記のようになっているはずです。
ここまで出来たら画面右上の「デプロイ」ボタンを押して、作成したフローの処理を開始します。
「1」の表示のinjectノードの左側のボタンをクリックすると、「数値」の「1」がrpi – gpio outノードに送られ、Raspberry piのピン11(GPIO17)の状態が「High」になります。このときLEDには電流が流れないので「消灯」します。
「0」」の表示のinjectノードの左側のボタンをクリックすると、「数値」の「0」がrpi – gpio outノードに送られ、Raspberry piのピン11(GPIO17)の状態が「Low」になります。するとLEDに電流が流れ始めるので「点灯」します。
0と1のinjectノードを操作して、LEDのON/OFFができることを確認してください。
(3)次に、LEDを点滅させるフローを作ってみましょう。
「機能」にある「trigger」ノードを使用します。
さきほど作成したフローを元に、「1」のinjectノードと「PIN:11」のrpi – gpio outノードの間に、triggerノードを入れて下記のようにワイヤーを接続します。(「0」のinjectノードは使用しません)
それではinjectノードのプロパティを変更していきましょう。
ウインドウ下部の繰り返し設定を修正します。
・「Node-RED起動の0.1秒後、以下を行う」をON
・繰り返しを「指定した時間間隔」に設定
・時間間隔を「0.5」秒に設定
injectノードに「繰り返しマーク」が付いているのが分かります。triggerノードはデフォルトで250msが設定されているので、このままデプロイしてみましょう。
これで赤色LEDが点滅しているのを見ることができると思います。
フローの動作としては、injectノードが0.5秒ごとに「1」を出力し続けますが、その次に挿入されたtriggerノードが「1」を受け取ったあと、250ms経過後に「1」を「0」に変化させて出力しますので、結果としてRaspberry Piに接続したLEDはONとOFFを繰り返すことになります。
更に、押しボタンを使ったケースについては別の記事を参照してください。