最近开始单片机来实现一些家庭智能,来弥补现在市面上成品无法实现的一些功能或价格。
我现在用的单片机主要都是乐鑫 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 连电脑有两种方式:
- 通过专用的下载底座
- 使用 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 连接的话,杜邦线如果没接好也会有以上问题