2022/02/23

M5StickCplus + Gesture Unit + UIFlow(Blocky)

M5StackC Plusに GestureUnit つなげて UIFlowで遊んでみた。

といっても、どのサイト見てもArduinoIDEとかCとかで各サンプルばかり。最近自分はUIFlowで遊んでいるで、UIFlowでやりたいなと。でもUIFlowのUnitsリストには残念ながらGestureUnitモジュールがない。

ということで、https://docs.m5stack.com/en/unit/gesture とか https://wiki.seeedstudio.com/Grove-Gesture_v1.0 に載っているCサンプルコードを参考にしながらも、最終的にはUIFlowのBlockyで全部書いてみた。

UIFlowにはI2C通信が標準で出来るので基本的には問題ないのだが、一番の問題は初期化のための初期化テーブルをどうやってUIFlowで記述するかってこと。最初はList機能使って初期化データを設定していこうかと思ったが、レジスタアドレスとデータのセットが219もある。これを全部GUIで設定するのはつらすぎる。

ちょっとした工夫程度だけど「文字列からリストを作る」関数を使ってリストを作ることにした。サンプルコードからレジスタとデータ列を抜き取って文字列にした。で、初期化関数イメージは以下のようにできた。


Cで書いたやつに比べると文字列からリストを作る処理に時間かかるが問題なし。

後はサンプルやデータシートを参考にI2C処理を書いていけば出来上がり。

どれくらいのインターバルにすればいいのか? ドキュメントやらサンプルやら見たがいまいちピンとこん。サンプルは1000msが多い。ドキュメントには最低800msとか書かれていたり。自分で実験した限りだと、600~800msくらいが妥当かなと思った。

いつもだと作ったソースコードは記事内にインラインで入れることが多いが、UIFlowコードは載せにくい。MicroPythonコードで入れてもUIFlowのBlockyにならないし。。。
ということで今回のUIFlowソースは
https://gist.github.com/hiroshi-nishiura/707c8ba9849f6771bb698d0fdf482f33
に置いた。

えー、子供の学習用にちょうどいいかなと思って ATOM Matrix 買ってみたものの、表示がLEDMatrixしかないのがつまらないらしく放置されてしまった。シクシク。これにバッテリーが内蔵されてれば楽しそうなのにな。転がしてJyroで電子サイコロとか。