MicroPython的午睡(127)M5Stack UIFlow2、Thonnyで接続

Joseph Halfmoon

前回ブラウザ上で動作する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に接続

思ったとおり、接続に何の問題もありませんでした。こんな感じ。uiflow2_Thonny

右下のShellウインドウには MicroPythonのREPLが表示されております。期待していたデバイス側のファイルシステムへのアクセスも可能(左下のウインドウ。)当然、デバイス側に格納されているファイルもクリクリしてやれば開くことができます。いい感じ。別に「素の」MicroPythonと変わらねえんじゃね。

先ずはHello Worldから

以下はデバイス側のローカルファイルシステム(まだ何も書き込んでいないのでインストール後のデフォルト状態)の様子です。localStorage

配置されている 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に表示が出ているの見えますか?M5StackGray_HelloWorld

一方ThonnyのShellウインドウは以下のようです。HelloWorld_Shell

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()

上記を実行後の出力が以下に。CheckNVSoption

2番ってことは、ネットワークの接続のみ、ね。

どんなモジュールが使えるの?

新しいMicroPython処理系をインストールした後に必ずやるのが、どんなモジュールが含まれているのかの確認です。特に今回のUIFlowのように独自拡張が沢山盛られていそうな実装では興味しんしん。こんな感じ。modules

小さい字でも読み切れないくらい多いっす。お馴染みのモジュールもあれば、M5Stackにユニークなものもありっと。なお以下の回で「素の」ESP32版のMicroPythonのモジュールを一覧しています。比べてみると多さが際立ちます。

MicroPython的午睡(104) ESP32版、改めてModule群を眺めてみる

いくつか注目のモジュールを見てみます。まずはM5StackユニークなM5モジュールM5module

「素の」ESP32用のMicroPythonでも、umachineモジュールやesp32モジュールにハードウエア制御関係の関数などが含まれてますが、M5Stackにユニークなハードウエア(特にLCD関係)制御がここに含まれておるようです。

念のためESP32モジュールの一覧が以下に。ESP32module

umachineモジュールは含まれるものが大変多いので先頭部のみです。umachineModule

使用可能なRAM容量を確認してみた

micropythonモジュールの一覧作成ついでにメモリ(RAM)の様子をみてみました。memory
以下の過去回で、ESP32版の「素の」MicroPythonのメモリ使用状況を確認(MicroPythonのバージョンは違うけど)してます。

MicroPython的午睡(114) ESP32版、ヒープ・メモリの使用状況

「素」とくらべると50Kバイト近くフリーが小さいような気がします。いろいろ機能てんこ盛だししかたないか。それでもまあ60Kバイト以上あるのだから大抵のことには十分な気もしますが。

MicroPython的午睡(126)M5Stack UIFlow2対応、MicroPythonを書き込む へ戻る

MicroPython的午睡(128)M5Stack UIFlow2、Displayを探る? へ進む