ブロックを積みながら(51) Node-RED、http requestノードでpost

Joseph Halfmoon

今までNode-REDと「先っぽ」のマイコンの間の通信はMQTTのみでした。別件でhttpでアクセスできるマイコンボードが登場、ESP-EYEであります。ESP-EYEもMQTTは出来る筈ですが、現状、httpdが走っています。この機会にNode-REDからhttpつかって、get/postしてみることに。行き当たりばったり。

※「ブロックを積みながら」投稿順 index はこちら

別件でESP-EYEでhttpdを走らせた件の投稿は以下です。

IoT何をいまさら(104) ESP-EYE、ESP-IDFでSimple HTTPD

また、ターゲットのESP-EYEのメーカESPRESSIFの製品ページは以下です。

ESP-EYE AI Board | Espressif

Simple HTTPD

現在ESP-EYEボード上で走っているのはHTTPサーバとしてはミニマム仕様のプログラムです。機能はこれだけ。

    • http://ESP-EYEのアドレス/helloにGETで接続すると固定の挨拶を返してくる
    • http://ESP-EYEのアドレス/echoにPOSTで接続してパラメータを投げると、そのまま投げ返してくる
実験用のフロー

実験に使ったフローは冒頭のアイキャッチ画像掲げた通りの2系統です。

    • GET用は、トリガをもらったら /hello にGETでアクセスするだけ。そしてレスポンスをそのままデバッグウインドウへ出力。
    • POST用は、入力メッセージのJSONを POSTのパラメータとして/echo に投げます。そしてレスポンスはデバッグウインドウへ出力
ノードの設定

GET用の http requestノードの設定が以下です。

httpREQgetB
入力される msg.payloadはトリガに使うだけで内容は無視です。アクセス先のURLを書き込んであります。レスポンスはグリーティングメッセージが返ってくるだけなので UTF8の文字列として出力という設定にしました。

次はPOST用のInjectノードの設定です。

EchoTrigger
POST用のInjectノードでは、msg.payloadにJSONオブジェクトを載せて送りだしています。といって内容はプロパティ名 test に値 messageが載っているだけです。実際にJSONオブジェクトとして解釈してPOSTに使用してくれるよね、という確認用。

POST用の http requestノードの設定がこちら。

httpREQpostB
POSTの場合、JSONオブジェクトがペイロードに載ってくるのが前提のようです。下の方に書かれているとおり、JSONの構文解析に失敗すると文字列として投げられるみたい。そして、httpレスポンスもJSONオブジェクトとして次段ノードに受け渡す設定。

動作確認

まずはESP-EYEボードの起動をホストのシリアル端末から確認します。その後、ブラウザのNode-REDエディタ画面から、GETメソッドをつかうHelloにトリガをかけてみます。するとPayloadに文字列

Hello World! [FROM ESP-EYE]

が返ってきました。予定どおり。statusCodeは 200 (OKというやつ。)

Results

続いて POSTメソッドを使う echo 側をトリガしてみます。payloadには、objestが返ってきており、その内容は testプロパティの値は message でした。オウム返しされています。勿論、statusCodeは 200でOK。

実際のところ、先っぽのマイコンとの通信の主体はMQTT経由だと思うのです。今回のようにHTTPを利用するのはレアケースかと。どちらかというとHTTPは、ネットワーク世界に乗り出していくためのものですかね。期待がひろがちゃいますけど。

ブロックを積みながら(50) Node-RED、html(パース)ノードで要素の抽出 へ戻る

ブロックを積みながら(52) Node-RED、xmlノードでxmlファイルの変換 へ進む