MicroPython的午睡(123) Thonny、MicroPythonで使用可な機能

Joseph Halfmoon

前回ThonnyIDEのことをリトアニア製などと書いてしまいました。大変申し訳ございません。エストニア製です。訂正させていただきます。エストニアのタルトゥ大学のプロジェクトの成果物がもとになっているようです。タルトゥから東へに三十キロも行ったならば国境の湖に達するようです。ロシア国境だと。

※「MicroPython的午睡」投稿順 Indexはこちら

※Windows11上のThonny IDE 4.0.1 と ESP32 Devkit C に書き込んだMicroPython v1.19.1で動作確認しています。

Thonny IDEの立ち位置?

MicroPythonのスクリプト開発のためにいつもお世話になっているThonny IDEですが、MicroPythonの専用環境というわけではないです。以下に、Thonny IDEのホームページへのリンクを掲げておきます。

Thonny

上記ホームページのタイトルの下に “Python IDE for beginners” とあるとおり、Pythonに「汎用」なIDEです。メインはPython3処理系で「普通に」プログラミングに使えるIDEだと思います。特に”beginners”とうたっているいるのは、初心者向けのモードがあるということもあると思うのですが、教師向け「らしい」モードもまたあり、教室で学生さんと教員が同じIDEを使ってPythonのお勉強をする、という想定で開発されているみたいです。

ただ、通常のパソコン上のPython処理系の利用とは別に、MicroPythonに特有な機能もいろいろ盛りだくさんなのであります。

ただし、ホスト上のPython処理系がサポートしていても、MicroPythonがサポートしていない機能は当然のごとくに使えませぬ。その最大のものがデバッグかと。

以下のRunメニューをみるとThonnyIDEはDebug機能をいろいろサポートしているのですが、、MicroPythonを走らせている場合はそれらはグレイアウトされてます。こんな感じ。NOdebug

これは、リモートのマイコンで走っているMicroPython処理系そのものが今のところDebugger的なものをサポートしてないためで、Thonny側の問題ではないように思います。

MicroPythonで使える機能

まずはViewメニューからリモートのマイコン上でMicroPythonしていても役に立ちそうな機能を使ってみます(前回すでにシリアルプロッタは使っており。)

最初は変数の表示機能です。View > Variables です。

ThonnyViewVariables

View Variablesにチェックを入れると以下のようなウインドウが開きます。見れば、変数、関数、モジュール名なあどがリストアップされております。

Variables0

多分、デバッガが使えて実行途中で制御がもどるような仕組みが使えればローカル変数の表示などもできるのだろうと想像します。しかしMicroPythonで上記のウインドウが更新されるのは、REPLに戻ってきたときだけです。

そのためか値の表示が可能であるのは大域変数に限られるようです。ローカル変数が表示できないかちょっとやってみましたがダメでした。でもま大域変数は自動表示できるので、使うってもんじゃないかと。

また、前回同様、気づいていたら使っていたのに、という機能がOutlineです。Viewメニューから以下を選択。ThonnyViewOutline

するとIDEの右の方にOutlineウインドウが開いて、そこに関数名などがリストアプされます。関数名をクリックすれば、当然、その関数のところがエディタで表示されます。

Outline0

まあ、フツーのエディタと同じ。はやく言ってよ。気づいてなかったのは自分でしょうが。

さて、以下のProgram tree機能もMicroPythonでも使える機能です。ソースを解析してプログラムの構造を表示してくれてます。MicroPython処理系を勉強するにはカッコイイ機能じゃないかと思いますが、MicroPython内部を知らない当方にはサッパリ。ProgramTree0
また、使えることは使えるのだけれどというのが、Runメニュー配下にある

Visualize current script at Python Tutor

というやつです。以下ね。
PythonTutorMenu
上記をクリックすれば、現在編集中のスクリプトのソースが、以下のサイトを使って即解析されてしまいます。

Python Tutor: Visualize code in Python, JavaScript, C, C++, and Java

上記サイトはいろいろなソースを解析可能みたいですが、Python3を想定しているみたいです。MicroPythonソースの場合、Python3では存在しないローカルなモジュールなどを使っているのでなんだかな~という感じっした。知らんけど。

MicroPythonで使えなさそうな機能

ちょっと期待を持たせるのが Heap表示機能です。クリックするとこんなウインドウが開きます。Heap_NO

また、上記のウインドウが開くと変数ウインドウの表示も全てアドレス表示になって、何か起こるのではないかと期待をもったのです。しかしちょっとエクササイズしたのですが上記のウインドウには何も表示されませぬ。

それどころか、IDEの右上みると以下のようなヒントが出てました。HeapModeWarning

仕方ないのでHeapウインドウを閉じました。

Stackウインドウ、Exceptionウインドウも同様でした。ウインドウは開きますが、特に表示されるものはありません。勿論、Exceeptionを強制的に起こしてみたのですがね。まあ、MicroPythonはリモートで実行されているし、ExceptionメカニズムもPython3とはいろいろ違うみたいだし。わからんよなあ。

Stackウインドウ。StackWindow_NO

Exceptionウインドウ。

ExceptionWindow_NO

Object inspectorというものもあり。これも無のつぶて。ObjectInspector_NO

なんかしたら動くのかもしれんですが、今のところは不明。

MicroPython的午睡(122) Thonny IDE、シリアルプロッタを使ってみる へ戻る

MicroPython的午睡(124) ESP32のMicroPythonでPICマイコンのテスト補助 へ進む