零知派——ESP32‑S3 基于 ESP32-CAM 驱动 OV3660 摄像头模块开发
✔零知开源(零知IDE)是一个专为电子初学者/电子兴趣爱好者设计的开源软硬件平台,在硬件上提供超高性价比STM32系列开发板、物联网控制板。取消了Bootloader程序烧录,让开发重心从 “配置环境” 转移到 “创意实现”,极大降低了技术门槛。零知IDE编程软件,内置上千个覆盖多场景的示例代码,支持项目源码一键下载,项目文章在线浏览。零知开源(零知IDE)平台通过软硬件协同创新,让你的创意快速转化为实物,来动手试试吧!
✔访问零知实验室,获取更多实战项目和教程资源吧!
目录
项目概述
本文是一个基于 ESP32-S3 微控制器与 OV3660 摄像头模组构建的无线视频监控方案。设备通过 WiFi 连接局域网,内置 HTTP Web 服务器,用户可通过浏览器或手机实时访问视频流。代码针对 OV3660 传感器进行了特定的图像校正与优化,以确保画面方向正确且色彩表现良好。
项目难点及解决方案
问题描述:摄像头帧缓冲非常占用内存
解决方案:软件默认开启 PSRAM 支持
一、硬件准备与电路连接
1.1 核心硬件清单
| 组件 | 型号/规格 | 数量 | 备注 |
|---|---|---|---|
| 主控板 | 零知ESP32-S3 | 1 | 核心控制器,自带WiFi和蓝牙 |
| OV3660模块 | 零知ESP32-S3扩展板 | 1 | 集成OV3660等模块,配套主板,直插即用 |
1.2 接线方案表
OV3660 支持 10 位数据输出,但 ESP32 通常配置为 8 位模式。这里定义了 8 个引脚 (Y2-Y9),对应 8 位数据宽度。
| ESP32-S3引脚 | 连接模块 | 功能描述 | 代码定义 |
|---|---|---|---|
|
9 |
XCLK |
摄像头主时钟输入 |
XCLK_GPIO_NUM |
|
17 |
SIOD |
配置数据线 (I2C SDA) |
SIOD_GPIO_NUM |
|
18 |
SIOC |
配置时钟线 (I2C SCL) |
SIOC_GPIO_NUM |
|
20 |
D7 | 并行数据输入引脚 |
Y9_GPIO_NUM |
|
10 |
D6 | 并行数据输入引脚 |
Y8_GPIO_NUM |
|
11 |
D5 | 并行数据输入引脚 |
Y7_GPIO_NUM |
|
1 |
D4 | 并行数据输入引脚 |
Y6_GPIO_NUM |
|
39 |
D3 | 并行数据输入引脚 |
Y5_GPIO_NUM |
|
13 |
D2 | 并行数据输入引脚 |
Y4_GPIO_NUM |
|
38 |
D1 | 并行数据输入引脚 |
Y3_GPIO_NUM |
|
2 |
D0 | 并行数据输入引脚 |
Y2_GPIO_NUM |
|
8 |
VSYNC |
帧同步信号 |
VSYNC_GPIO_NUM |
|
19 |
HREF |
行有效信号 |
HREF_GPIO_NUM |
|
12 |
PCLK |
像素数据输出时钟 |
PCLK_GPIO_NUM |
1.3 具体接线图
主板和扩展板连接时注意方向,可以根据上下排针的颜色对应连接;

二、安装与使用部分
2.1 开源平台-输入"智能小车控制系统"并搜索-代码下载自动打开
2.2 连接-验证-上传
2.3 调试-串口监视器
三、系统代码讲解
3.1 初始化OV3660模块
camera_config_t config;
config.ledc_channel = LEDC_CHANNEL_0;
config.ledc_timer = LEDC_TIMER_0;
config.pin_pwdn = PWDN_GPIO_NUM;
config.pin_reset = RESET_GPIO_NUM;
config.pin_xclk = XCLK_GPIO_NUM;
config.pin_sscb_sda = SIOD_GPIO_NUM;
config.pin_sscb_scl = SIOC_GPIO_NUM;
config.pin_d0 = Y2_GPIO_NUM;
config.pin_d1 = Y3_GPIO_NUM;
config.pin_d2 = Y4_GPIO_NUM;
config.pin_d3 = Y5_GPIO_NUM;
config.pin_d4 = Y6_GPIO_NUM;
config.pin_d5 = Y7_GPIO_NUM;
config.pin_d6 = Y8_GPIO_NUM;
config.pin_d7 = Y9_GPIO_NUM;
config.pin_vsync = VSYNC_GPIO_NUM;
config.pin_href = HREF_GPIO_NUM;
config.pin_pclk = PCLK_GPIO_NUM;
config.xclk_freq_hz = 20000000;
config.pixel_format = PIXFORMAT_JPEG;
config.frame_size = FRAMESIZE_HVGA; // 分辨率:640x480
config.jpeg_quality = 12; // 质量 10~12 较好
config.fb_count = 2; // 使用双帧缓冲节省内存
esp_err_t err = esp_camera_init(&config);
设置图像格式为 JPEG 格式,它是压缩图片,比原始 RGB 数据小得多,传输速度快;采用 双帧缓冲,可以在摄像头采集下一帧的同时,发送上一帧数据,能让视频流更流畅;
3.2 图像传感器调整
根据实际效果调整摄像头参数
sensor_t *s = esp_camera_sensor_get();
// initial sensors are flipped vertically and colors are a bit saturated
if (s->id.PID == OV3660_PID) {
s->set_vflip(s, 1); // flip it back
s->set_brightness(s, 1); // up the brightness just a bit
s->set_saturation(s, -2); // lower the saturation
}
// drop down frame size for higher initial frame rate
if (config.pixel_format == PIXFORMAT_JPEG) {
s->set_framesize(s, FRAMESIZE_QVGA);
}
#if defined(CAMERA_MODEL_M5STACK_WIDE) || defined(CAMERA_MODEL_M5STACK_ESP32CAM)
s->set_vflip(s, 1);
s->set_hmirror(s, 1);
#endif
#if defined(CAMERA_MODEL_ESP32S3_EYE)
s->set_vflip(s, 1);
#endif
很多摄像头模组安装时是倒置的,所以需要 set_vflip (垂直翻转) 或 set_hmirror (水平镜像);如果摄像头是 OV3660 模块,代码会自动应用一套优化参数;初始化使用 HVGA (480x320),启动后自动切换至 QVGA (320x240) 以提升帧率;
3.3 Wi-Fi 连接与服务器启动
WIFI采用 STA模式,连接相同的网络共享局域网;
WiFi.begin(ssid, password);
WiFi.setSleep(false);
Serial.print("WiFi connecting");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println("");
Serial.println("WiFi connected");
startCameraServer();
Serial.print("Camera Ready! Use 'http://");
Serial.print(WiFi.localIP());
Serial.println("' to connect");
四、演示视频
零知派-ESP32‑S3 驱动 OV3660模块 演示视频
五、常见问题解答(FAQ)
Q1: WIFI连接失败或者访问串口打印地址无效?
A:文章中的WIFI信息需要自己的WIFI修改,且访问IP地址的设备(电脑、手机)需要跟代码中的WIFI一致,这样才能通过局域网访问IP地址;若无WIFI或者WIFI信号较差,可以将模块设置为 AP 模式,如:WiFi.softAP(ssid, password);
Q2: 摄像头初始化失败?
A:这里摄像头的引脚定义是根据零知派ESP32-S3扩展板原理图设定的,如果是外接其他模块,按其原理图修改 camera_config_t 中的引脚定义即可
Q3: 访问页面显示方向错误?
A:扩展板上有可以粘贴摄像头位置,即作为前置摄像头,方向显示正确;若作为后置摄像头或者OV3660出厂设置异常 导致的方向相反,可以设置 s->set_vflip(s, 1); s->set_hmirror(s, 1); 这两个来调整方向
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)