ゲートウエイに使うRasberryPiのI/Oポートにプッシュボタンを追加してNode-REDで使用する方法を紹介します。
RaspberryPiにインストールされているNode-REDには、I/Oピンを制御するノードが標準実装されていますので、この機能を使います。この内容を試す前に、下記の記事を参照して準備をしておいてください。
(1)まず、I/Oピンに接続するLED+抵抗と、プッシュスイッチの回路を作成します。
こちらの記事を参考にしてください。
(2)LEDの点滅 を参照してフローを作成しておいてください。
(3)以下に示す事例を参考にNode-REDのフローを作成します。
・ノードの準備
・プッシュボタンを扱うには、「rpi – gpio in」ノードを使用します。
・LEDを点灯/消灯させるには、「rpi – gpio out」ノードを使用します。
・「LEDの点滅」で作成したフローにrpi – gpio in ノードを追加して、rpi – gpio outノードを横に並べて配置します。
先に作成したtriggerノードはこの次で使用しますので、ここでは一旦切り離しておいてください。
rpi – gpio inノードと、赤色LEDが設定されているrpi – gpio outノードを図のように接続します。
それでは、追加したrpi – gpio inノードのプロパティを設定していきましょう。
・先の記事で作成した回路では、プッシュボタンは24番ピンのGPIO8とGNDの間に配線されています。24 – GPIO8 – CE0にマークします。
BCM GPIOには8がセットされます。
・「抵抗」には「プルアップ」を設定します。
こうすることで、プッシュボタンを離した時はHigh(1)、プッシュボタンを押したときはLow(0)が入力されます。
・「デバウンス」はデフォルトの25msで構いません。プッシュボタンのチャタリング(操作した瞬間のHigh/Lowが短期間でバタついてしまうこと)が多い場合は変更した方が良い場合があります。
設定ができたら「完了」を押します。
・上手く設定ができると、ノードは次のような表示になっています。
injectノードとtriggerノードは、後で使用するために残していますが、下側の2つのノードだけで動作します。
OKであれば、「デプロイ」を押してください。
・フローが実行されると、プッシュボタンを押している間は赤色LEDが点灯する動作を確認することができます。
(4)次に、ボタンを押している間だけLEDが点滅するフローを作ってみましょう。
これまで作ったノードに加えて、「change」ノードと「switch」ノードを追加します。
残しておいたinjectノードとtriggerノードを使って、下記のように結線してください。
LEDの点滅で使用したtriggerノードとrpi – gpio outノードの間にswitchノードが入る形になります。
プッシュボタンの設定されたrpi – gpio inノードには、changeノードを接続します。
・それでは、まずchangeノードのプロパティを設定しましょう。
・「値の代入」で、右側のプルダウンメニューから「flow」を選択し、フィールドには「red-led」をセットします。
こうすることで、flow.red-ledにはプッシュボタンを押されているかどうかの状態が保存され、フローの他のノードから状態を参照して動作を変えることができるようになります。
・次に、先ほど設定したflow.red-ledの状態を見るために配置したswitchノードのプロパティを設定していきます。
・参照するプロパティのプルダウンメニューから「flow」を選択し、フィールドに「red-led」をセットします。
これで先ほどchangeノードで設定したボタンの状態を見て動作を変更することができます。
・リストにある1番ポートへの出力条件を、図の通り設定します。
・条件「==」(等しい)
・プルダウンメニューから「数値」を選択
・フィールドに「0」をセット
このようにセットすることで、プッシュボタンが押された時だけ前段のtriggerノードの出力が1番ポートに通過してくるようになります。これがrpi – gpio outの赤色LEDに接続されているため、プッシュボタンを押している間だけ赤色LEDが点滅するようになります。
5)応用
センサーモジュール評価用のゲートウェイで使用しているフローでは、この仕組みを使用してプッシュボタンを押したときに赤と緑の二つのLEDを点滅させてRaspberry Pi本体の電源をシャットダウンする機能を組み込んでいます。