ESP32 MircoPython 固件自编译教程

最近上手了一块微雪的 ESP32-S3-A7670E-4G 开发板,但是官方并没有提供MicroPython 的固件,MicroPython 官网查询,也没有找到适配该型号的固件

只有基于乐鑫的ESP32S3编译的MicroPython V1.23.0 版本的固件。显然这个固件我是不满意的,毕竟微雪的这块芯片有 16M 的Flash + 2MB 的 PSRAM + 24 针摄像头模组。用官方的固件一下子就阉割掉了一半的Flash 和摄像头功能。当然如果不在乎性能的同学直接拿官方的固件也是可以用的,这里提供V1.23.0 三种不同版本的固件的镜像下载地址
ESP32_GENERIC_S3-20240602-v1.23.0.bin
ESP32_GENERIC_S3-FLASH_4M-20240602-v1.23.0.bin
ESP32_GENERIC_S3-SPIRAM_OCT-20240602-v1.23.0.bin

当然极客的意义肯定是不满足于此的,几经摸索,成功编译了完美适配 ESP32-S3-A7670E-4G 的固件,下面给出编译的教程。
我们使用腾讯云的一台 8核16G 的竞价实例来完成编译操作。操作系统为 ubuntu 22.04

注意:编译之前,你必须知道你的ESP板子所属的具体版本号:

如:ESP32-S3R8N16 属于 ESP32-S3,ESP32-S2FH 属于 ESP32-S2 ,ESP32-CAM 属于 ESP32 ,如果这个都分不清,那么下面的文章对你没有意义,请自行走开

编译固件需要一定的Linux 命令行基础,如果没有这方面的能力建议放弃 

附上基于 V1.24.0 预发布版本编译的镜像(16M Flash ,支持 Cam , 开启PSRAM)

ESP32_GENERIC_S3-20240802-v1.24.0_16M_CAM

1.服务器创建后,先apt-get update 更新一下 ubuntu 的镜像源

2. 执行下面的命令,安装编译需要的一些驱动,依赖的包组件

apt-get install git wget libncurses-dev flex bison gperf python3 python3-pip python3-setuptools python3-serial python3-click python3-cryptography python3-future python3-pyparsing python3-pyelftools cmake ninja-build ccache libffi-dev libssl-dev python-is-python3 -y 

3.创建本地工程文件夹 /build_esp32

mkdir /build_esp32 

4. 从 github 上克隆 espressif/esp-idf.git , micropython/micropython这三个项目


git clone --recursive https://github.com/espressif/esp-idf.git
git clone --recursive https://github.com/micropython/micropython

克隆需要的时间比较久,国内的同学记得科学上网(我这里直接开的美国的机子...)
克隆完成后,cd 到 /build_esp32/esp-idf/components 目录下克隆 乐鑫为ESP32 专门开发的 摄像头驱动

git clone --recursive https://github.com/espressif/esp32-camera

5.初始化 esp-idf 环境

乐鑫使用的是python 的虚拟环境,所以需要先安装 python3.10-venv (本地环境不同对应的版本也不同)组件,否则部分同学可能会遇到如下图所示的错误

apt-get install python3.10-venv -y

cd /build_esp32/esp-idf/
bash install.sh
source export.sh

6.初始化 mircopython 环境 , 编译ESP32 需要依赖的子模块

cd /build_esp32/micropython
make -C mpy-cross
cd /build_esp32/micropython/ports/esp32
make submodules

7.下载 lemariva/micropython-camera-driver 的源代码,根据你的ESP32 的针脚进行修改
Github 镜像下载地址: 点击这里下载  
建议将文件下载到Windows 修改(修改的内容不少),Linux 大佬请随意
将下载的文件解压后打开src 目录。打开modcamera.h 这个文件,参考对应您购买的ESP32 的技术文档中的接口定义页面。如下图1为微雪 ESP32-S3-A7670E-4G  的接口定义图,其中红色圈出来的部分是 24 pin 摄像头使用的管脚。修改图2中 modcamera.h 红色圈出的部分。注意,PWDN管脚和 RESET 管脚在本设备上并没有被定义,因此可以置为 -1 。
D0-D7 管脚分别对应下图的Y2-Y9管脚。根据定义修改后如如下图3.SIOD 对应 SIO_DAT , SIOC 对应 SIO_CLK (查阅大量资料得知)
根据官方资料得知,微雪的芯片支持

这些摄像头,因此修改 enum 的定义(图4), 使得驱动能够支持上面的设备使用。 (注:仅测试了OV2640,OV5640,其他兼容自测!)

图1

图2

图3

图4

不少同学是不是觉得 修改完 modcamrea.h 就万事大吉了? 哈哈哈 毕竟修改这个头文件就已经伤透了脑筋.别急,还有一个大坑等着你。
不知道是不是因为代码编译器的原因,原作者的modcamera.c文件里面, 定义静态函数的 static 关键字全部大写了,这会导致Ubuntu 在编译代码的时候报错,所以我们要把他改过来。

直接全局替换 STATIC 变成 static 。谢天谢地,本次对 micropython-camera-driver 这个项目的代码修改结束了。把代码传到服务器上的/build_esp32/micropython-camera-driver-master 文件夹(新建)下面

8.拷贝代码到 micropython 的自定义模块中


cd /build_esp32/micropython/examples/usercmodule && mkdir cam
cp /build_esp32/micropython-camera-driver-master/src/* /build_esp32/micropython/examples/usercmodule/cam/

9.修改micropython 的编译配置, 这里以 ESP-S3 为例子,其他主板可能略有不同
cd /build_esp32/micropython/ports/esp32/boards/ESP32_GENERIC_S3
修改 mconfigboard.h ,在末尾新增#define MODULE_CAMERA_ENABLED (1)

修改 sdkconfig.board  开启 16M Flash , 如下图

警告:风险操作,可能导致无法启动固件

默认情况下 S3 系列的板子已经开启了 PSRAM  ,如果你确定你的板子支持 PSRAM ,可以在上面的文件中加入

CONFIG_SPIRAM_MODE_QUAD=y
CONFIG_SPIRAM_TYPE_AUTO=y
CONFIG_SPIRAM_CLK_IO=30
CONFIG_SPIRAM_CS_IO=26
CONFIG_SPIRAM_SPEED_80M=y
CONFIG_SPIRAM=y
CONFIG_SPIRAM_BOOT_INIT=y
CONFIG_SPIRAM_IGNORE_NOTFOUND=y
CONFIG_SPIRAM_USE_MALLOC=y

有的同学可能要问,怎么知道micropython 官方固件有没有默认开启 PSRAM 呢,有个很简单的办法
查看你固件下的 mpconfigboard.cmake 这个文件,如果文件中有 boards/sdkconfig_spiram_sx 或者 boards/sdkconfig_spiram_oct 这一项,就说明开启了 PSRAM 能力

10.最后一步,编译固件。

cd /build_esp32/micropython/ports/esp32
make clean BOARD=ESP32_GENERIC_S3
make BOARD=ESP32_GENERIC_S3 USER_C_MODULES=/build_esp32/micropython/examples/usercmodule/cam/micropython.cmake
点赞

发表评论

电子邮件地址不会被公开。必填项已用 * 标注