为 ESP32-C3 编译 MicroPython

MicroPython 是一个能够运行在单片机上的 Python 解释器,目前支持许多 RISC-V 或 ARM 架构的微控制器。著名的 BBC micro:bit 就是使用了 MicroPython。

ESP32-C3 是乐鑫今年新推出的 SoC,MicroPython 在源码中为其提供了基础支持,但还没有正式发布预编译版本的固件。因此需要手动编译 MicroPython 才能将其烧录到 ESP32-C3 上运行。

首先需要获取 MicroPython 和 ESP-IDF 的源码。笔者使用了 ESP-IDF 的 4.3.1 版本,因为 ESP-IDF 对 ESP32-C3 的支持是在 4.3 版本才加入的,而更新的 4.4 版本和 MicroPython 暂时还存在兼容性问题。

这里克隆仓库的时候同时还会安装子模块,内容比较多,需要保证网络连接稳定。

1
2
git clone --recursive https://github.com/micropython/micropython.git
git clone -b v4.3.1 --recursive https://github.com/espressif/esp-idf.git

ESP-IDF 安装好后还需要手动删除一个过期的证书,不然之后编译的时候会报错。

接下来通过 ESP-IDF 配置好编译环境

1
2
3
cd esp-idf
./install.sh
source export.sh

然后就可以编译 MicroPython 了

1
2
cd ../micropython/ports/esp32
make BOARD=GENERIC_C3 BUILD=esp32c3

编译完成后,程序会提示通过 esptool.py 烧录固件的命令。把 ESP32-C3 开发板连接到电脑上,并且移除开发板上连接的其它线缆(否则可能会遇到奇怪的问题)。如果是第一次烧录,可以先进行 erase_flash

1
esptool.py -p /dev/cu.usbserial-14440 -b 460800 --chip esp32c3 erase_flash

然后再烧录

1
esptool.py -p /dev/cu.usbserial-14440 -b 460800 --before default_reset --after hard_reset --chip esp32c3 write_flash --flash_mode dio --flash_size detect --flash_freq 80m 0x0 esp32c3/bootloader/bootloader.bin 0x8000 esp32c3/partition_table/partition-table.bin 0x10000 esp32c3/micropython.bin

这里把 /dev/cu.usbserial-14440 替换成操作系统识别的串口设备。460800 是烧录程序的波特率,如果烧录失败可以改低波特率试试。

如果 esptool.py 执行后没有烧录程序的进度,可以按住开发板上的 boot 按钮,直到开始烧录再松开。