【RaspberryPi】Node-REDでGPIOを使ってみる!

ようやくNode-REDを使ってRaspberryPiGPIOを操作したいと思います。 これまでやってきたことは、RaspberryPiでなくてもできますが、GPIOの使用に関しては少し特徴的な操作になるかなと思います。

これがやりたかった…

RaspberryPiにインストールしたNode-REDに含まれる特有のノード

f:id:ueponx:20190925074550p:plain

RaspberryPiNode-REDをインストールすると特有のノードも一緒にインストールされます。(バージョンによって入ってない場合もありますが、別途拡張ノードとしてインストールすることはできます)

rpiでノード検索のフィルタすると4つのノードが表示されます。

f:id:ueponx:20190925074552p:plain

表示されるのは以下の4つになります。

  • rpi-gpio(入力)
  • rpi-gpio(出力)
  • rpi-mouse(入力)
  • rpi-keyboard(入力)

mousekeyboardRaspberryPiのUSBに接続されたマウスやキーボードを入力として扱えるノードとなります。 今回はとりあえずLチカをしたいのでrpi-gpio(出力)を使います。

f:id:ueponx:20190925074555p:plain

ノードを選択して、ワークスペースにドロップします。すると名称がPINに変更されます。

f:id:ueponx:20190925074558p:plain

次にダブルクリックしてノードのプロパティを開きます。すると、以下の様なGPIOのピン一覧が表示されます。 最近老眼になってしまったので、こういうふうにコーディング時に表示されているととてもわかりやすい、便利です!

f:id:ueponx:20190925074600p:plain

今回はGPIO-04 7を使用することにします。ラジオボタンの該当の位置をクリックして選択しておきます。また出力もデジタル出力のままにしておきます。 端子の状態は今回は設定していませんが、端子の状態を初期化にチェックしておいたほうが無難だと思います。

設定が終わったら【完了】ボタンをクリックします。

f:id:ueponx:20190925074824p:plain

するとノードはGPIOのPIN設定が反映されて【PIN:7】と表示されます。

f:id:ueponx:20190925074710p:plain

ワークスペースは以下のようになっていると思います。あとは実行に必要になるノードを追加していくことになります。

f:id:ueponx:20190925074713p:plain

GPIOの入力のノードを使用してもいいのですが、もっと簡単に試すならinjectノードを使用するほうが楽に試すことができます。 ノードからinjectノードを選択し、ワークスペースに2つドロップします。

f:id:ueponx:20190925074715p:plain

ワークスペースに2つノードをドロップし、

f:id:ueponx:20190925074719p:plain

つづいて、実行結果をGPIO以外でも表示できるようにdebugノードを配置します。

f:id:ueponx:20190925074721p:plain

以下のようにGPIOのoutputノード```の下辺りに配置しておきます。

f:id:ueponx:20190925074724p:plain

これで必要なノードの配置が終わりました。あとは、これらのノードの端子を接続していきます。以下のように接続します。

f:id:ueponx:20190925074741p:plain

あとはそれぞれのノードのプロパティを設定していきます。入力となるinjectノードGPIOノード数値01入力するので、

f:id:ueponx:20190925074744p:plain

まずペイロードのプルダウンを数値と変更して、

f:id:ueponx:20190925074746p:plain

その値に0を入力します。設定が終わったら【完了】ボタンをクリックします。

f:id:ueponx:20190925074750p:plain

もう一方のinjectノードは同じように操作し、値は1として設定し、【完了】ボタンをクリックします。

f:id:ueponx:20190925074753p:plain

フローを見たときにノードの状態が以下のようになっていればOKです。

f:id:ueponx:20190925074756p:plain

これで実行時にinjectノードをクリックすれば設定した数値が入力されるようになります。ここまでできたら【デプロイ】ボタンをクリックします。 これで準備完了です。

実行してみる

デプロイが成功したら、早速動作させてみましょう!

f:id:ueponx:20190925074811p:plain

0を出力するinjectノードをクリックすると以下の様に表示されます。するとそれまでGPIOノードの下あたりにある表示がOKだったものが0と表示が変わります。

f:id:ueponx:20190925074814p:plain

では、続いて1を出力するinjectノードをクリックすると、以下のように表示され、GPIOの下にある表示が1に変化します。

f:id:ueponx:20190925074817p:plain

デバックの表示も同様に表示しています。

f:id:ueponx:20190925074828p:plain

ソフト的には動作することがわかったのであとはLEDをRaspberryPiGPIO7に接続してOKであることを確認します。

RaspberryPiにLEDを接続する

先程のプログラムを動作させるために、回路を以下の様に作ってみます。

必要になるものとしては

  • 330Ωの抵抗 1本
  • LED 1個
  • ブレッドボード
  • ブレッドボード用ジャンパーワイヤ2本

といったところです。これで以下のように組み立ててました。

f:id:ueponx:20190928074744p:plain

実際にinjectノードを【1】の方をクリックすると点灯

f:id:ueponx:20190928101829j:plain

【0】の方をクリックすると消灯

f:id:ueponx:20190928101856j:plain

無事に動作しているようです。 ようやく自分がNode-REDでやりたかったことが達成できました!

injectノードの代わりにrpi-mouseを使用してみる

このまま終わっても良いのですが、もう少し別の機能も試してみたいと思います。 RaspberryPiの関連ノードでrpi-mouseを使用して、これをinjectノードの入力の代わりにしてみましょう。 ノードの一覧からrpi-mouseを選択し、

f:id:ueponx:20190928110828p:plain

ワークスペースにドロップして配置します。

f:id:ueponx:20190928110935p:plain

自分はこんな風にドロップしてみました。ノードの名称はドロップがされた段階でPi Mouse Leftという名称に変更されて、マウスの左ボタンの押下(1が出力)解放(0が出力)に紐付けられます。

f:id:ueponx:20190928111214p:plain

ノードをダブルクリックするとその様子も確認できます。

f:id:ueponx:20190928111012p:plain

後は、このノードを先程まで使用していたrpi-gpio出力ノードdebugノードの端子に紐付けます。

f:id:ueponx:20190928111345p:plain

後は【デプロイ】ボタンをクリックします。あとは実行をさせてみます。

f:id:ueponx:20190928111518p:plain

マウスボタンを押し込むとLEDが点灯し、マウスのボタンから指を離すと消灯します。これでマウスをスイッチのように使用する事ができるようになりました。

おわりに

ようやくNode-REDを使用してLEDの点灯(Lチカ)を行うことができるようになりました。操作などから学んできましたがようやくという感じでしょうか。

ただ、Node-REDGPIOの割当がGUIベースでわかりやすいのは非常に良い機能だなと思いました。あとは、他の機能などと連携させるとロジックの根幹を 作るにはいいプロダクトかなと思います。今後は拡張ノードも多くでているのでそれらをもう少し調べながら使ってみようと考えています。 次はカメラでしょうか?

【Node-RED 関連エントリ-】

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com

uepon.hatenadiary.com