Interface誌でESP32の特集が組まれていて、MicroPython以外に、Zerynth社がPython3のポーティング版を提供していることを知った。Zerynth社のPythonはVM上で動くようになっているらしい(FreeRTOSの上でVMが動き、その上でPythonが動く)。Pythonを再ビルドしなくても、自作のCモジュールとリンクできるらしい。だから。。速度が必要な部分はCで組んで(Pythonを再ビルドせずに)システムに組み込むことができる。すばらしい。自分はESP32+MicroPythonでアプリを組んだことがあるけど、MicroPythonからSPIを叩くところがオーバーヘッド大きくて遅延要因となっていた。SPIの制御をC言語で実装することで高速化できるのでは。。と期待。
ということで、、Zerynth 版 PythonをESP32との組み合わせで使ってみるにする。
まずはrs-onlineタイアップ版(正確には、DesignSpark版Zerynth)を以下から落とす((Zerynthには普通版もあり、タイアップ版との違いが分からず。。))
Zerynth - IoT及びIndustry 4.0向けミドルウェア
Windowsの場合、 ZerynthInstallerDesignSpark.exe が落ちてくるのでこれを実行
最新版のr2.3.2を選択、ExpertModeでXtensa LX6 - ESP32を選択、必要なパッケージを落としてくるのだが、これがえらく時間がかかる(自宅のWiFi環境が貧弱だから?)。
デスクトップ機でDLしようとすると、NOD32でDLサイトが拒否された。。なぜか。。しょうがないので、offlineインストール版をやってみることに。WiFiでつながっているノートPCは延々とパッケージをDLしている。。これは1H以上かかりそうな雰囲気。。(DL待っている間にコメント書くと、、Zerynth版VMは有償ライセンスのようで、10CPU以上はお金払う必要があるようです。1CPU6$ぐらいだったような。。 Zerynth版Pythonではライブラリがめちゃくちゃ整備されていて、これが本当にフリーなのか!?と思ったら、、VMは有償なのであった。ちょっと納得)
offlineインストールで落ちたのたtarの塊一式でどうやってインストールしたらよいのか分からず。しょうがないので、本家のダウンロードサイトからZerynth StudioをDLすることにした。
Zerynth Studio - A powerful IDE for embedded programming
こっちはタイアップ版ではない、普通版(機能制限があるのかもしれない。詳細不明)。デスクトップ機はブロードバンドレシーバと有線接続しているのだが、それでもインストール終了まで1Hとか出ている。。遅い。。 と思ったら加速したのか10分ぐらいで終わった。
ESP32をPCにさして、SeiariPortを指定してESP32をツールに認識させて、からバーチャライズを行う。バーチャライズの段階でESP32にVMを書き込んでいると思われる。
Loading settings... Switched to auto mode Ready! Checking for updates... Ok Switched to advanced mode [info] Saving device... [info] Updating device... [info] Burning bootloader... [info] Burning bin [info] esptool.py v2.0 [info] Connecting.... [info] Chip is ESP32D0WDQ5 (revision (unknown 0xe)) [info] Uploading stub... [info] Running stub... [info] Stub running... [info] Configuring flash size... [info] Auto-detected Flash size: 4MB [info] Compressed 19584 bytes to 12813... [info] [info] Writing at 0x00001000... (100 %) [info] Wrote 19584 bytes (12813 compressed) at 0x00001000 in 1.1 seconds (effective 138.5 kbit/s)... [info] Hash of data verified. [info] Compressed 305280 bytes to 181772... [info] [info] Writing at 0x00010000... (8 %) [info] Writing at 0x00014000... (16 %) [info] Writing at 0x00018000... (25 %) [info] Writing at 0x0001c000... (33 %) [info] Writing at 0x00020000... (41 %) [info] Writing at 0x00024000... (50 %) [info] Writing at 0x00028000... (58 %) [info] Writing at 0x0002c000... (66 %) [info] Writing at 0x00030000... (75 %) [info] Writing at 0x00034000... (83 %) [info] Writing at 0x00038000... (91 %) [info] Writing at 0x0003c000... (100 %) [info] Wrote 305280 bytes (181772 compressed) at 0x00010000 in 16.0 seconds (effective 152.3 kbit/s)... [info] Hash of data verified. [info] Compressed 3072 bytes to 156... [info] [info] Writing at 0x00008000... (100 %) [info] Wrote 3072 bytes (156 compressed) at 0x00008000 in 0.0 seconds (effective 1069.0 kbit/s)... [info] Hash of data verified. [info] Compressed 1024 bytes to 32... [info] [info] Writing at 0x00390000... (100 %) [info] Wrote 1024 bytes (32 compressed) at 0x00390000 in 0.0 seconds (effective 744.9 kbit/s)... [info] Hash of data verified. [info] [info] Leaving... [info] Hard resetting... [info] Chip id retrieved: 03ea4accd481 [info] Device registered with uid: 8_IgupB2TMuPUhls9OZwrw Registration successful! Now you can virtualize your esp32_devkitc [info] Updating device...
サンプルソースがDL可能で、Hello Zenrynthを動かしてみた。シリアル接続を明記しないとprint文を実行してもコンソールには出力されないようである。
少し動かしてみて気づいたことなんだが、、ZerynthのPythonとはコンパイルによりVM用の中間言語を生成してフラッシュメモリに書き込んでいるのではなかろうか。というのも、、Pythonの特徴の一つであるREPLがどうも動かないような印象で。。PythonやMicroPythonではREPLが使えるから、あれこれ試行錯誤できて理解が進んで開発がはかどるのだが、、これはまるで文法がPythonであるだけの中間言語用コンパイラのように思えるのだが。。
REPLが使えないとなると。。かなり敷居が高いような(ライセンスも有償なので、たしかにZenryth Pythonとはプロ用の開発環境という印象でありますね。計測してないけど、実はループもかなり早いのではなかろうか)。。仕様がよくわからない関数をキーボードから打ち込んで試してみたり、返ってきた戻り値の内容を掘っていくようなこともできない。強力なデバッガがあれば、変数の構造を展開しながら確認もできるが、デバッグしたかったらJTAGを使えという風で、JTAG使うにはJTAG用のインタフェースも必要で。。