モダンOSのお砂場(13) M5StickC、UIFlowとprint()

JosephHalfmoon
JosephHalfmoon

前回、グラフィカルでWebベースの開発環境、UIFlowを使用してM5StickCのプログラミングを始めてみました。プログラムそのものを走らせるのは楽ちんで良いのですが、デバッグなど考えると pdb(Pythonの標準デバッガ)使えないとはいえ、print()くらい使えないものかな?と思いました。

Webベースの開発環境からInternet経由してM5StickCにMicroPythonのプログラムをダウンロード(アップロードと表現している場合もあったりして。ま、どちらでも良いけれど)した場合でも、USB経由でPCとの接続があれば、多分、仮想COMポートでの接続ができる筈という確信を持っておりました。つまり、きっとprint()使えるに違いないと。さすれば、変数のダンプなどできる筈。また、システム内部のファイルなども覗き見ることができるでしょう。調べてみればUIFlow Blocklyのライブラリにありました print、Textというモジュールの中にひっそりと。文字列(str)を操作する関数などと一緒に入っています。そこでちょろっと書いた(描いた)のが以下のプログラム。

idxなる変数を0から1秒毎にカウントアップし、画面上のUI要素であるLabelとCOMポートへ出力されるであろう print()で表示するだけのもの。

M5StickCに書き込んで走らせれば、ちゃんとLCD画面上にカウント値が表示されカウントアップされていきます。では、ということでM5StickCに接続可能なCOMポートに何時ものようにTeratermProで接続してみれば、こんな感じ。

ちゃんと、カウントアップされていきます。予想通り。なお、仮想シリアル端末から接続する際のボーレートは、

115200

でした。前回、USB経由での書き込みツールではもっと速いボーレートを指定しても問題なく書き込めたみたいですが、USBシリアルでの接続でのデフォルト値はこの値のようです。デバッグ用にprint結果を見るだけなら十分な速度です。

シリアルポートに出力できているということであれば、当然、入力も可能でしょう。そして兄弟(従兄弟?)機種のM5StickVの「経験」からすると、

CTRL-C

一発で、MicroPythonのREPLに落ちてくるのではないか?やってみましょう。

これまた、予想どおり。M5StickVと同様、REPLを呼び出すことができました。表示されているとおり、help()使えということですから、help()してみると、コントロールキーなどはM5StickVと同等の使い方のようです。しかし、インストールされているモジュールはかなり異なっています。

列挙されたモジュール名が多いので、頭の方だけキャプチャしたのですが、flowlibというサブディレクトリの中にかなり大量に入っています。みなUIFlowを成り立たせるために必要なモジュールなのでしょう。ただ、ちょっと残念だったのが、M5StickVで使用できる pye() エディタが起動できなかったことです。(どこかに入っているのかな?)

さて、REPLが起動できたら、当然ファイルシステムを覗き見することも可能です。これまたM5StickVの「経験」がそのまま使えます。osモジュール(実体はMicroPythonのuosモジュールの筈)が使えます。
カレントディレクトリをみれば

/flash

でした。M5StickVと異なりmicroSDカードのスロットは無いのでこの傘下にファイルを置くしかないのでしょう。os.listdir()で見てみれば、boot.pyとかmain.pyとかいろいろ列挙されています。M5StickV用につくったucmdモジュールなど入れておくといろいろ操作できて良いかな、などとも考えました。そのうち、M5StickC用に移植しましょう。

話は、Blocklyに戻ります。まだBlocklyのクセに慣れないのでいくつか戸惑ったことがありました。setupの直下で、今回、カウンタ変数 idx を定義していますが、

set idx to 0

などとすると、その場で

idx = 0

などと初期化されるだろうと予想したのですが違いました。まず Noneを代入した後で、0を代入していました。戸惑ったと言えば、定数「0(またはその他の値)」はMathの中にあるので、変数モジュールで変数を定義し、値のsetとかchangeとかをできるようにしてからMathから定数値ボックスを拾ってこないとなりません。変数への代入にしても、setとchangeの違いとか。今回の、値をプラス1する更新は set であります。changeの場合、インスタンス型をチェックして…といったコードが吐かれるので意図とは違いました。よくわからないうちは、Blocklyを抜けて

MiroPython

表示にして確かめた方が安心なようです。折角のGUIなんだから文字のソースコードなんか見るな、と言われそうですが。。。

モダンOSのお砂場(12) M5StickC、UIFlowとMicroPython に戻る

モダンOSのお砂場(14) M5StickC、MicroPython REPL へ進む