カテゴリー
ESP8266+ESP32+RISC-V

Node-REDで簡単ESP8266/ESP32 ワイヤレスセンサ用IoTゲートウェイ

Raspberry Pi+Node-REDを使えば、IoT用のゲートウェイを簡単に製作することが出来ます。
本ブログでは、トラ技2017年3月号と2016年9月号で紹介した各種ワイヤレスセンサ用のIoTゲートウェイを、Node-REDを使って製作する方法について紹介します。
下図はワイヤレスセンサの一例です。本センサは、トラ技2016年9月号に紹介した温度と湿度をUDPで送信するIoTセンサ機器のひとつです。送信間隔を60分にすれば、電池交換無しで最大1年間ほど動作が可能です。
トラ技2017年3月号と2016年9月号で紹介したワイヤレスセンサの一例(温湿度センサ)
下図はRaspberry Pi上で動作するNode-REDの画面の様子です。左上のノード「UDP 1024」で受信したデータを、右下のノード「Ambient」へ受け渡します。(ノード=Node-RED上に表示されたブロック)
左上のノード「udp 1024」が受信したCSV形式の文字列データを、ノード「csv」にてNode-REDで利用しやすいのオブジェクトへ変換し、ノード「grep_device」で温湿度センサのみを選択し、ノード「d(n):col(n+1)」でAmbient用のJSON形式へ変換し、ノード「Limit 1 msg/30s」で帯域制限を行ってから、ノード「Ambient」へ渡す。
この実験に必要なものは、以下の通りです。パソコン、Micro SDカード、電源(ACアダプタ、乾電池)などの各種周辺機器や備品なども必要です。
  • Raspberry Pi 3およびその周辺機器
  • ESP8266またはESP32用ワイヤレスセンサ
  • 無線LANアクセスポイント(インターネット接続済)

インストール方法

OS(Raspbien Stretch)がセットアップされたRaspberry Piより、以下のコマンドを実行して、Node-REDのセットアップ(すでにインストールされているNode-REDのバージョンアップ)を行います。インストール後、下記の3つ目のコマンドでNode-REDを起動します。
pi@raspberrypi:~ $ sudo apt-get update
pi@raspberrypi:~ update-nodejs-and-nodered
~更新にに10分から60分くらいかかる~
pi@raspberrypi:~ node-red-start &
2018年6月27日版のRaspbien(Raspberry Pi用のOS)をお使いの場合は、下記のコマンドを実行してください。
pi@raspberrypi:~ $ sudo apt-get update
~更新にに10分から60分くらいかかる~
pi@raspberrypi:~ node-red-start &
node-red-start コマンドによる起動時の一例を下図に示します。
起動に必要な時間は、1分以内です。メッセージ内に「Server now running」が表示されたら、Node-REDの準備完了です。パソコンのインターネットブラウザまたはRaspberry Pi内ブラウザから「point a browser at」に続くURLへアクセスしてください。上記の場合、http://192.168.0.15:1880へアクセスします。

Node-REDでUDPを受信してみよう

まずは、Node-REDでセンサから送られてきた値を受信してみましょう。以下の手順で、Node-RED用の設定を行います。
1. Node-REDの右上のメニューアイコン(3本の横線)をクリックし、「読込み」→「クリップボード」を選択してください。
2. インターネットブラウザの別ウィンドウで下記へアクセスし、JSON形式のテキストデータを[Ctrl]+[A]で全選択し、[Crtl]+[C]でクリップボードに保持してください。
UDP Logger BASIC フロー:
3. 下図の中央のグレーのエリアに[Ctrl]+[V]でペーストし、[読込み]をクリックしてください。
4. フロー図が選択された状態で表示されるので、ウィンドウのフロー1と書かれたシート内の適当な位置をクリックすると、下図のようにフロー図が固定されます。
5. 本フロー図を動作させるには、画面右上の赤色の「デプロイ」をクリックします。また、右側の子画面で「デバッグ」をクリックする
と、受信したUDPデータが表示されます。子画面が表示されていないときは[Ctrl]+[SPACE]キーを押してください。
動作確認が出来たら、各ノードをダブルクリックし、それぞれのノードを確認してみましょう。
深緑のノードは、デバッグ出力用です。他のノードに繋ぎ変えると、各ノードの出力を確認することが出来ます。
  • ノード「udp 1024」
    • UDPポート1024で受信したCSV形式の文字列データを出力します
  • ノード「add_date」
    • 日付・時刻を受信データの先頭に付与します
  • ノード「csv」
    • CSVデータをNode-REDで利用しやすいのオブジェクトへ変換します
  • ノード「grep_device」
    • デバイス名が5文字+_(アンダースコア)+1文字に一致するデータを通過させます
      (その他のデータは通過しない)
    • 送信側も同じ書式にすることで、無関係なパケットを通しにくくします
  • ノード「/home/pi/log_udp.csv」
    • 受信データをファイルへ出力します
  • ノード「msg.payload」
    • デバッグ出力用です
    • 右側のウィンドウのタブ「デバッグ」へ出力します

IoT用クラウドサービスAmbientへデータを送信する

こんどは、IoT用クラウドサービスAmbientへデータを送信してみます。
Node-REDの左側ウィンドウには、利用可能なノードが表示されています。初期状態では基本的なノードしか登録されていないので、以下の手順で、Ambient用のノードを追加します。
1. Node-REDの右上のメニューアイコン(3本の横線)から「パレットの管理」を選択してください。
2. タブ「ノードを追加」を選択し、検索欄に「ambient」と入力すると、Ambient用のノードが見つかります。内容を確認し、右下のボタン「ノードを追加」を押すと、インストールが始まります。インストールには数分以上の時間が、かかります。
2. 下記へアクセスし、内容を[Ctrl]+[A]で全選択し、[Crtl]+[C]で保持し、Node-REDの右上のメニューアイコン(3本の横線)をクリックし、「読込み」→「クリップボード」を選択し、ウィンドウ内に[Ctrl]+[V]で貼り付けてください。本ブログの冒頭から2枚目の写真のようなフロー図が表示されます、
UDP Logger Ambient フロー:
3. フロー図内のノード「Ambient」をダブルクリックし、IoT用クラウドサービスAmbient(https://ambidata.io/)で取得したIDとWrite Keyを下記の赤枠に入力してください。
4. ノード「grep_device」をダブルクリックし、「matches regex」の欄を確認してください。予め「humid_1」が入力されていますが、IoTセンサに登録した名前に合わせてください。
5. デプロイを実行すると、動作し始めます。IoT用クラウドサービスAmbient(https://ambidata.io/)へアクセスし、データが正しく送信されているかどうか確認してください。
各ノードの動作内容は、以下の通りです。
  • ノード「udp 1024」
    • UDPポート1024で受信したCSV形式の文字列データを出力します
  • ノード「csv」
    • CSVデータをNode-REDで利用しやすいのオブジェクトへ変換します
  • ノード「grep_device」
    • デバイス名「humid_1」の温湿度センサのデータを選択します(その他のデータは通過しない)
  • ノード「d(n):col(n+1)」
    • Ambient用のJSON形式へ変換します
    • CSV形式の先頭から順にデバイス名がcol1に、一つ目の値がcol2、以降、col3、4と続きます
    • Ambientでは8つのグラフ用データとして、d1~d8に割り当てます
  • ノード「Limit 1 msg/30s」
    • 30秒以内にデータ送信を行おうとしたときに、そのデータを破棄します
    • Ambientは1日あたり3000サンプルまでしか保存できないので、そのための制限です
  • ノード「Ambient」
    • IoT用クラウドサービスAmbientへデータを送信します

Node-REDの使用感

Node-REDをIoTゲートウェ?
?用に使用すると、フロー図化により、データの選択やフィルタリング、出力先などの見やすさが向上します。とくに、複数のIoT機器を連携動作させるための処理を分かりやすく記述することが出来る点で優れています。IoTゲートウェイとしての設定管理を行うためのツールとして、とても有効でしょう。
例えば、各種IoT機器の連携処理内容や機器間の関連付けは、変更することも多いと思います。そういった場合であっても、各ノードの組み換えが簡単です。必要なノードの設定変更箇所を、すぐに見つけることができます。
下図は、UDPで受信したデータのデバイス名に応じて、3種類のフローに分岐し、データを分別して保存したり、HTTPリクエストを他のデバイスへ送信したりするフロー図の一例です。
Node-REDの欠点は、ノードをダブルクリックしないと個々の処理内容の記述が見えない点と、フロー図だけでは処理が組めない(スクリプトの記述が必要な)点です。
とはいえ、細部の動きは分かりにい場合は、各ノードに具体的な処理名の名前をつけて、処理内容を分かりやすくすることができます。スクリプトが必要なな点についても、Node-REDを使わなければ、どのみちスクリプトを記述することになります。どちらも、たいした問題では無いでしょう。

参考情報

IoTセンサの一部はCQ出版社からダウンロードできます
各センサ用のプログラムは下記で公開しています
ボクにもわかるESP8266・ESP32
by ボクにもわかる電子工作
https://bokunimo.net/
 - 
Chinese (Simplified)
 - 
zh-CN
Chinese (Traditional)
 - 
zh-TW
English
 - 
en
French
 - 
fr
German
 - 
de
Italian
 - 
it
Japanese
 - 
ja
Korean
 - 
ko
Russian
 - 
ru
Spanish
 - 
es