💡

NoCodeで行ってみよう(M5Stack)

2022/05/03に公開

はじめに

朝槻です。
唐突ですが、私は基本的にプログラムを書くのが苦手です。
なので殆ど書かないですし、書いても動く最小限を調べながらやっと・・・って言うレベルです。
で、本題ですがM5Stackを入手しました。
調べたところ自分でコードを書かなくても処理を組める方法があるということで、
今回はUI Flowでコードを書かずに、したい事を実現してみようと思います。

使うものとやりたいこと

使うもの

  • M5Stack Basic
  • M5 Unit (BPS)
  • M5 Unit (TVOC/eCO2)
  • UI Flow 1.9.6

やりたい事

  • Unitからの値の表示
  • 天気の表示
  • Unitデータのzabbixへの送信

結論

結果から言うと、やりたい事のうち上2つはコードを書く事なく実現はできました。
三つ目のzabbixへの送信は、UIFlowのBlockly標準ブロックだけでは実現できず。
(TCP Socket通信のブロックがない)

作ってみた手順

ここからは作った手順を備忘も兼ねて記載します。

Unitの登録

今回のセンサー群は公式Unitを利用しているのでポチポチ追加するだけで利用できます。
UIFlowの画面で左側のUnitsの部分でモジュール選択して追加するだけ。

画面のデザイン

画面の左の方にある本体っぽいエリアにオブジェクトを置くだけ。
楽々。(位置の微調整や初期表示、オブジェクト名はプロパティ出せばいじれる)

処理を追加していく

さっきの筐体のレイアウトの右側にモジュールの値取得やら各種処理のブロックがあるので
それを組み合わせて処理を作っていく。
HTTPRequiest処理ブロックもあるので、天気は気象庁のAPIから自分の地域のものを取得して
LCDに表示することにする。
実際の処理はエリアコードとかも入っているので載せませんが、
以下のような流れで処理を行うようなものを組んでいます。
main部分

timer1

timer2

天気取得関数

  • なぜ都度NTPで日時を取得? → M5stack BasicはRTCが搭載されておらず日時を内部に保持していない(できない)から
  • なんでタイマー使ってる? → メインでループ処理で全て組むこともできるのですがNTPアクセスや天気データの取得サイズもあり徐々に遅延するので更新周期ごとに2つに分けで回しています

感想

UI Flowは実態のコードとしてはmicropythonなのですが、大枠作ったあとは自力でコード書くのとあまり変わらないかな・・・?という気がします。
標準ブロックだけだとテキストの整形や抽出も結構まどろっこしかったり、上記の遅延などのことなど結局、ロジックを頭で考えて組み立てる作業は結構ガッツリと必要だと感じました。
まあ、それでも初期処理や値取得周りがプロックで配置だけになるので多少は楽なのかもしれない。

今後の予定

結局zabbixへの送信ができていないので、カスタムブロックを作って送信処理を実装はしたいと思っています。

Discussion