
前回、ESP32版MicroPython上で、MicroPython特有のパッケージ管理ツール mip を走らせんと試みましたが一山超えて二山目で止まってました。今回はその二山目を超えるべくネット接続を追加してみました。あれよあれよと言ううちに一瞬でパッケージのインストールOK、mip 動作してしまったみたいです。
※「MicroPython的午睡」投稿順 Indexはこちら
いつもお世話になっておりますMicroPythonの日本語ドキュメントの以下ページでは、パッケージ管理について mip を使うように記されとります。
「フルPython」のpipに対抗?するツールみたいっす(mipのレポジトリの参照先はPyPIではない。)しかし、ESP32版のMicroPythonでは、mipの事前装備なし。そこで前回、手動でmipをインストールするもエラーで止まりました。原因は requests モジュールの呼び出しでした。
-
- mipの中では requests という名で呼び出している
- ESP32版MicroPythonでは requests ではダメで、urequests としてu付で呼び出さないとならない
そこでダウンロードしたmipのソースを勝手変更、数か所の requests を urequests に変更しました。すると mip は動き出した感じ、でもエラー。よく考えてみると mipを実行している ESP32 DevKitC機はネットに接続してません。URLにアクセスできるわけがないのだ、これは。PC上のThonny IDEで作業しているのでThonnyはネット接続見えているのでESP32機もネットに繋がっているように錯覚してました。お間抜け。
前回、勝手修正のmip、ネット接続したらあっけなく動作OK
そこでESP32 DevKitC機をWiFiでネット接続すべく、コードを追加したものが以下に。なおSSIDとPASSWORDのところは、Yourチョメチョメとしてあるのでご注意を。
import network, time, sys
import mip
import uerrno
class ESP32WiFi:
"""ESP32WiFi Class
"""
def __init__(self):
self.ssid = "Your SSID"
self.password = "Your Password"
self.wlan = None
self.timeout = 20
def do_connect(self, opt=True):
self.wlan = network.WLAN(network.STA_IF)
self.wlan.active(True)
if not self.wlan.isconnected():
print('connecting to network...')
self.wlan.connect(self.ssid, self.password)
while (not self.wlan.isconnected()) and (self.timeout > 0):
start = time.ticks_ms()
while time.ticks_diff(time.ticks_ms(), start) < 1000:
pass
self.timeout -= 1
if opt:
print('timeout: ', self.timeout)
print('network config: ', self.wlan.ifconfig())
return self.wlan.isconnected()
def close(self):
self.wlan.disconnect()
self.wlan = None
def main():
nw = ESP32WiFi()
if nw.do_connect():
try:
#mip.install("https://github.com/micropython/micropython-lib/python-stdlib/functools")
mip.install("pickle")
except OSError as exc:
print("OSError: ", exc.args[0])
nw.close()
if __name__ == "__main__":
main()
mipの動作確認
さて、上記コードを走らせれば、ネット接続後 mip が走ります。今回、mip でインストールするターゲットは、pickleとしてみました。Python伝統の「酢漬け」モジュールですな。
上記の実行後、DevKitC機のローカルストレージを観察すると以下のように/lib内に pickle.mpy(コンパイル済のMicroPythonコード)が設置を確認できました。
以下のように、普通にimport 可能です。
import pickle
ちゃんと動くかどうかは確かめてないケド。ファイルのGetのみ。
upipもある
上記のようにmip使ったmicropython-libのライブラリモジュールのインストールが出来るようになりました。しかし、実はESP32版のMicroPythonに mip が入っていなかった理由が推測?できるのです。それが以下に。
import upip
upipだと。フルPythonの pip の MicroPython版ってことかい?
こちらは 伝統の PyPI からパッケージをもってくるのね。。。
そういえば Thonny IDE内蔵のパッケージマネージャもあり。どれ使ったらよいのだ? 端から試してみるしかないか?

