LoginSignup
2
2

More than 1 year has passed since last update.

Node-RED MCU Editionでネットワーク接続(HTTP, MQTT)してみた。

Last updated at Posted at 2022-10-10

はじめに

Node-RED MCU Editionの環境構築、簡単なフロー、Lチカの動作確認まで終わったので、ついにネットワーク接続(HTTP, MQTT)を試してみます。

環境構築と動作確認については以下を参照してください。

GPIOの動作確認については以下を参照してください。

前提条件

  • Intel MacBook Pro (2017)
  • macOS Big Sur (バージョン 11.7)
  • M5Stick-C
    • ボタンA (GPIO37)
  • HTTPサーバ (Node-RED)
  • MQTTサーバ (Aedes MQTT broker)

スクリーンショット 2022-10-10 21.23.06.png

M5Stick-Cを使用して、ボタンAを押したらHTTPリクエストを送信する、または、MQTTパブリッシュする動作をさせます。

Node-REDフローを作成する (HTTPサーバ, MQTTサーバ)

MQTTサーバはノードの追加が必要になります。
右上のメニューから「パレットの管理」→「ノードを追加」タブを選択します。
「ノードを検索」のフォーム入力から以下のノードを入力し、「ノードを追加」ボタンを押します。
ポップアップメッセージが表示されますので、「追加」を選択します。

  • node-red-contrib-aedes

ノードの追加が終わったあと、以下のフローを作成します。

10-1.jpg

(サンプルフロー)

flows.json
[{"id":"f2cdbff0e8dc76fd","type":"tab","label":"フロー 1","disabled":false,"info":"","env":[]},{"id":"c2ec89c692ba2f71","type":"inject","z":"f2cdbff0e8dc76fd","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":260,"y":180,"wires":[["81981d58f7d14f69"]]},{"id":"81981d58f7d14f69","type":"debug","z":"f2cdbff0e8dc76fd","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":440,"y":180,"wires":[]},{"id":"aa79e518924f43b8","type":"http in","z":"f2cdbff0e8dc76fd","name":"","url":"/status","method":"get","upload":false,"swaggerDoc":"","x":250,"y":60,"wires":[["9a82e00c0cad5ccc","7b415c82f15e924c"]]},{"id":"9a82e00c0cad5ccc","type":"change","z":"f2cdbff0e8dc76fd","name":"","rules":[{"t":"set","p":"payload","pt":"msg","to":"{\"status\":\"ok\",\"message\":\"health endpoint\"}","tot":"json"}],"action":"","property":"","from":"","to":"","reg":false,"x":460,"y":60,"wires":[["77a70795471228f6"]]},{"id":"77a70795471228f6","type":"http response","z":"f2cdbff0e8dc76fd","name":"","statusCode":"","headers":{},"x":650,"y":60,"wires":[]},{"id":"7b415c82f15e924c","type":"debug","z":"f2cdbff0e8dc76fd","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":440,"y":100,"wires":[]},{"id":"db538d38c6f04527","type":"aedes broker","z":"f2cdbff0e8dc76fd","name":"","mqtt_port":1883,"mqtt_ws_bind":"port","mqtt_ws_port":null,"mqtt_ws_path":"","cert":"","key":"","certname":"","keyname":"","dburl":"","usetls":false,"x":430,"y":300,"wires":[["f3c22c6272ac56da"],["a3238c0710b0a66a"]]},{"id":"f3c22c6272ac56da","type":"debug","z":"f2cdbff0e8dc76fd","name":"debug 3","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","statusVal":"","statusType":"auto","x":660,"y":280,"wires":[]},{"id":"a3238c0710b0a66a","type":"debug","z":"f2cdbff0e8dc76fd","name":"debug 4","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":660,"y":320,"wires":[]},{"id":"bd60d3fcf2f3eeda","type":"mqtt in","z":"f2cdbff0e8dc76fd","name":"","topic":"/test","qos":"2","datatype":"auto-detect","broker":"61e4e665807b8674","nl":false,"rap":true,"rh":0,"inputs":0,"x":470,"y":380,"wires":[["276f14da304fe886"]]},{"id":"b1413c150ea3a010","type":"mqtt out","z":"f2cdbff0e8dc76fd","name":"","topic":"/test","qos":"","retain":"","respTopic":"","contentType":"","userProps":"","correl":"","expiry":"","broker":"61e4e665807b8674","x":650,"y":440,"wires":[]},{"id":"6859c48a64c86d84","type":"inject","z":"f2cdbff0e8dc76fd","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":440,"y":440,"wires":[["b1413c150ea3a010"]]},{"id":"276f14da304fe886","type":"debug","z":"f2cdbff0e8dc76fd","name":"debug 5","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":660,"y":380,"wires":[]},{"id":"61e4e665807b8674","type":"mqtt-broker","name":"","broker":"localhost","port":"1883","clientid":"","autoConnect":true,"usetls":false,"protocolVersion":"4","keepalive":"60","cleansession":true,"birthTopic":"","birthQos":"0","birthPayload":"","birthMsg":{},"closeTopic":"","closeQos":"0","closePayload":"","closeMsg":{},"willTopic":"","willQos":"0","willPayload":"","willMsg":{},"userProps":"","sessionExpiry":""}]

Node-REDフローを作成する (Node-RED MCU Edition)

HTTPクライアントの場合

10-2-1_.jpg

「rpi - gpio in」ノード ・・Button Aノード

  • BCM GPIO → 37を入力します
  • デバウンス → 0を入力します
  • 名前 → Button Aと入力します

スクリーンショット 2022-10-10 21.46.07.png

「switch」ノード

「rpi - gpio in」ノードはM5Stick-CのボタンAを押した時に「0」、離した時に「1」を出力します。

  • 入力が「0」と一致する場合 → 1へ出力します
  • 入力が「1」と一致する場合 → 2へ出力します

スクリーンショット 2022-10-10 21.47.59.png

「http request」ノード

  • URL → HTTPサーバ(Node-RED)のURLを入力します (例. HTTP://ホスト名/パス 、または、HTTP://IPアドレス/パス )
    • 2022年10月11日時点で、HTTPS:// はサポートされていません。
  • コネクションkeep-aliveを有効化 → チェックボックスにチェックを入れます
  • Disable strict HTTP parsing → チェックボックスにチェックを入れます

10-2-10_1.png

MQTTクライアントの場合

10-3-1.jpg

「rpi - gpio in」ノード ・・Button Aノード

  • BCM GPIO → 37を入力します
  • デバウンス → 0を入力します
  • 名前 → Button Aと入力します

スクリーンショット 2022-10-10 21.46.07.png

「mqtt out」ノード

  • サーバ → 編集ボタン(鉛筆マーク)を押して、MQTTサーバ(Aedes MQTT broker)のホスト名とポート番号を入力します
  • トピック → /testを入力します (MQTTサーバのトピックと合わせる)

10-4-1_2.jpg

10-4-2_1.jpg

M5Stick-Cへインストールする

node-red-mcu-pluginを使用する場合

ネットワーク接続するためにはWi-FiのSSIDとパスワードを指定する必要があります。

「MCU」タブの設定をする

  • 「Show more options...」を押します

20-1.jpg

  • Wi-FiのSSIDとパスワードを設定します

(2022/11/3 更新)

mcu-wifi-1_1.jpg

Node-REDフローをMCUで実行する

「Build」を押すとNode-REDフローが実行されます。
「Console Monitor」タブを押すと、ターミナル画面でビルド実行の様子を確認できます。
ビルド完了後、実機(M5Stick-C)へ書き込みまで行われます。

20-4_1.jpg

20-5.jpg

Node-RED MCU Editionを使用する場合

ネットワーク接続するためにはmcconfigコマンドの引数でWi-FiのSSIDとパスワードを指定する必要があります。

Node-REDフローをJSON形式でエクスポートする

  • 右上のメニューから「書き出し」を選択します
  • 「JSON」タブを選択します
  • 「書き出し」を選択します
  • クリップボードにNode-REDフローがJSON形式でコピーされます

Node-REDフロー(JSON形式)をflows.jsonファイルに保存する

node-red-mcu ディレクトリのflows.jsonファイルに保存します。

Node-REDフローをMCUで実行する

実機(M5Stick-C)で動かします。

  • ssid → Wi-FiのSSIDを指定します
  • password → Wi-Fiのパスワードを指定します
$ UPLOAD_PORT=/dev/cu.usbserial-C152AAC745 mcconfig -d -m -p esp32/m5stick_c ssid="SSID" password="パスワード"

(実行例: ssidがwifi-ap、passwordが12345678の場合)

$ UPLOAD_PORT=/dev/cu.usbserial-C152AAC745 mcconfig -d -m -p esp32/m5stick_c ssid="wifi-ap" password="12345678"

※ シリアルボート番号は環境によって異なりますので、以下のコマンドで確認します。

$ ls /dev/cu.*

正常にWi-Fiへ接続されると、xsbugデバッガーのLOGにSSIDとIPアドレスが表示されます。
M5Stick-CのボタンAを押すと、HTTPリクエストが送信され、xsbugデバッガーのMESSAGESに応答結果が表示されます。

10-5-1_1.jpg

11-1.jpg

参考

ボタンAを押した時、および、離した時に連続でHTTPリクエストを送信した場合、8〜9回くらい実行した後、M5Stick-Cの動作が停止する事象が発生しました。
そのため、switchノードを使用して、ボタンAを押した時だけHTTPリクエストを送信するフローにしています。

10-6-1_1.jpg

MQTTリクエストを送信する場合はM5Stick-Cの動作が停止する事象は発生しなかったので、シンプルなフロー(ボタンAを押した時、および、離した時にMQTTパブリッシュするフロー)にしています。

2
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
2