前回はパッケージ管理ツール mip に勝手改変入れてESP32のMicroPythonで動作することを確認。今回はThonnyのパッケージ管理機能を使ってPyPIからパッケージをダウンロードしてインストールしてみます。PyPIにはいろいろあります。今回インストールしたのはESP32のulpの開発環境。なんじゃそりゃ?
※「MicroPython的午睡」投稿順 Indexはこちら
Thonny IDEのパッケージ管理機能
前回の mip はMicroPython上で走る「セルフ」ツールでした。MicroPython内で完結しているのは良いですが、Internetへの接続を自前で用意せんとあきません。その点、Thonny IDEのパッケージ管理機能を使って所望のパッケージをターゲット機のMicroPythonにインストールするのは「クロス」なので、ネットのことなど皆PC側の接続で済むのでお楽。以下はThonny IDEのパッケージマネージャ画面です(裏側ではpipkinというツールが走っているみたい。)
また、前回の mip と異なるのはデフォルトの検索対象になるレポジトリは PyPI であることです。前回のmipがちんまりしたMicroPython用のレポジトリから探す(見つかったものは機種依存かどうかは別としてMicroPython用なのである意味安心)のに対して、PyPIの広大な大洋の中にはフルPython用のパッケージも多数。必ずしもMCU上で実行可能でないものもある筈なので、どこまで利用できるのかはパッケージ毎に調べる必要があります。多すぎて困るけれども。
ESP32用のパッケージを探す
MicroPythonと入力してパッケージを探せば、結構多数のパッケージがヒットしてきます。しかしそれでもいろいろありすぎるので、今回は ESP32 用に絞って検索してみました。検索結果の冒頭部分はこんな感じ。
この中から今回は2つ目の micropython-esp32-ulp というパッケージのインストールを試みました。なお似たお名前が3番目の micropython-py-esp32-ulp というところにもあるのですが、リンク先をたどっていくと結局同じファイルが見えてきたりするので、もしかすると同じものなのかも知れません。どうなんだろ。
Searchした結果をインストールするのは簡単、リンクをたどって開いたウインドウの下の方にある install ボタンを押すだけです。
micropython-esp32-ulpパッケージ
今回インストールするパッケージはそこそこ大きなパッケージでちょっと複雑なものなので、若干時間が掛かります。特に何もすることはありません。しばらくして、パッケージマネージャの画面に戻れば、以下のようにインストールされていることが分かります。黄色のマーカはこちらで引いたもの。
このとき、ターゲットデバイス ESP32 DevKitC機のローカルストレージの様子をみると以下のようです。ライブラリパスである/lib配下にしっかりディレクトリ2つが出来てます。
今回のインストールでどのくらいストレージを使ったのか気になったので見てみると以下のようでした。多分 200kバイトくらい使っているのでないかい。
さて、インストールしたこのパッケージが何なのかというと、
-
- ESP32機のMicroPython上で走る、ESP32 ULP の開発ツール一式
であります。そのULPとは何か? 御存じなき方向けにざっくりしたことを書いてしまうと、ESP32でもXtensaコア搭載機のXtensaコアの横に搭載されている「小さい」CPUであります。Xtensaコア搭載機はXtensaコアを2個も搭載しているのにそれとはまた別にULPを搭載しておると。ゴージャス。
たしか「ウルトラ・ローパワー」なのでULPという名であったような。メインのXtensaコアを動かすほどのこともない、細々した仕事をお願いするのに良いものみたいです。
このパッケージの情報は以下に。
micropython / micropython-esp32-ulp
実際に、インストールしたパッケージがMicroPython上で動作することを確認するために、以下のサンプルプログラムをダウンロードして使わせていただきました。
上記サンプルからその核心部分をちょっと引用させていただきます。
上記を見るとわかるように、MicroPythonの変数内に格納した「ULP用のアセンブリ言語ソース」をビルドしてくれるツールなのです。ビルドしているのはXtensa側のコアだからクロス?ツール的な。そしてメモリ上に配置したULPのプログラムを起動することも勿論できます。
上記のサンプルコードを実行した結果が以下に。すごい速さで画面が流れます。
ULPによってちゃんとカウントアップされておるようです。
ESP32使うなら「いつかは使いて~」と思っていたULP、一撃で使えるようになってました。これはULP勉強しないと。