Contents
MCP23008でデジタルI/Oを使用する
PDHとBluetoothでペアリングされたセンサモジュールのデバイスを、PDHのNode-REDフローで動かします。
MCP23008はGP0~GP4を入力、GP5~GP7を出力ポートとして使用しています。この入出力ポートを使用して、センサモジュールに外付けしたLEDをコントロールする事例を紹介します。インターフェース回路や駆動対象の機器はそれぞれの現場に合わせて構成してください。
センサモジュールのコネクタに接続するケーブルはこちらで紹介しています。
*注意点*
GP5~GP7の出力ポートの状態は電源OFF時に保持しませんので、センサモジュールの電源を切ったりリセットがかかると初期化されます。
入力の電圧は0V~3.3Vの範囲に抑えてください。絶対最大定格のシンク電流、ソース電流は1ピン当たり25mAです。データシートを確認して必要な場合はインターフェース回路を作成してください。詳しくは7章の電子回路をご覧ください。
MCP23008 データシート
1)出力ポートの利用:LED回路を接続する
センサモジュールのMCP23008出力端子は4ピンコネクタです。コネクタの端子配置はこちら(コントロールする外部機器を接続する)をご覧ください。このコネクタの4番ピンGNDを接続し、1番ピンGP5の信号を使用してMOS FETを通してLEDを点灯する回路を作成しています。GP5のレベルが1(High)になるとLEDが点灯、0(Low)になると消灯します。

Node-REDのフローを作成する
PDHにインストールしたNode-REDのフローエディタを開きます。簡単な例としてinjectノードを使用してPDHからセンサモジュールにコマンドを送信するフローを作成します。

これで「デプロイ」してから、インジェクトノードの左のボタンをクリックするとセンサモジュールに接続したLEDを点灯/消灯することができます。


事例ではinjectノードをトリガにしてLEDの点灯/消灯をおこないましたが、ダッシュボードのユーザーインターフェースから操作したり、Node-REDフロー内でデータ処理をした結果に基づき点灯/消灯させることもできます。
2)入力ポートの利用:プッシュボタンを接続する
センサモジュールのMCP23008入力端子は6ピンコネクタです。このコネクタの6番ピンGNDを接続し、3番ピンGP2にプッシュボタンを接続してデジタル信号のHigh(1)、Low(0)を入力する回路を作成しています。入力ポートは内部で100KΩの抵抗でプルアップされていますので、プッシュボタンを押したときにポートがGNDに接続されLow(0)が入力されるようにしています。プッシュボタンを押さない場合はHigh(1)の信号が読み取れます。
写真の回路では、入力ポートに接続したプッシュボタンの右側に、出力ポートに接続したLED点灯の回路を組んでいます。

MCP23008のデータ読み込みを有効化する
Node-REDダッシュボードに用意したセンサデバイスコントロールから、MCP23008の有効化とインターバルの設定を行います。コントロール画面でまずRELOADボタンを押して情報を読み込み、MCP23008の項目を探してon/offスイッチをonにします。インターバルはデータを読み込む周期の設定です。単位はmsです。周期が長いと短い入力は捉えられませんが、周期を短くしすぎると処理負荷が重くなります。応用事例に応じてバランスの取れたインターバル設定をしてください。


この事例ではインターバルは少し長めの500 msを設定しました。
Node-REDのフローを作成する
PDHにインストールされているNode-REDのフローエディタを開きます。
「sensor-module_data」のタブにある「センサ処理分岐」のノードの出力から、MCP23008の端子を見つけてChangeノードを接続します。ここからMCP23008の入力ポートの信号を取り出すことができます。

追加したChangeノードでは、プッシュボタンを接続したGP2のデータを抽出する設定を行います。

このChangeノードの後ろにdebugノードを設けてデータを確認すると、プッシュボタンの操作に合わせて数字が1または0に変化していることが分かります。

このGP2のデータを使って、GP5の出力ポートに接続したLEDを操作してみましょう。
出力ポートの操作の例で挙げたLED ONとLED OFFのノードを配置して、その前にSwitchノードを接続します。
Switchノードの設定は図のように、msg.payloadが0であれば端子1に、1であれば端子2に出力するようにします。


このようにフローを作成する事で、プッシュボタンを押しているとLEDが点灯する仕組みを作る事ができます。

この事例ではプッシュボタンの隣のLEDが点灯しているだけですが、内部的には下記の動きをしています。
1.センサモジュールでボタンの状態を読み込み、BluetoothでPDHに送信
2. PDH内のフローでボタンの状態に応じたLED点灯/消灯のコマンドをBluetoothでセンサモジュールに送信
3. センサモジュールで、受信したコマンドに応じてLED点灯のポートを操作
3)GPIOをNode-REDのダッシュボードから操作する
これまでの出力ポートと入力ポートの使い方を踏まえて、Node-REDのダッシュボードで作った操作パネルからMCP23008のポートを動かしてLEDをON/OFFする仕組みを作ってみましょう。Node-REDダッシュボードを使用すると、操作パネルにアクセスできるネットワーク上のコンピュータからも操作ができるようになります。同様の仕組みをクラウドサーバを使用して作成すれば、ネットワーク上からリモートで機器の制御をすることもできます。
Node-REDのフローにダッシュボードのノードを追加する
Node-REDのインストールの際に、追加ノードとしてダッシュボード(node-red-dashboard)とUI LED(node-red-contrib-ui-led)をインストールしていますので、これを使用します。下記のようにフローを組み立ててください。
UI-LEDを駆動するSwitchノードとChangeノードは下記のような設定にします。

次にUI-LEDとダッシュボードのボタンを設定します。UI-LEDをダブルクリックで開きます。
既にあるダッシュボードグループとダッシュボードタブの他に、新たに「GPIO」タブに「LED」グループを作成します。
1.ledノードの編集画面でグループのプルダウンで「新規にdashboard groupを追加」を選択し、右側の鉛筆アイコンをクリックします。
2.「新規にdashboard group 設定ノードを追加」のウインドウが開くので、グループの名前に「LED」を設定し、プルダウンから「新規にdashboard tabを追加」を選択し、鉛筆アイコンをクリックします。
3.「新規にdashboard tab設定ノードを追加」のウインドウが開くので、タブの名前に「GPIO」を設定します。
4.右上の「追加」ボタンを押して、ここまでで開いたGroupとTabの設定ウインドウを閉じます。

この操作でGPIOタブにLEDグループができました。
ボタンノードなど、同じ画面に表示する他のダッシュボードノードでは、このグループを選択します。
更にledノードの設定画面を下にスクロールして、数値が0の時の色と数値が1の時の色を設定します。
red,green,blueなどの色名を指定すると、その色で表示されるようになります。
この事例では「数値」が0の時:gray, 1の時:greenを指定しています。

次にダッシュボードのボタンの設定を行います。ONのボタンとOFFのボタンをそれぞれ下記のように設定します。

ダッシュボード画面でボタンやLEDなどの部品の配置を変更する場合は、レイアウトエディタを開いて編集します。

これでデプロイし、ダッシュボード画面からタブを「GPIO」に切り替えると、操作パネルからLEDのON/OFFができるようになります。
このダッシュボード画面は、同じネットワーク内(同じWiFiアクセスポイントを使用)に接続しているスマートフォンからも操作することができます、


