MicroPython的午睡(116) ESP32版、mip動かんぜよ?

Joseph Halfmoon

前回はmpy-crossツールでmpyファイル化したスクリプトを、ストレージに置いて使ってみました。今回は外部のリポジトリからモジュールをダウンロード&インストールしてみる1回目デス。MicroPythonにもモジュール管理ツールあり、ということで mip 試してみたんですけど手元のESP32版では試行錯誤中、トホホ。

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

Thonny IDEのパッケージマネジメント

MicroPythonコードを書くのにありがたく使わせていただいておりますThonny IDEですが、当然のようにGUIのパッケージ・マネージャが含まれております。Manage packagesというメニューから以下のようなウインドウが開きます。以下のようにパッケージの出元は伝統?のPyPIみたいデス。

TonnyPyPI

MicroPython(日本語)ホームページのパッケージ管理

一方、いつもお世話になっておりますMicroPythonの日本語ホームページには以下のパッケージ管理に関する記述があります。

パッケージ管理

使用するツールは、MicroPython上で走る mip というツールです。フルサイズのPythonの pip に対する mip であると。知らんけど。

またパッケージを持ってくる先は micropython-lib であります。PyPIでないらしいです。

ESP32版での mip

上記の日本語ホームページを読むと、最初から import mipしてmipを使い始めているのです。手元のESP32版でmoduleを列挙すると以下のように mip など含まれておりません。当然、import mipしてもエラーとなります。

MIPmissing

しかし、以下のgithubへ行けば、mip を含む micropython-libの者どもが並んでおります。

https://github.com/micropython/micropython-lib/tree/master

上記より、mip 自身のモジュールを探し出してダウンロード、完全手動にてESP32マイコンのローカルストレージの /lib 内に mipというサブディレクトリを掘って格納してみました。

importするとエラーで落ちます。原因は、requestsモジュールなど知らん、というつれないお言葉です。しかし上記のモジュール一覧には、urequestsモジュールは存在します。MicroPythonの場合、頭文字にu付のお名前のモジュールをu無で呼び出せることが多いので、なんで?という感じがしないでもないです。でも、やってみると以下のようにu付のモジュールはimportできますが、u無のお名前ではエラーになります。RequestsError

そこでエイヤーと mip のソース内で requestsと書いてある部分を urequests と勝手書き換えしてみました(確か3か所くらい。)するとmip内ではエラーが回避できた感じ。

しかし、mip.install(“モジュール名”)などとしてもエラーになります。以下のようにURLをフル記述しても

MipError

以下のように OSErrorになります。

MipErrorResults

どうも mip内部で呼び出しているurequestsモジュール内でエラーが発生しているようです。ここでハタと気づきました。

Thonny IDEはネットワークに接続しているパソコン上で動作しているけど、ESP32マイコン側はWiFiでネットワークに接続してないじゃん!

そうでした、ネットワークに接続していないのにネットワーク上のリソースをダウンロードできるわけないじゃん!ネット接続した上で mip 動かしてみないと。。。また次回ね。

ダウンロードターゲットのfunctoolsを完全手動インストール

functools.py は「小ネタ」でちょっとカッコイイ感じがしたので、インストール実験のお試しにしてます。でもダウンロードしたけど動かんかっただとしまらないです。MicroPython-libから完全手動で functools.py をダウンロード、インストールして動作することを確認しておきます。

同じくテスト用のファイルもダウンロードしましたが、アサーションしているだけで、OKだと何も言わない寂しいものだったので、勝手改造して標準出力に結果を送るようにしてみました。こんな感じ。

testFunctoolsReduce

結果が以下に。testFunctoolsReduceResults

reduceしてるみたい。。。

MicroPython的午睡(115) ESP32版、mpy-crossの利用 へ戻る

MicroPython的午睡(117) ESP32版、net接続すれば御勝手mip動作OK へ進む