ラズベリーパイのピンヘッダーコネクタに標準装備されている、GPIOのデジタル入出力を使用するNode-REDノードの使い方を学びます。
ラズパイのGPIO(汎用入出力)について
ラズベリーパイには、汎用的に使用できるデジタル入出力コネクタが装備されています。このコネクタには
- I2Cインターフェース
- SPIインターフェース
- シリアル通信
- EPROMインターフェース
などのインターフェース機能があり、Pin番号によっては複数の機能が一つのピンにアサインされています。本項では、重複使用の可能性が低い、下図に赤枠で示した範囲の入出力を使用します。
ノードの設定で使用するGPIO番号とは、この図の「GPIO.xx」とあるxxの番号です。コネクタPIN番号ではありませんので注が必要です。
ラズパイGPIO出力
iaCloud devices カテゴリーにある、ラズパイGPIO出力ノード[Rpi GPIO出力]を使用します。ノードの検索で「GPIO」と入力すると見つかると思いす。同時にRaspberry Pi カテゴリーのGPIO入出力も表示されますが、今回はiaCloud devices カテゴリーの[Rpi GPIO出力]を使用します。
[Rpi GPIO出力]ノードをワークスペースにドラッグ&ドロップし、ダブルクリックでプロパティ編集ウインドウを開きます。設定するプロパティは、出力するGPIOポートの番号だけです。(ノード名称は空欄のままでOKです。)GPIO番号は、上部の画像を参考にしてください。コネクタPIN番号ではなく、画像にあるGPIO.xxの「xx」の番号を指定してください。以下の画像では、GPIO.21を設定しています。
この[Rpi GPIO出力]ノードは、入力メッセージの「msg.pyload」が
- 文字列:”off”、”reset”、”stop”、
- 数値:0、
- 論理値:false、
のいずれでもない場合、設定されたGPIO番号のピンをOFF(false)にし、
- 文字列:”on”、”set”、”strat”,
- 数値:1、
- 論理値:true
の場合、ON(true)にします。
内部処理では、OFFすべき入力以外の時にONにするという処理を行っているので、これ以外の入力メッセージでも出力をONにできますが、明示的にこれらのどれかのを設定するのが良いでしょう。
GPIO出力の出力操作のための入力メッセージの生成に[injecti]ノードを使います。[inject]ノードは「共通カテゴリー」の最上部にあり見つけやすいと思います。[inject]ノードは、ノードの左端の操作部分(ボタン)を操作すると、予め設定した様々なメッセージを出力することのできるNode-REDの標準です。以下に示す画像では、出力メッセージに文字列 “on” と “off” をそれぞれ出力する二つの[inject]ノードを使っています。
[innject]ノードは、デフォルトでは「payload」と「topic」という二つの項目をメッセージに含むようになっています。今回は、「payload」しか使わないため、「topic」の行は右端の[x]で消してしまいましょう。「payload」の内容は「日時」となっているので、これを文字列とし、その内容に「on」と設定します。
同様にもう一つ[inject]ノードを使い、文字列内容に「off」を設定します。
以上のフローで、GPIOの出力を操作しても、出力にLEDなどを接続しないと動作は見えません。ここでは、ノードのステータス表示で確認します。injectノード[on]の左端のボタンを操作すると、[Rpi GPIO出力]ノードのステータス表示に「入力:on -> ON出力」と表示されるはずです。[off]injectノードのボタンを操作すると「入力:off -> OFF出力」と表示されるはずです。
実際にGPIO出力にLEDなどを接続するいわゆる「Lチカ」に関する情報は、ネット上にいっぱい溢れていますので、チャレンジしてみてください。ただし、電子回路に関する知識と電子工作の経験や器具・材料が必要です。
次は出力したGPIO出力を、LEDを光らせる代わりに、GPIO入力を読み取るノードを使って確認します。
GPIO出力をGPIO入力に接続
GPIO出力を入力に接続し、[Rpi GPIO出]ノードでON/OFFした信号を、[Rpi GPIO入力]ノードで読み取ります。そのためには、GPIO出力ピン(先の設定ではGPIO.21、ピン番号「40」でピンヘッダコネクタの一番端)とGPIO入力ピンを電気的に接続する必要があります。初歩的な電子工作が必要です。
次の項ではGPIO入力に、GPIO.20を使いますので、ピンヘッダーコネクタのピン番号では「38」で「40」とは隣同士です。
金属ドライバーなどでショートさせてもOKですが、できればピンヘッダーコネクターの接続用の電子工作部品を使いましょう。
ラズパイGPIO入力
「オブジェクトの設定」タブでは、定期収集周期は、GPIOの入力状態をia-cloudオブジェクトとしてメッセージ出力する時間間隔を設定します。「非同期収集有り」は一定の収集周期以外に、データに変化のあった場合に、その変化のあったGPIOの入力状態を表すia-cloudオブジェクトをメッセージ出力します。また、ia-cloudオブジェクトのオブジェクトキー(必須)やオブジェクトの説明を設定します。
先のGPIO出力と同様、iaCloud devices カテゴリーにあるラズパイGPIO出力ノード[Rpi GPIO出力]を使用します。ノードの検索で「GPIO」と入力すると見つかると思いす。[Rpi GPIO入力]ノードをワークスペースに追加してください。ノードをダブルクリックしプロパティ編集ウインドウを開きます。このノードは複数のGPIO入力を読み込み、それぞれにデータの名称をつけ、ia-cloudオブジェクトを出力メッセージに出力します。
「データ項目の設定」タブでは、入力状態を監視するGPIO入力の番号を設定します。先のGPIO配置図のGPIO番号で指定してください。データ名称は、割り振られたGPIO入力の番号に名称を付与します。以下の画像に示す例では、GPIO番号をそのまま名称としていますが、実際にはGPIO入力に割り振られた信号の、意味のある名称を付与するのが良いでしょう。上部にある「出力形式」は、ia-cloudオブジェクトで定義されるデジタル入力の表現形式を選択します。
- 設備稼働情報:dataValueとして以下の文字列を出力。
ON変化時”start”、OFF変化時”stop”、ON状態のまま”on”、OFF状態のまま”off” - アラーム&イベント:dataValueとして以下の文字列を出力。
ON変化時”set”、OFF変化時”reset”、ON状態のまま”on”、OFF状態のまま”off” - 文字列: “on” / “off”
- 数値: 1 / 0
- 論理値: true / false
[Rpi GPIO入力]ノードの出力メーッセージを表示するため、いつもの[debug]ノードを使います。フローをデプロイし、on/off のそれぞれの[inject]ノードの操作ボタンを操作すると、GPIO.19からリード線による接続を介して、GPIO.16へON/OFF状態が伝わり、[Rpi GPIO入力]ノードの出力メッセージにia-cloudオブジェクトが出力されているのがわかります。また10秒ごとに、設定した全てのGPIO入力の状態のia-cloudオブジェクトがメッセージ出力されています。
ia-cloudへの格納
次にこのデータを、ia-cloudサービス(CCSと呼びます。)へ送りクラウドのデータベースに格納するフローを作成しましょう。データのia-cloud格納には、ia-cloudのURLとユーザID、パスワードが必要です。ia-cloudのハンズオンワークショップ等に参加された方には、1年間の無償体験ユーザのIDが発行されています。IDを持っていない方で無償体験利用を希望の方は、ia-cloudまで連絡ください。
パレット上の[ia-cloud services]カテゴリーから[ia-cloud接続]ノードをワークスペース上にドラッグ&ドロップします。このノードは入力されたia-cloudリクエストを設定されたia-cloudサービス(CCS)に配信する機能のノードです。[Rpi GPIO入力]ノードは、出力メッセージとしてia-cloudオブジェクトをia-cloudサービスに格納するリクエストを出力するので、この出力を直接[ia-cloud接続]ノードの入力に接続することで、ia-cloudサービスへのデータオブジェクトの格納ができます。
[ia-cloud接続]のノードの設定では、ia-cloudサービス(CCS)の接続先URL、接続に使用するIDとパスワードを保持する設定ノード[CCS接続設定]を使用します。この設定ノードは一度作成すると、フロー上のどこからでも指定して利用することができます。また、ia-cloudサービス(CCS)にia-cloudオブジェクトを格納するデータ元を明示するため、[データソースのユニークキー]プロパティを設定する必要があります。任意の名称を指定できますが、ia-cloudサービス(CCS)の接続先URL内でユニークでなければなりません。
設定を終了後、[デプロイ]ボタンを押すと、[ia-cloud接続]ノードはia-cloudサービスへ接続要求を送り接続が確立すると、ノードのしたのステータス表示が[接続済み]に変わります。また、[Rpi GPIO入力]ノードからia-cloudオブジェクトが入力されるたびに、ia-cloudサービスへデータの格納を行います。この時、ノード下のステータス表示は、[要求中…]から[要求完了]を表示します。[ia-cloud接続]ノードの出力メッセージには、ia-cloudサービス(CCS)レスポンスメッセージが出力されるため、[debug]ノードを接続するとこれが確認できます。