ESP32でMicroPythonを動かす

以前の記事でESP8266へのMicroPythonインストール方法を紹介したが、今回はESP32へのインストールを行う。ハードウエアはESP32 DevkitCで試した。

スポンサーリンク

MicroPythonファームウエアの選択

ビルド済みのMicroPythonファームウエアはESP32版の配布ページからダウンロード出来る。

MicroPython - Python for microcontrollers
MicroPythonisaleanandefficientimplementationofthePython3programminglanguagethatincludesasmallsubsetofthePythonstandardlibraryandisoptimisedtorunonmicrocontrolle...

安定版の最新はv1.13(2020年9月2日版)だが、

  • SPIRAM対応か否か
  • IDFのバージョンがv4.xかv3.xか

によって同じv1.13でもバリエーションがある。

そもそもpSRAMが載っていないESP32 DevkitCなどのハードウエアではSPIRAM対応版をインストールしても意味が無いので今回は選択肢から除外する。

「IDFのバージョンがv4.xかv3.xか」はMicroPythonのビルド環境であるESP-IDFのバージョンの違いだ。「IDFって一体何?」という人は当ブログ過去記事が参考になると思う。IDFは現在v3.x系とv4.x系の過渡期にあり、今回は新しい系統であるIDFv4.x版のesp32-idf4-20200902-v1.13.binをインストールすることにした。ダウンロードは上記配布ページからブラウザで行うか、Linuxならwgetコマンドを使えばOK。

wget http://micropython.org/resources/firmware/esp32-idf4-20200902-v1.13.bin

esptoolの準備

ファームウエアの書き込みにはESP8266版のインストールの時にも使ったesptoolを使う。esptoolのインストールはPython環境があればPythonのパッケージ管理ツールpipを使ってインストール出来る。

pip install esptool

Python環境が無くても、Ubuntuであればaptでインストール可能だ(Python環境も自動でインストールされる)。

sudo apt install esptool

Windowsの場合はIDF環境のセットアップArduinoのESP32対応化を行えば一緒にesptoolがインストールされる。その場合はPythonスクリプトesptool.pyではなくesptool.exeがインストールされているが、機能的にはどちらも変わらない。

MicroPythonファームウエアの書き込み

以下のコマンドでまずはフラッシュメモリの消去。Linuxの場合は、

esptool.py --chip esp32 --port /dev/ttyUSB0 erase_flash

Windowsでもシリアルポートの指定を変えるだけで基本的に同じコマンドでOKだ。

esptool.py --chip esp32 --port com8 erase_flash

そして、ダウンロードしたMicroPythonファームウエアを書き込む。

esptool.py --chip esp32 --port /dev/ttyUSB0 --baud 460800 write_flash -z 0x1000 esp32-idf4-20200902-v1.13.bin

上記コマンド実行で「esptool.pyが無い」といったエラーが出る時は、”esptool.py”を”python -m esptool”に置き換えると動く場合があるので試してみると良い。

シリアルコンソールで接続

シリアルコンソールの接続パラメータは115200bps・データ8bit・ストップ1bit・パリティ無し。Linuxからは端末エミュレータからpicocomを使うのが簡単。

picocom /dev/ttyUSB0 -b115200

シリアルコンソールを接続した瞬間は何も起こらないが、Enterを送信すればPythonのプロンプトが表示される。Ctrl-Dを送信するとソフトリブートがかかってビルド番号などが確認出来る。

>>> 
MPY: soft reboot
MicroPython v1.13 on 2020-09-02; ESP32 module with ESP32
Type "help()" for more information.

お約束のHello World。

>>> print('Hello world!')
Hello world!

ESP32版MicroPythonの使い方ドキュメント

MicroPythonは有難いことに日本語のドキュメントが用意されている。WiFiインタフェースなどESP32内蔵ハードウエアや、SPI・I2Cといったバスの使い方などがサンプルコードと一緒に解説されている。

ESP32 用クイックリファレンス — MicroPython latest ドキュメント

例えばコンソールから以下のコードを実行すると、周囲のWiFiアクセスポイント一覧をリスト型の変数aplistに取得出来る。

import network
wlan = network.WLAN(network.STA_IF)
wlan.active(True)
aplist = wlan.scan()

まとめ

ESP32にMicroPythonをインストールした。ファームウエアのフラッシュメモリ書き込みツールはESP8266と同じesptool.pyで操作もほぼ同じ。ESP32はESP8266よりもIOポートのピン数が増えていおり、内蔵ペリフェラルも充実している。インタープリタからハードウエアの操作が簡単に出来るのがMicroPythonの良い所なので、色々遊んでみたい。

コメント