以前の記事でESP8266へのMicroPythonインストール方法を紹介したが、今回はESP32へのインストールを行う。ハードウエアはESP32 DevkitCで試した。
MicroPythonファームウエアの選択
ビルド済みのMicroPythonファームウエアはESP32版の配布ページからダウンロード出来る。
安定版の最新は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といったバスの使い方などがサンプルコードと一緒に解説されている。
例えばコンソールから以下のコードを実行すると、周囲の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の良い所なので、色々遊んでみたい。
コメント