ESP32-CAM + Arduino 快速上手

最近开始单片机来实现一些家庭智能,来弥补现在市面上成品无法实现的一些功能或价格

我现在用的单片机主要都是乐鑫 ESP 系列的,目前已经做了几个设备。

本篇先记录一下 ESP32-CAM 的快速上手和过程中遇到的问题,以及解决办法。

ESP32-CAM 简介

ESP32-CAM 是一个小尺寸的摄像头模组,该模块可以作为最小系统独立工作,尺寸仅为 27*40.5*4.5mm。

价格也很便宜,带 200w 像素摄像头(OV2640)的版本,某宝价格一般在 30 元左右。

通过它我们可以完成一些视频流监控或者图片拍照上传,后续可以用 OpenCV 做一些识别。

其接口引脚图如下:

ESP32 开发环境

安装 Arduino IDE

下载官方网址:https://www.arduino.cc/en/software

下载符合自己操作系统版本的IDE并安装。

Arduino IDE 配置 ESP32 开发环境

由于 Arduino IDE 中本身是没有 ESP32 的开发版,需要手动进行安装,安装方式如下:

打开 Arduino IDE ,找到「文件 > 首选项」, 将 ESP32 的配置链接填入附加开发板管理网址中

1
https://espressif.github.io/arduino-esp32/package_esp32_index.json

在 Arduino IDE 中,找到「工具 > 开发板 > 开发板管理」,搜索 ESP32

版本注意选择 2.0.16,不要选 3.0.0-rc3,否则后续编译会出问题

ESP32-CAM 连接电脑

先安装驱动,CH340 驱动下载地址:https://www.wch.cn/products/CH340.html

ESP32-CAM 连电脑有两种方式:

  1. 通过专用的下载底座
  2. 使用 TTL 转 USB 模块

专用下载底座

下载底座如下图,很简单,直接对应插上 ESP32-CAM 模块连接 USB 就好了,价格也就 3、4 块,新手推荐

烧录底座上有两个按钮:IO0 和 RST

一般的 ESP32 上会有两个按钮,一个是 RST,一个是 BOOT。一个按钮进入下载模式,一个按钮进入运行模式。

而 ESP32-CAM 上只有一个 RST 按钮,所以需要通过 IO0 的接地情况来判断 ESP32-CAM 当前处于什么模式:

  • 当 IO0 接地时,按下 RST 进入下载模式,此时 Arduino 点击上传,ESP32-CAM 就能正确地烧录驱动;
  • 当 IO0 不接地,按下 RST 进入运行模式。此时 ESP32-CAM 会运行已经烧录的程序。

这里的 RST 按钮和 ESP32-CAM 上的 RST 有相同的效果,IO0 按钮则是按下时相当于 IO0 接地。

TTL 转 USB 模块

上边那个下载底座,网上质量也是参差不齐,有时收到时就是损坏的,这时可以试试 TTL 转 USB 模块,接线图如下

ESP32-CAM TTL 转 USB
GND GND
5V VCC (5V)
U0R TX
U0T RX
IO0 GND

注意:使用 TTL 转 USB 模块,上传固件的时候,要把 ESP32-CAM 上的 IO0 和 GND 短接以进入下载模式。

烧录并运行

ESP32-CAM 连上电脑后,

在 Arduino IDE 的「工具 > 开发板」那里选择 AI Thinker ESP32-CAM,选择对应的串口接口

然后打开「文件 > 示例 > ESP32 > Camera > CameraWebServer」

改动以下即可

  • 注释掉 16 行
  • 取消注释 24 行
  • 修改成你的 wifi 名称和密码

执行编译并上传

如果是用的 TTL 转 USB 模块,此时记得要断开 IO0 和 GND 了,以进入正常的运行模式

打开「工具 > 串口监视器」(或者点右上角那个图标),波特率调到 115200,然后查看串口中输出的 IP,并用浏览器打开 IP 即可实时查看视频画面

遇到的问题及解决办法

编译报错

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
In file included from d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\bits\ios_base.h:46,
from d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\ios:42,
from d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\ostream:38,
from d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\bits\unique_ptr.h:41,
from d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\memory:76,
from D:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-rc3\libraries\Network\src/NetworkClient.h:24,
from D:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-rc3\libraries\Network\src/Network.h:12,
from D:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-rc3\libraries\WiFi\src/WiFiGeneric.h:39,
from D:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-rc3\libraries\WiFi\src/WiFiSTA.h:29,
from D:\Users\Administrator\AppData\Local\Arduino15\packages\esp32\hardware\esp32\3.0.0-rc3\libraries\WiFi\src/WiFi.h:33,
from D:\Users\Administrator\AppData\Local\Temp\.arduinoIDE-unsaved2024418-26580-k1bqtk.zocld\CameraWebServer\CameraWebServer.ino:2:
d:\users\administrator\appdata\local\arduino15\packages\esp32\tools\xtensa-esp32-elf-gcc\esp-12.2.0_20230208\xtensa-esp32-elf\include\c++\12.2.0\system_error:39:10: fatal error: bits/error_constants.h: No such file or directory
39 | #include <bits/error_constants.h>
| ^~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
exit status 1

Compilation error: exit status 1

开发板管理器里安装的最新 3.0.0-rc3,编译失败,报错如上。

卸载后重新安装 2.0.16 就没问题了。

运行报错 1

1
Brownout detector was triggered

用的底座连接,最后发现是 usb 线的问题

最初用的 USB买 ESP8266 时给的 usb 线,一直就报这个错,虽然那根线看着还不错,还是屏蔽线,并且上传固件都没问题。

后来用在绿联单独买的 usb 线就可以。

运行报错 2

1
2
3
4
5
E (500) camera: Detected camera not supported.

E (500) camera: Camera probe failed with error 0x106(ESP_ERR_NOT_SUPPORTED)

Camera init failed with error 0x106

用的底座连接的话,一般是 usb 线的问题 or 底座没插好

如果是 ttl to usb 连接的话,杜邦线如果没接好也会有以上问题


ESP32-CAM + Arduino 快速上手
https://www.haoyizebo.com/posts/f4cc34ea/
作者
一博
发布于
2024年5月18日
许可协议