LoginSignup
1
1

More than 1 year has passed since last update.

Node-RED+UIFlowでノンプログラミングをして、フリーズしたPCを再起動するプログラムを作る

Last updated at Posted at 2021-10-08

初めに

環境

  • クライアント側
    • Windows 10
    • Atom Lite
    • Unit Relay
  • サーバー側
    • Node-REDを実行しているWindows Server
    • UIFlowというサービス

手段

環境構築

M5burner

  • M5burnerをダウンロードしUIFlowのファームウェアを書き込む
    • 左側のデバイス一覧からATOMを選ぶ
    • 上のCOMポートからatom liteに該当するものを選ぶ
      • 判別にはデバイスマネージャーのポート(COMとLPT)を開いた状態でatom liteを抜き差しし、消えたり現れたりするCOMポートを選ぶ
    • (LEDマトリクスのついていない)Atom Liteの場合はUIFlow(Lite)を書き込む(Burn)
    • WiFiのSSIDとPWを入力
    • 書き込み後、Burnの横のConfigurationを開くとUIFlowからプログラムを書き込むのに必要なApi Keyが得られる

UIFlow

  • UIFlowにアクセスする
    • ポップアップが出てくるので、Atom Liteとrelayの組み合わせを選ぶ。Api Keyには先ほど得た値を入れる。
    • 入力を終えると(おそらく)Atom LiteがWiFi経由でM5stackのサーバーにつながり、ブラウザからプログラムを書き込むことが可能になる。

Node-RED

  • インストール手段はこのページで説明したため、省略する。
  • windows serverでMQTTブローカーを開くため、MQTTで用いるポートを開く
    • ファイヤーウォールの詳細設定で可能
    • デフォルトは1883(一応変更推奨)、プロトコル:TCP
  • Node-RED上では私の環境では原因不明なエラーによりノードのインストールができないため、サーバーのターミナル上でnode-red-dashboardnode-red-contribute-aedesをインストールする。
npm i node-red-dashboard node-red-contribute-aedes

プログラム作成

UIFlow上(Atom Lite)

  • MQTTブローカー(Windows ServerのNode-RED内)の設定
    • IPアドレスとポートは適宜設定
    • image.png
  • デバッグ用のMQTTパケット送信部
    • 再起動するというMQTTパケットを収得し、リレーを正常に作動させることができた場合、successというMQTTパケットを送る
    • image.png
  • リレーの動作
    • リレーをつなぎ、一定時間がたった後にリレーを切る
    • リレー作動中はRGBを交互に点灯する
    • image.png
  • 再起動のMQTTパケットを受け取る部分
    • もしパケット中のreboot要素がtrueの時のみ再起動する
    • 最初にリレーを5秒間作動させてPCを強制終了
    • 1秒待った後、リレーを2秒間作動させて起動する。
    • image.png
  • 実行ボタンはプログラムを揮発性の領域に入れるため、電源を外すと消えてしまう。したがって、最終的にプログラムを書き込む際にはダウンロードのボタンを押す。

Atom Liteのデバッグ

  • 下の画像に示すようなRemote+要素を用いることによってブラウザからAtom Lite内の変数の値の確認ができる
    • image.png
    • image.png

Node-RED上

  • 下画像のDashboardをクリックした後 配置で新しいタブを作り、その中に新しいグループを作る。
    • image.png
  • 画像を参考にフローを作る
    • image.png
    • 書いてある名称は任意に変更できるので、アイコンを目印に対応するノードを探す。
  • 設定内容(デフォルトのままの場合は記載なし)

    • mqtt in
      • サーバー: localhost:1883
      • トピック: pc1_debug
      • 出力: 文字列
    • text
      • Group: 先ほど作ったグループを選択
    • button
      • Group: 先ほど作ったグループを選択
      • payload: {"reboot": "true"}
      • Topic: pc1
    • mqtt out
      • サーバー: localhost:1883
  • デプロイするとdashboardにボタンが生成される。下画像の右上のアイコンをクリックして、異なるタブで内容を確認する。

    • image.png
  • 下画像のようなボタンが現れているはずである。

    • image.png
    • REBOOTを押すと、{"reboot":"true"}という文字が表示され、リレーが2回オンオフされる。その後、successという文字列が現れる。

動作

  • 出力
    • Node-RED dashboardのボタンが押されたとき、再起動を指示するMQTTパケットがNode-RED MQTTブローカーから出される。これをAtom Liteが受け取り、再起動を実行する。
  • 入力
    • 再起動後、Atom Liteはsuccessという文字の入ったMQTTパケットをNode-RED MQTTブローカーに送る。これがNode-RED dashboardに表示され、ユーザーは再起動が成功したことを確認することができる。

MQTTのデバッグ

  • スマートフォンのアプリストアでmqttと検索すると、MQTTパケットの送受信ができるアプリが出てくる。これを用いることでMQTTパケットが正常に出されているかを確認することできる。

Note

  • Atom LiteのLEDがつかなくなることが頻繁にあった
    • 原因はアップロードしたpythonプログラムにバグがあったこと
    • M5BurnerのConfigurationでApp modeからUSB modeに戻すと再びLEDがついた
      • App modeはAtom Liteのフラッシュメモリ中のPythonプログラムを実行する
      • Internet modeはオンラインのUIFlowでプログラミングするモード
        • 起動後、LEDは赤色に点灯する。(おそらく)Wifi接続が完了すると緑色に点灯する
      • USB modeはオフライン(PC)のUIFlowでプログラミングするモード

参考リンク

https://qiita.com/youtoy/items/17739b7f4197a8d3fa4d
https://raspberrypi.mongonta.com/howto-use-uiflow-with-m5atom/
https://www.1ft-seabass.jp/memo/2018/05/10/m5stack-meets-nodered-with-mqtt/
https://note.com/ogkt/n/na459421865d6-

1
1
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
1
1