開発を行う

4.1. Node-RED に接続する

3章Armadillo のセットアップ を完了している場合は Armadillo を起動すると、自動的に Node-RED コンテナが起動します。 Node-RED への接続には 「ネットワークに接続する」 で取得した IP アドレスを使用します。

パソコンの Web ブラウザから、http://<ipアドレス>:1880/ にアクセスしてください。

images/node-red/common-images/start.png

図4.1 初回起動時の Node-RED 画面


Node-RED には大きく3つの領域があります。

  • パレット

使用可能なコアノード、カスタムノードの一覧を表示します。

  • ワークスペース

Node-RED では一つのアプリケーションの流れをフローという単位で表します。 ワークスペース上にノードを繋げてフローを作成します。 パレットから必要なノードをワークスペースにドラッグ、ドロップで配置します。

  • サイドバー

選択したノードの情報や、デバッグメッセージを表示します。

images/node-red/common-images/start_guide.png

図4.2 Node-RED の画面領域


4.2. Node-RED コンテナのログを表示する

パソコンの Web ブラウザから、http://<ipアドレス>:1880/node-red.log にアクセスすると Node-RED コンテナのログが表示されます。

このログファイルは /var/app/rollback/volumes/node-red/log に保存されています。ログのサイズが 5MB を超えると新しいログファイルに移行します。 古いログファイルを表示したい場合は、http://<ipアドレス>:1880/node-red.log.1 にアクセスしてください。

4.3. Node-RED で利用可能なノードの一覧

3章Armadillo のセットアップ でインストールした Node-RED コンテナには Node-RED のコアノードの他にインストールされているカスタムノードがあります。 インストール済のカスタムノードは以下になります。

  • Dashboard ノード

Dashboard を表示するノードです。

  • exit ノード

Node-RED を終了するためのノードです。

4.4. フローを作成する

Node-RED では一つのアプリケーションの流れをフローという単位で表します。 各ノードを使用したフローの作成方法について紹介します。

4.4.1. LED を制御する

ここでは、LED を1秒間隔で点滅するフローを作成します。すべて Node-RED のコアノードを使用します。 Armadillo-640 の LED は以下がありますが、今回対象にするのはユーザー LED(緑) です。 ユーザー LED(緑) の場所については 「インターフェースレイアウト」 をご確認ください。

ユーザー LED(緑) は /sys/class/leds/green/brightness ファイルへ値を書き込むことによって、LEDの点灯/消灯を行うことができます。 0 を書き込むと消灯、0 以外の値 (1~255) を書き込むと点灯します。

表4.1 LED 信号配列

部品番号 名称(色) 説明

LED3

ユーザー LED(赤)

i.MX6ULLのGPIO1_IO05ピンに接続、(Low: 消灯、High: 点灯)

LED4

ユーザー LED(緑)

i.MX6ULLのGPIO1_IO08ピンに接続、(Low: 消灯、High: 点灯)

LED5

ユーザー LED(黄)

i.MX6ULLのUART1_CTS_Bピンに接続、(Low: 消灯、High: 点灯)


  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。
  2. [inject] ノードのプロパティを編集します。[inject] は2秒間隔で実行します。

    名前: LED Blink
    繰り返し: 指定した時間間隔
    時間間隔: 2秒
    images/node-red/common-images/led_blink_inject_prop.png

    図4.3 [inject] ノードのプロパティ内容


  3. [trigger] ノードをドラッグ、ドロップします。
  4. [trigger] ノードのプロパティを編集します。 [trigger] は 1 を送信して1秒待機後、0 を送信します。これにより点滅動作を実現します。

    送信データ:1
    送信後の処理:指定した時間待機
    1秒
    再送信データ:0
    images/node-red/common-images/led_blink_trigger_prop.png

    図4.4 [trigger] ノードのプロパティ内容


  5. [LED Blink] ノードの右側にある端子をクリックし、[trigger] ノードの左側の端子を選択して放します。
  6. [write file] ノードをドラッグ、ドロップします。
  7. [write file] ノードのプロパティを編集します。 /sys/class/leds/green/brightness ファイルへ [trigger] からの送信データを書き込みます。

    ファイル名: /sys/class/leds/green/brightness
    動作: ファイルを上書き
    文字コード: デフォルト
    名前: green LED
    images/node-red/led_blink_green_led_prop.png

    図4.5 [write file] ノードのプロパティ内容


  8. [trigger] ノードの右側にある端子をクリックし、[green LED] ノードの左側の端子を選択して放します。
  9. [debug] ノードをドラッグ、ドロップします。
  10. [green LED] ノードの右側にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/led_blink_green_led_flow.png

    図4.6 LED を1秒間隔で点滅するフロー


  11. 画面右上の [デプロイ] を押します。ユーザー LED(緑) が1秒毎に点滅を繰り返す動きをすれば成功です。

4.4.2. CPU の測定温度を取得する

ここでは、 Armadillo-640 の CPU の測定温度を1秒間隔で取得するフローを作成します。全て Node-RED のコアノードを使用します。 /sys/class/thermal/thermal_zone0/temp ファイルの値を読み出すことによって測定温度を取得することができます。 温度はミリ°C の単位で表示されるため、°C 単位への変換も行います。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。
  2. [inject] ノードのプロパティを編集します。[inject] は1秒間隔で実行します。

    繰り返し: 指定した時間間隔
    時間間隔: 1秒
    images/node-red/common-images/get_cpu_temp_inject_prop.png

    図4.7 [inject] ノードのプロパティ内容


  3. [read file] ノードをドラッグ、ドロップします。
  4. [read file] ノードのプロパティを編集します。 /sys/class/thermal/thermal_zone0/temp ファイルの値を読み出します。

    ファイル名: /sys/class/thermal/thermal_zone0/temp
    出力形式: 文字列
    文字コード: デフォルト
    名前: CPU temp
    images/node-red/common-images/get_cpu_temp_read_prop.png

    図4.8 [read file] ノードのプロパティ内容


  5. [Get CPU temp] ノードの右側にある端子をクリックし、[CPU temp] ノードの左側の端子を選択して放します。
  6. [function] ノードをドラッグ、ドロップします。
  7. [function] ノードのプロパティを編集します。 CPU の測定温度がミリ°C の単位のため、°C の単位へ変換します。 msg.payload で渡された値を 1000 で割り、msg.payload に戻します。

    名前: CPU temp calc
    コード:
    msg.payload = msg.payload / 1000;
    return msg;
    images/node-red/common-images/get_cpu_temp_calc_prop.png

    図4.9 [function] ノードのプロパティ内容


  8. [CPU temp] ノードの右側にある端子をクリックし、[CPU temp calc] ノードの左側の端子を選択して放します。
  9. [debug] ノードをドラッグ、ドロップします。
  10. [CPU temp calc] ノードの右側にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/get_cpu_temp_flow.png

    図4.10 CPU の測定温度を1秒間隔で取得するフロー


  11. 画面右上の [デプロイ] を押します。デバッグメッセージに1秒毎に CPU の測定温度が表示されます。

4.4.3. RS-485 modbus RTU 読み出しを行う

ここでは、 USB RS-485 変換器を使用した Modubus RTU 読み出し用フローを作成します。 Node-RED のコアノードのほかに modbus-client ノード、Modbus-Read ノード、 modbus-response ノードを使用します。 RS-485 シリアルインターフェースのデバイスファイルは、/dev/ttyUSB0 を使用します。 USB の場所については 「インターフェースレイアウト」 をご確認ください。 今回は以下のRS-485通信対応デバイスを想定した場合の設定内容となります。 実際に動作確認する場合は、使用するRS-485通信対応デバイスの設定に変更してください。

ユニットID: 1
通信プロトコル: Modbus RTU
ボーレート: 9600
読み出しアドレス: 0x00
ファンクションコード: 1
  1. パレットから [Modbus-Read] ノードをワークスペースにドラッグ、ドロップします。
  2. [Modbus-Read] ノードのプロパティを編集します。
  3. 先に Server を設定する必要があります。[新規に modbus-client を追加] の右隣の編集ボタンを押して [modbus-client] を作成します。

    名前: RS485 slave device
    Type: Serial
    Serial port: /dev/ttyUSB0
    Serial type: RTU
    Baud rate: 9600
    Unit-Id: 1
    images/node-red/common-images/read_modbus_client_prop_for_usb.png

    図4.11 [modbus-client] ノードのプロパティ内容


  4. [Modbus-Read] ノードのプロパティを編集します。

    名前: slave device
    トピック:
    Unit-Id:
    FC: FC 1:Read Coil Status
    Address: 0
    Quantity: 1
    Poll Rate: 1 Second(s)
    Server: RS485 slave device
    images/node-red/common-images/read_modbus_prop.png

    図4.12 [Modbus-Read] ノードのプロパティ内容


  5. [Modbus-Response] ノードをドラッグ、ドロップします。
  6. [slave device] ノードの右側にある端子をクリックし、[Modbus-Response] ノードの左側の端子を選択して放します。

    images/node-red/common-images/read_modbus_flow.png

    図4.13 RS-485 を使用した Modubus RTU 読み出し用フロー


  7. 画面右上の [デプロイ] を押します。読み出しに成功すると1秒毎に読みだした値が更新され [Modbus-Response] ノードの下に表示されます。

4.4.4. CPU の測定温度のグラフをダッシュボードに表示する

「CPU の測定温度を取得する」 で取得した CPU 温度をダッシュボードにグラフとして表示するフローを作成します。

  1. サイドバーの右端にある三角形のボタンを押し、[ダッシュボード] を選択します。

    images/node-red/common-images/dashboard_select.png

    図4.14 [ダッシュボード]を選択する


  2. [ダッシュボード] 編集画面が表示されることを確認します。

    images/node-red/common-images/dashboard_start.png

    図4.15 ダッシュボード編集画面


  3. [+タブ] ボタンを押して [Tab1] を追加します。

    images/node-red/common-images/dashboard_add_tab.png

    図4.16 ダッシュボードに [TAb1] を追加


  4. [Tab1] プロパティを編集します。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_tab_prop.png

    図4.17 [Tab1] プロパティ内容


  5. [Armadillo] タブが追加されました。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_add_armadillo.png

    図4.18 ダッシュボード編集画面に [Armadillo] タブが追加


  6. [Armadillo] 横の [+グループ] ボタンを押して [Group1] を追加します。

    名前: Armadillo
    アイコン: dashboard
    images/node-red/common-images/dashboard_add_group.png

    図4.19 ダッシュボード編集画面に [Group1] グループが追加


  7. [Group1] プロパティを編集します。

    名前: Group 1
    タブ: Armadillo
    種類:
    幅: 15
    □グループ名を表示する
    images/node-red/common-images/dashboard_group_prop.png

    図4.20 [Group1] プロパティ内容


  8. [chart] ノードをワークスペースにドラッグ、ドロップします。ダッシュボード編集画面の [Group1] グループに追加されたことを確認します。

    images/node-red/common-images/dashboard_add_chart.png

    図4.21 ダッシュボード編集画面に [chart] ノードが追加


  9. [chart] ノードのプロパティを編集します。

    グループ: [Armadillo] Group 1
    サイズ: 自動
    ラベル: CPU temp
    種類: 折れ線グラフ
    X軸: 直近1時間
    X軸ラベル: HH:mm:ss
    Y軸: 最小 20 最大 50
    凡例: 非表示 補完: 直線
    images/node-red/common-images/cpu_temp_dashboard_chart_prop.png

    図4.22 [inject] ノードのプロパティ内容


  10. [CPU temp calc] ノードの右側にある端子をクリックし、[CPU temp] ノードの左側の端子を選択して放します。

    images/node-red/common-images/cpu_temp_dashboard_flow.png

    図4.23 CPU の測定温度のグラフをダッシュボードに表示するフロー


  11. 画面右上の [デプロイ] を押します。ダッシュボード編集画面の [テーマ] タブの右側にある四角に矢印が重なったボタンを選択すると、ダッシュボードが表示されます。

    images/node-red/common-images/cpu_temp_dashboard.png

    図4.24 CPU の測定温度のグラフのダッシュボード


  12. ダッシュボードの CPU 温度のグラフは一秒毎に更新されます。

4.4.5. 外部プログラムを実行する

ここでは、外部プログラムを実行しその結果を取得するフローを作成します。 外部プログラムは [exec] ノードで実行することができます。 ここでの外部プログラムとはシステムコマンドやユーザー自身が作成したプログラムのことを指します。

例として date コマンドを実行するフローを作成します。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします。 プロパティはデフォルトから変更ありません。
  2. [exec] ノードをドラッグ、ドロップします。
  3. [exec] ノードのプロパティを編集します。

    コマンド: date
    引数: なし
    images/node-red/common-images/exec_prop.png

    図4.25 [exec] ノードのプロパティ内容


  4. [indect] ノードの右側にある端子をクリックし、[exec] ノードの左側の端子を選択して放 します。
  5. [debug] ノードをドラッグ、ドロップします。
  6. [exec] ノードの右側の一番上にある端子をクリックし、[debug] ノードの左側の端子を選択して放します。

    images/node-red/common-images/exec_flow.png

    図4.26 外部プログラムを実行するフロー


  7. 画面右上の [デプロイ] を押します。
  8. [inject] ノードの左の四角を押すと [exec] ノードに設定した date コマンドが実行され標準出力の結果が デバッグメッセージに表示されます。

[exec] ノードの右の端子は上からそれぞれ「標準出力」「標準エラー出力」「返却コード」となっており、 取得したい出力によって使い分けることができます。

4.4.6. Node-RED を終了する

ここでは、 Node-RED を任意のタイミングで終了するフローを作成します。 Node-RED のコアノードのほかに exit ノードを使用します。

[警告]

Node-RED 終了後、Node-RED を再起動するためには Armadillo-640 の電源を再投入する必要があります。

  1. パレットから [inject] ノードをワークスペースにドラッグ、ドロップします
  2. [inject] ノードのプロパティを編集します。

    名前: Finish Node-RED
    繰り返し: なし
    images/node-red/common-images/finish_inject_prop.png

    図4.27 [inject] ノードのプロパティ内容


  3. [exit] ノードをドラッグ、ドロップします。
  4. [exit] ノードのプロパティを編集します。

    Name: exit
    Exit code: 0
    images/node-red/common-images/finish_exit_prop.png

    図4.28 [exit] ノードのプロパティ内容


  5. [Finish Node-RED] ノードの右側にある端子をクリックし、[exit] ノードの左側の端子を選択して放します。

    images/node-red/common-images/finish_flow.png

    図4.29 Node-RED を任意のタイミングで終了するフロー


  6. 画面右上の [デプロイ] を押します。[Finish Node-RED] ノードの左側にあるボタンを押すと Node-RED が終了します。

4.5. ユーザデータを削除する

Node-RED に関するユーザデータは /var/app/rollback/volumes/node-red/root に保存されます。 当ディレクトリを削除した場合はユーザデータは全て削除されます。 この場合 Node-RED のブラウザからインストールしたカスタムノードは削除されます。