之前一直使用PlatformIO中的Arduino框架开发ESP32项目,环境配置好之后使用起来还是比较方便的
最近的项目中需要在ESP32上使用micropython进行开发,很多库文件都直接用mpython编写,以单独文件形式发布的话较为麻烦,并且存在误删误改和版本控制的问题,所以想把这些py模块打包进固件里。搜索之后发现打包其实很容易,只需要把py文件添加到micropython项目中一个叫modules的文件夹内,编译后的固件就包含了相应的库,可以直接在代码中import,且源代码是不可见的,代码安全性更高。但在配置micropython的编译环境过程中遇到了很多坑,在这里记录一下
ESP-IDF是支持windows、linux和mac os的,但是网上大多数教程推荐在Ubuntu系统下搭建环境,因为自己的本地电脑都是windows系统,心想只是跑个编译,懒得再装ubuntu,腾讯云的轻量服务器是centos7,于是打算在云端部署esp-idf环境,踩坑就此开始
问题根源在于esp-idf的版本众多,且并不向下兼容。目前常用的大版本有v4.4、v5.0、v5.1、v5.2等,同时不同版本的micropython对esp-idf的依赖也不同,一开始完全没有注意到这个问题,导致走了很多弯路,一定要仔细看micropython中ESP32平台的编译环境要求。Gitee 极速下载/micropython - Gitee.com v1.22-release版本的micropython支持下面这几个版本的esp-idf。
在安装环境过程中,还遇到了python版本的问题,GLIBC、GLIBCXX版本的问题,好不容易在服务器上源码编译安装了所有依赖,成功装上了esp-idf,但编译micropython仍然不通过。这时候想到是否有docker环境可以直接用,又是一通搜索终于在esp-idf官方文档中找到docker相关的内容。必须吐槽一下官方文档中这部分内容放在API指南-工具下面,在安装说明部分只字未提,要不是搜索鬼才能发现。
IDF Docker 镜像 - ESP32 - — ESP-IDF 编程指南 latest 文档 (espressif.com) 按照这个指南装好docker,那么该使用哪个版本的镜像呢?需要根据micropython的依赖,到espressif/idf官方dockerhub中去找合适的版本。必须小版本也对上,比如要求v5.1.2找v5.1的镜像是不行的,否在还是会有些编译上的小问题
准备好esp-idf的docker后,使用下面命令进入到交互模式
docker run --rm -v $HOME:$HOME -w $PWD -u $UID -it espressif/idf:v5.0.4
在micropython的git仓库中切换到指定的分支,如v1.22-release,按下面指南进行编译
经过实测,v5.0.4的esp-idf能够成功编译v1.22-release的micropython固件。我使用的ESP32是ESP32-WROOM-D模组,4M大小的FLASH没有PSRAM,默认设置即可,如果是ESP32-S3、C3或其他版本,需要额外附加配置。编译好的固件位于/ports/esp32/build-ESP32_GENERIC,文件名为firmware.bin
最后就是将编译好的固件下载到本地,通过esptools或thonny进行烧录。