零知派——ESP32‑S3 基于 ESP32-CAM 驱动 OV3660 摄像头模块开发
✔零知开源零知IDE是一个专为电子初学者/电子兴趣爱好者设计的开源软硬件平台在硬件上提供超高性价比STM32系列开发板、物联网控制板。取消了Bootloader程序烧录让开发重心从 “配置环境” 转移到 “创意实现”极大降低了技术门槛。零知IDE编程软件内置上千个覆盖多场景的示例代码支持项目源码一键下载项目文章在线浏览。零知开源(零知IDE)平台通过软硬件协同创新让你的创意快速转化为实物来动手试试吧✔访问零知实验室获取更多实战项目和教程资源吧www.lingzhilab.com目录一、硬件准备与电路连接1.1 核心硬件清单1.2 接线方案表1.3 具体接线图二、安装与使用部分三、系统代码讲解3.1 初始化OV3660模块3.2 图像传感器调整3.3 Wi-Fi 连接与服务器启动四、演示视频五、常见问题解答FAQ项目概述本文是一个基于ESP32-S3微控制器与OV3660摄像头模组构建的无线视频监控方案。设备通过 WiFi 连接局域网内置 HTTP Web 服务器用户可通过浏览器或手机实时访问视频流。代码针对 OV3660 传感器进行了特定的图像校正与优化以确保画面方向正确且色彩表现良好。项目难点及解决方案问题描述摄像头帧缓冲非常占用内存解决方案软件默认开启PSRAM支持一、硬件准备与电路连接1.1 核心硬件清单组件型号/规格数量备注主控板零知ESP32-S31核心控制器自带WiFi和蓝牙OV3660模块零知ESP32-S3扩展板1集成OV3660等模块配套主板直插即用1.2 接线方案表OV3660 支持 10 位数据输出但 ESP32 通常配置为 8 位模式。这里定义了 8 个引脚 (Y2-Y9)对应 8 位数据宽度。ESP32-S3引脚连接模块功能描述代码定义9XCLK摄像头主时钟输入XCLK_GPIO_NUM17SIOD配置数据线 (I2C SDA)SIOD_GPIO_NUM18SIOC配置时钟线 (I2C SCL)SIOC_GPIO_NUM20D7并行数据输入引脚Y9_GPIO_NUM10D6并行数据输入引脚Y8_GPIO_NUM11D5并行数据输入引脚Y7_GPIO_NUM1D4并行数据输入引脚Y6_GPIO_NUM39D3并行数据输入引脚Y5_GPIO_NUM13D2并行数据输入引脚Y4_GPIO_NUM38D1并行数据输入引脚Y3_GPIO_NUM2D0并行数据输入引脚Y2_GPIO_NUM8VSYNC帧同步信号VSYNC_GPIO_NUM19HREF行有效信号HREF_GPIO_NUM12PCLK像素数据输出时钟PCLK_GPIO_NUM1.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模块 演示视频五、常见问题解答FAQQ1: 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); 这两个来调整方向