ブロックを積みながら(71) Node-RED、rpi-gpio in ノード

Joseph Halfmoon

前回Node-REDから、Raspberry PiのGPIO端子を出力として操作してみました。今回は入力として使用してみます。前回同様、外部のボードとはフォトカプラで絶縁しています。入力イベント「ボタンを押した」を捉まえるために昔やった記憶のあるfilterノードに御出馬お願い。その裏で前回の出力回路を微妙に修正も。

※「ブロックを積みながら」投稿順 index はこちら

まずは実験に使っている回路の回路図が以下に。出力部分は前回のものに近いですが電源が違ってます。前回は5V引き出して使ったのですが、今回は3.3Vです。今回は入力も使うので、ラズパイのGPIOのIO電圧に合わせました。こんな感じ。RpiIN_OUT_circuit

入出力ともフォトカプラで絶縁しているので、外部回路は5Vといわず、他の電源で動いていてもへっちゃらな筈。何かあってもラズパイ様に影響は及び難い筈。ホントか?

実験に使用したフロー

実験に使用したNode-REDのフローが以下に。gpio-inノードで調べたピンの値をfliterノードに送ってその変化を調べ、変化があったときだけ後続ノードにデータを送りだしています。今回は実験なのでDebugノードで観察。

filterノードを挟んであるのは、gpio-inノードは、ある周期でピンのレベルをポーリングしつづけるようになっているためです。レベルでピンの値を観察したいときには良いですが、変化があったときだけ知りたい、というときにはフィルタが必要かと。RpiIN_FLOW

各ノードの設定

まず、rpi-gpio in ノードの設定です。rpi-gpio-out ノードの時に端子の選択画面が見やすいと喜びましたが、in ノードも同様です。今回はGPIO06(拡張端子のピン番号31番)を入力で使用します。

下の方で使用中の端子として29番もリストされているのは、前回作成のrpi-gpio-outノードが29番を使っているからです。

フィルタノードの設定は簡単。「値が変化した時のみ」中継指定です。これでピンの値が0から1、1から0へ変化する場合のみ捕捉できる筈。いわゆるエッジ・センスな動作になりますな。

RpiIN_filter_SETTINGS

実機動作確認

1mほどの配線の先にある拡張ボードが以下に。下で光っているLEDは前回の出力側の操作によって光っておるものです。今回は、上の黄色のプッシュスイッチを押してみます。

ExternalDemoBoard

プッシュスイッチをごく短時間押して離したときのデバッグウインドウの様子が以下に。スイッチを押さない状態ではフォトカプラ内のフォトトランジスタに電流は流れないので、GPIO6端子には1が読めている筈。スイッチを押すと、フォトカプラ内のLEDが点灯し、端子には0が読めると。スイッチを放すとまた1に復帰。

2回押して離してしたら、こんな感じ。

RpiIN_RESULT

手動のスイッチくらいであれば、make/break 検出できる? ホントか。知らんけど。

ブロックを積みながら(70) Node-RED、rpi-gpio out ノード へ戻る

ブロックを積みながら(72) Node-RED、websocket in/out ノード へ進む