このところ前日の別シリーズ「Rubyちゃん」と似たことをMicroPythonでやってみる流れです。今回はRubyちゃんでは見当たらないとブーたれていたAPIについて、使用中のESP32版のMicroPythonでどうなっているのか調べてみました。ドキュメントには書いてないことも多いので最後は「マシンに聞く」のが確実。
※「MicroPython的午睡」投稿順 Indexはこちら
Rubyちゃん(mruby)で見当たらなかったAPI
別シリーズで見当たらないと嘆いていた?のが以下のようなAPIです。
-
- 外部入力端子からの割り込み受け
- タイマを使った周期実行
- メモリアドレスを直接指定しての読み書き
以前やっていたSTM32版のMicroPythonには上記のようなAPIが備わってました。でもESP32版の場合、いつもお世話になっております以下のクイックリファレンスには書いてないような機能もあります。
まあコマケーことはドキュメントに書いてないこと多いからね。ソースを読むか?それよりは直接実機に「聞く」のが速いっす。
ESP32版MicroPythonのバージョン
以前もATOM LiteなどでESP32版のMicroPythonを使っております。ただし、今回使用のバージョンはそのときとは異なります。実装によって結構いろいろ(特にバンドルされているモジュール群が)変わる、というのがMicroPythonを使ってきての感想です。
今回は、自前でプログラム書いて実験するのを一回お休みして、上記バージョンのMicroPythonにバンドルされているモジュール群を確認してみることにいたします。ターゲットは、冒頭のアイキャッチ画像で黄色のマーカを引いたモジュールです。
umachine
まず最初に調べたのは machineモジュール(リストでは umachineと頭にuがついてますが同じもの)です。結論から言えば、Rubyちゃんで見当たらないとブー垂れていたAPIは、すべてこのモジュール内に存在します。ただしまだ実動作確かめてないので動くかどうか知らんけど。
上記はリストの先頭の方だけです。冒頭に直接メモリアクセスの「危ない奴ら」が登場。これはどのMicroPythonでもだいたいお約束通りかと。これで1件クリアね。
続いて登場するのがTimerです。STM32版のpybクラスに存在したTimerクラスとの差異があるのか無いのかはまた別途確かめます。とりあえず2件目もクリア。
上のリストには外部端子割り込みらしいものは見当たりませぬ。しかし上のリストで赤線引いてあるPinのところを一段下に降りれば以下のように、割り込みAPIらしき関数と定数が見つかります。
使い方はまた後でだけれども、これで3件すべてクリアね。
espモジュールとesp32モジュール
machineモジュールはmachine毎の実装が収められている筈なのだけれど、他機種との標準化というか共通化の圧力?もあって、ホントにマシンにユニークな機能は外に追い出されてます。このESP32版の実装ではespモジュールとesp32モジュールかと。
上記をみると、外部からのウエイクアップを制御する機能などはここにあるみたいですな。これも一種のインタラプト?また、オンボードの温度センサとかホールセンサなどもここに関数があるみたい。調べがいのありそうなモジュールっす。
つづいて esp モジュール。ここはお名前からすると ESP32の前の 「32」じゃないESP時代からの伝統なんでしょうか。この中身にもgpio入力らしき機能がありです。
micropythonモジュール
さて micropython モジュールには micropython実装毎のあれやこれやが入っている筈。こんな感じ。ここにキーボード割り込みみたいな関数がありますが、多分これはSTDIN(シリアル)経由でもたらされるCTRL-Cとかの制御キャラクタに対応するものでないかと想像。ホントか?
uplatformモジュール
つづいて奥深そうなのが uplatform モジュール。MicroPythonの実装そのものに迫るモジュールでありますな。
上記のようにMicroPythonのバージョンだけでなく、ビルドしたIDF環境のバージョンとか、newlib(ライブラリ)のバージョンとかも判明。
uosモジュール
uos(以下のようにosとしても呼び出し可)には御本家のフルPython同様ファイルシステムにアクセスする関数などが収められております。MicroPythonの下にはosなどなく、MicroPythonのモジュール自体がosみたいなことをしているわけですが。
upyshモジュール
上記のosモジュールを使えば、Pythonの関数としてファイルシステムにアクセスしたりできるわけですが、いわゆるシェルみたいな感じでアクセスして~という人のためのモジュールも含まれてました。upyshモジュールとな。ただし、単にimport しようとすると以下のようにメッセージ(実はupyshの中でmanと打ったときと同じ)が出力されました。
言われたとおりにfrom upysh import * してみるとこんな感じ。
太字で表示されている pwd とか ls とかがこちらから打ち込んだ「コマンド」です。他にもheadとかすればファイルの先頭をダンプすることもできました。なお、このモードから抜けようとして quit とか exit とか打ったのですが抜けられません。manみても書いてないし。CTRL-Dで「ソフトリブート」をかけると通常のコマンドモードに戻れました(CTRL-Cは効きませなんだ。)
usysモジュール
最後にちょっと謎なのが、usysモジュールです。ここにもシステム関係のあれやこれやが詰まっているはずが、help(usys)でまさかの例外が発生しました。こんな感じ。
途中まで普通にhelp()出力していたのに、エラーとな。help()だぜ。
Guru Meditation Error
ってどんなエラーなんじゃ。これまた不思議。