今まで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の製品ページは以下です。
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ノードの設定が以下です。
入力される msg.payloadはトリガに使うだけで内容は無視です。アクセス先のURLを書き込んであります。レスポンスはグリーティングメッセージが返ってくるだけなので UTF8の文字列として出力という設定にしました。
次はPOST用のInjectノードの設定です。
POST用のInjectノードでは、msg.payloadにJSONオブジェクトを載せて送りだしています。といって内容はプロパティ名 test に値 messageが載っているだけです。実際にJSONオブジェクトとして解釈してPOSTに使用してくれるよね、という確認用。
POST用の http requestノードの設定がこちら。
POSTの場合、JSONオブジェクトがペイロードに載ってくるのが前提のようです。下の方に書かれているとおり、JSONの構文解析に失敗すると文字列として投げられるみたい。そして、httpレスポンスもJSONオブジェクトとして次段ノードに受け渡す設定。
動作確認
まずはESP-EYEボードの起動をホストのシリアル端末から確認します。その後、ブラウザのNode-REDエディタ画面から、GETメソッドをつかうHelloにトリガをかけてみます。するとPayloadに文字列
Hello World! [FROM ESP-EYE]
が返ってきました。予定どおり。statusCodeは 200 (OKというやつ。)
続いて POSTメソッドを使う echo 側をトリガしてみます。payloadには、objestが返ってきており、その内容は testプロパティの値は message でした。オウム返しされています。勿論、statusCodeは 200でOK。
実際のところ、先っぽのマイコンとの通信の主体はMQTT経由だと思うのです。今回のようにHTTPを利用するのはレアケースかと。どちらかというとHTTPは、ネットワーク世界に乗り出していくためのものですかね。期待がひろがちゃいますけど。