Skip to content

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

准备编译环境

安装编译工具

shell
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

shell
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

shell
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 安装及配置

shell
cd ~/esp/esp-idf
# 国内下载加速
export IDF_GITHUB_ASSETS="dl.espressif.com/github_assets"
./install.sh esp32s3
# 配置环境变量
. $HOME/esp/esp-idf/export.sh

修改闪存容量为 16M

shell
# ~/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。

烧录

先擦除

shell
# 其中 /dev/cu.usbmodem141101 改成自己的端口
esptool.py --chip esp32s3 --port /dev/cu.usbmodem141101 erase_flash

再写入

shell
# 其中 /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 模块)

https://blog.csdn.net/solar_lan/category_7434723.html