wsl build mpy
由于官方提供的 ESP32-S3 的 MicroPython 固件是 8M 闪存版本,而 ESP32-S3-N16R8 开发板是 16M 闪存,所以需要自己编译 16M 闪存版本的 MicroPython 固件。
那么为什么要自己编译 MicroPython 固件?因为 MicroPython 简单易用。相较于 C/C++,虽然对很多设备/功能支持还少(划重点!), 但如果只想实现的只是简单的 IOT(物联网)项目,MicroPython 是最容易上手的方式。C/C++ 的环境搭建对于新手来说,难度太大。 但也因此,有些设备是无法在网上直接找到固件(Firmware)的,有些找到的,都不是最新版,缺失一些最新发布的功能。 所以,如果玩的不是热门硬件的话,还是需要自己来编译的。
系统环境
Linux系统目前对于编译 micropython来说是必须的。在编译 mpy-coress 时,构建MicroPython交叉编译器,交叉编译器的功能是对高级语言(比如:python、c语言…)翻译成低级语言(比如:汇编语言、机器语言…)的操作。
操作系统:ubuntu-23.04-server-amd64
Python 版本:3.11
ESP-IDF 版本:v5.1.2
MicroPython 版本:v1.23.0
开发板:ESP32-S3-N16R8
准备编译环境
安装编译工具
sudo apt update
sudo apt install git wget flex bison gperf python3 python3-pip python3-venv cmake ninja-build ccache libffi-dev libssl-dev dfu-util libusb-1.0-0 -y
sudo apt install build-essential gcc-arm-none-eabi -y
克隆 esp-idf
mkdir -p ~/esp
cd ~/esp
git clone -b v5.1.2 --recursive https://github.com/espressif/esp-idf.git
# 为了确保文件都下载完整,再次执行下面的命令确认
cd ~/esp/esp-idf
# 可多次执行,直到不报错为止
git submodule update --init --recursive
克隆 micropython
cd ~/esp
# 目前最新的 release 版本是1.23.0,如果不加版本号可能是预览版,所以最好是指定个稳定版本
git clone -b v1.23.0 --recursive https://github.com/micropython/micropython.git
# 为了确保文件都下载完整,再次执行下面的命令确认
cd ~/esp/micropython
# 可多次执行,直到不报错为止
git submodule update --init --recursive
ESP-IDF 安装及配置
cd ~/esp/esp-idf
# 国内下载加速
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32s3
# 配置环境变量
. $HOME/esp/esp-idf/export.sh
修改闪存容量为 16M
# ~/esp/micropython/ports/esp32/boards/ESP32_GENERIC_S3/sdkconfig.board
# 默认是下面的内容
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESPTOOLPY_AFTER_NORESET=y
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=y
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv"
# 修改为
CONFIG_ESPTOOLPY_FLASHMODE_QIO=y
CONFIG_ESPTOOLPY_FLASHFREQ_80M=y
CONFIG_ESPTOOLPY_AFTER_NORESET=y
CONFIG_ESPTOOLPY_FLASHSIZE_4MB=
CONFIG_ESPTOOLPY_FLASHSIZE_8MB=
CONFIG_ESPTOOLPY_FLASHSIZE_16MB=y
CONFIG_PARTITION_TABLE_CUSTOM=y
CONFIG_PARTITION_TABLE_CUSTOM_FILENAME="partitions-8MiB.csv"
编译 micropython
cd ~/esp/micropython
make -C mpy-cross
cd ~/esp/micropython/ports/esp32
make submodules
make BOARD=ESP32_GENERIC_S3 BOARD_VARIANT=SPIRAM_OCT
编译完成
最终固件文件在路径 ~/esp/micropython/ports/esp32/build-ESP32_GENERIC_S3-SPIRAM_OCT/
下面,注意不是 micropython.bin而是 firmware.bin。
烧录
先擦除
# 其中 /dev/cu.usbmodem141101 改成自己的端口
esptool.py --chip esp32s3 --port /dev/cu.usbmodem141101 erase_flash
再写入
# 其中 /dev/cu.usbmodem141101 改成自己的端口
esptool.py --chip esp32s3 --port /dev/cu.usbmodem141101 write_flash -z 0 /path/firmware.bin
通过 Thonny
的控制台通过下面代码确认闪存容量
import esp
esp.flash_size()/1024/1024
# 16.0
参考
官方构建教程:https://github.com/micropython/micropython/tree/master/ports/esp32
https://micropythpn.readthedocs.io/en/core/develop/gettingstarted.html#compile-and-build-the-code
为 ESP32-S3-N16R8 开发板编译 16M 闪存版本的 MicroPython-1.22.0:https://www.bingal.com/posts/ESP32-S3-N16R8-micropython-1.22.0/
microPython 自己编译插件 https://blog.csdn.net/qq_34440409/category_11177075.html
添加 MicroPython 模块(C 模块)