前回はブラウザ上で動作するWeb開発環境を使ってM5Stack上のUIFlow2.0 Micropython処理系を動作させてみました。今回は使い慣れたThonnyIDEにUIFlow2.0搭載のM5Stackを接続してみます。前々回まで使っていた「素の」ESP32用MicroPythonとはどう違うの?
※「MicroPython的午睡」投稿順 Indexはこちら
※今回はM5Stack Grayに書き込んだUIFlow2.0 (Alpha-27)対応のMicroPython処理系とWindowsパソコン上で動作しているThonny 4.0.1で動作確認しています。
やっぱりソースはテキストファイル?
別シリーズで長らくビジュアル言語を練習しているというのに、Pythonのソースはテキストが良いなと思う年寄なのです。勝手なことを吐いてしまうとNode-REDのビジュアルさは「処理の見通しが大変良くなる」ので自分的には大ありなのですが、blockly的なビジュアルさは「最初の一歩の敷居は下がるけれども後でメンドくなる」のではないかと思ってます。テキストファイルのソースの方が後々お楽。
UIFlow2.0は、blocklyベースです。ちょこっとお試しコードを書く(描く)ときにはお楽だけれど、規模がデカくなると後々シンドイ気がします。まあテキストファイル化したソースを取り出せるので、最初のプロトを作製したらソースを別環境にもっていってしまうかも知れんです。
そういうときの第一候補がThonnyIDEです。ThonnyはPython用のIDEで別にMicroPython専用というわけではないですが、MicroPythonのことを「凄くよく分かって」いるIDEなので、ありがちな各種の操作がとても楽デス。
UIFlow2.0を書き込み済のM5Stack GrayをThonnyに接続
思ったとおり、接続に何の問題もありませんでした。こんな感じ。
右下のShellウインドウには MicroPythonのREPLが表示されております。期待していたデバイス側のファイルシステムへのアクセスも可能(左下のウインドウ。)当然、デバイス側に格納されているファイルもクリクリしてやれば開くことができます。いい感じ。別に「素の」MicroPythonと変わらねえんじゃね。
先ずはHello Worldから
以下はデバイス側のローカルファイルシステム(まだ何も書き込んでいないのでインストール後のデフォルト状態)の様子です。
配置されている README.mdファイルを読んでいけば分かることですが、ざっくりまとめてしまうとこんな感じっす。
-
- apps、ユーザアプリケーションを配置するためのフォルダ。デフォルトでは helloworld.py のみ格納されている。
- certificate、ネットワークのサーティフィケーションを格納するためのフォルダ。何も格納されていない。
- lib、自前のライブラリなどを配置するフォルダ、ひな形ファイルが格納されている。
- res、各種画像ファイル、フォント等のリソースファイルを格納するフォルダ。初期状態でLCD表示に使えそうな各種の画像ファイルが大量に置かれている。
なお、/flashの直下におかれているboot.pyは、ESP32が搭載しているNVS(ノンボラタイルストレージ?)の”uiflow”項目のboot_optionの値によって分岐するお役目があります。分岐オプションは以下です。
-
- 0、main.pyを即実行
- 1、スタートアップメニューを表示しネットワークをセットアップまでする。(NVSで何も指定しないときのデフォルト選択)
- 2、ネットワークのセットアップだけする
後で実際に書き込まれている分岐オプションを確かめてみます。
また、main.pyのデフォルトはコメントのみの空ファイルでした。
さっそく、appsフォルダのhelloworld.pyを走らせてみます。とても小さい字ですけれどLCDに表示が出ているの見えますか?
Hello Worldできてますな。
気になるboot_option値を調べておく
早速、NVSに格納されているboot_option値を確認するプログラムをThonny上で書いて走らせてみました。スクリプトが以下に。
# checkBootOption.py import esp32 import M5 from M5 import Lcd def main(): M5.begin() print("Check current Boot Option in NVS.") nvs = esp32.NVS("uiflow") try: boot_option = nvs.get_u8("boot_option") except: boot_option = -1 print("Boot Option(if not set, -1): {0}".format(boot_option)) Lcd.clear(0) Lcd.setCursor(0, 0) Lcd.print("M5STACK Gray Boot Option") Lcd.setCursor(0, 10) Lcd.print(str(boot_option)) if __name__ == "__main__": main()
2番ってことは、ネットワークの接続のみ、ね。
どんなモジュールが使えるの?
新しいMicroPython処理系をインストールした後に必ずやるのが、どんなモジュールが含まれているのかの確認です。特に今回のUIFlowのように独自拡張が沢山盛られていそうな実装では興味しんしん。こんな感じ。
小さい字でも読み切れないくらい多いっす。お馴染みのモジュールもあれば、M5Stackにユニークなものもありっと。なお以下の回で「素の」ESP32版のMicroPythonのモジュールを一覧しています。比べてみると多さが際立ちます。
MicroPython的午睡(104) ESP32版、改めてModule群を眺めてみる
いくつか注目のモジュールを見てみます。まずはM5StackユニークなM5モジュール
「素の」ESP32用のMicroPythonでも、umachineモジュールやesp32モジュールにハードウエア制御関係の関数などが含まれてますが、M5Stackにユニークなハードウエア(特にLCD関係)制御がここに含まれておるようです。
umachineモジュールは含まれるものが大変多いので先頭部のみです。
使用可能なRAM容量を確認してみた
micropythonモジュールの一覧作成ついでにメモリ(RAM)の様子をみてみました。
以下の過去回で、ESP32版の「素の」MicroPythonのメモリ使用状況を確認(MicroPythonのバージョンは違うけど)してます。
MicroPython的午睡(114) ESP32版、ヒープ・メモリの使用状況
「素」とくらべると50Kバイト近くフリーが小さいような気がします。いろいろ機能てんこ盛だししかたないか。それでもまあ60Kバイト以上あるのだから大抵のことには十分な気もしますが。