✔零知开源(零知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-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); 这两个来调整方向

       

 

Logo

AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。

更多推荐