背景
平常开发中,使用官方提供的MicroPython固件版本就可以了.但是目前遇到了一个问题,需要使用一个温度和压力一体的传感器,官方提供的是c语言的demo.要使用此模块,我就得micropython调用c接口.通过了解micropython调用c,需要编译micrpython中的模块,于是踏上了编译固件的学习之旅.
步骤
1.下载MicroPython源码
源码
切换到合适的分支,master分支更新太频繁,不适合作为产品
以v1.22-release为例
git clone https://github.com/micropython/micropython
# 切换到v1.22-release
git checkout -b v1.22-release origin/v1.22-release
2. 构建esp-idf
查看 ports_esp32.yml(这个应该是自动构建工具脚本)和ci.sh脚本
之前网上看了很多教程,跟着做都是不行. 根据官方的自动化构建脚本来做大概率是没问题的.
在micropython目录下运行
# 构建合适版本的esp_idf
source tools/ci.sh && ci_esp32_idf_setup
会自动将合适版本的esp-idf下载到micropython路径下
2.1 出现的问题
- esp_idf代码拉不下来
执行source tools/ci.sh && ci_esp32_idf_setup
,git clone 无反应
我通过其他地方下载,并切换esp_idf到 ci.sh里指定的分支后,重新运行source tools/ci.sh && ci_esp32_idf_setup
3. 构建固件
在micropython目录下运行
# 构建合适的板子固件(下面这个指令是s3和c3的)
source tools/ci.sh && ci_esp32_build_s3_c3
运行了 ci_esp32_build_s3_c3
就可以构建出固件firmware.bin
其他固件编译的方法
查看micropythond对应分支对应ports下的README.md, 如esp32对应的 READM.md
烧入固件
固件有好几种烧入方式:
1.thonny烧入
2.flash_download_tool烧入
3.esptool烧入方式
我当前使用thonny开发,所有采用thonny烧入,无论用什么方法,在对flash进行操作前,要保证芯片进入固件下载模式.
我的是ESP32-S3芯片,需要在断电情况下先按住boot按键,然后再接通usb(否则一直失败 No serial data received.),然后即可松开boot案件进行烧入.
烧入成功后,断电重新插入即可.
后话
编译固件时,还有一些其他配置,可以参考 https://github.com/micropython/micropython/blob/master/ports/esp32/README.md