ESP32-CAM 常见问题

1 前言

实际上手开发 ESP32-CAM 相机部分功能的时候,还是碰到了不少坑,不到一周就遇到了 3 个问题…… 不过还好都可以参照官方的文档来解决。

根本原因就是,网上的 Demo 都有点古老了,在新版的 espidf 上水土不服。

2 环境

  • PlatformIO v5.1.1
  • Board: ESP32-CAM
  • Platform: espressif32 v3.2.0
  • Framework: espidf v3.40200.210118
  • Library Dependencies:
    • esp32-camera v1.0.0

文中的问题和解决方案都是基于上述环境的。其他环境下不一定存在同样问题,或者造成问题的原因并不相同。

3 常见问题

3.1 ‘rtc_gpio_desc’ undeclared

3.1.1 问题描述

在项目中添加依赖库 esp32-camere,之后构建项目。

构建过程中报错,错误信息如下:

1
2
3
4
5
6
7
.pio/libdeps/esp32cam/esp32-camera/driver/twi.c: In function 'pinMode':
.pio/libdeps/esp32cam/esp32-camera/driver/twi.c:61:24: error: 'rtc_gpio_desc' undeclared (first use in this function); did you mean 'rtc_io_desc'?
uint32_t rtc_reg = rtc_gpio_desc[pin].reg;
^~~~~~~~~~~~~
rtc_io_desc
.pio/libdeps/esp32cam/esp32-camera/driver/twi.c:61:24: note: each undeclared identifier is reported only once for each function it appears in
*** [.pio/build/esp32cam/libb9e/esp32-camera/driver/twi.o] Error 1

3.1.2 解决方案

在项目目录下,执行下列命令,打开配置菜单:

1
pio run -t menuconfig

进入菜单:

1
Component config > Driver configurations > RTCIO configuration

可以看到选项 “Support array `rtc_gpio_desc` for ESP32”,默认是禁用的,按空格启用它,然后按 S 保存,按 Q 退出。

再次构建项目,一切正常。


错误原因:该版本的 espidf 默认禁用了一些模块,这里的错误是因为 RTC 模块被禁用造成的,而 esp32-camera 正好依赖这个模块。

3.2 Camera probe failed with error 0x20004

3.2.1 问题描述

将 Demo 中初始化 camera 的代码复制到项目中,构建并烧录到主板上,上电启动主板。

从串口日志中,可以发现主板在不断重启,错误信息如下:

1
2
3
4
5
6
I (2384) sccb: pin_sda 26 pin_scl 27

I (2384) gpio: GPIO[32]| InputEn: 0| OutputEn: 1| OpenDrain: 0| Pullup: 0| Pulldown: 0| Intr:0
I (2424) sccb: SCCB_Probe start
E (2914) camera: Detected camera not supported.
E (2914) camera: Camera probe failed with error 0x20004

3.2.2 解决方案

有多种原因会导致 0x20004 错误,这里是因为项目中缺少 esp32-camera 的配置参数导致的。

项目的所有参数,都是通过 menuconfig 来管理的,因此只需要将 esp32-camera 的相关配置添加到菜单中,再运行一次 menuconfig 即可。

esp32-camera 配置菜单可以从项目中找到,路径为:

1
.pio/libdeps/esp32cam/esp32-camera/Kconfig

将其中的内容全部复制下来,然后在项目的 src 目录下,创建文件 Kconfig.projbuild,并将内容粘贴进去。

再次运行 menuconfig,可以看到界面上多出了一个 “Camera configuration” 菜单:

进入该菜单,禁用 OV2640 以外的其他摄像头驱动,其他配置保持默认即可:

3.3 启用 SPIRAM

ESP32-CAM 的内置内存只有几百 KB,但是处理图像往往会占用很多内存,因此需要启用 SPIRAM。开启后,将增加 4MB 可用内存,可以满足常用的图像处理需求。

然而,这个版本的 espidf 默认是禁用 SPIRAM 的,需要通过 menuconfig 开启。

菜单路径为:

1
Component config > ESP32-specific

找到其中的 “Support for external, SPI-connected RAM”,启用即可。

4 参考资料