一、ESP32-S3-CAM开发板简介

ESP32-S3-CAM 是一款基于 ESP32-S3 的摄像头开发板,集成 WiFi、Bluetooth LE、USB 以及摄像头接口,可用于AI视觉,视频监控,图像采集,人脸识别,物联网终端。
主要特点:

  • ESP32-S3 双核240MHz
  • 支持 PSRAM
  • 支持 JPEG 硬件编码
  • DVP Camera Interface
  • USB 下载
  • WiFi 图传
  • 支持 MicroSD
    可以用 Arduino IDE 或 ESP-IDF 进行开发。
    在这里插入图片描述

二、五款摄像头参数对比

本次测试共使用了五款常见的 DVP 接口摄像头,包括国产 GC 系列和OmniVision的OV 系列。分辨率覆盖了 2MP、3MP 和 5MP 三个等级,能够满足从普通图传到高清图像采集的不同应用需求。

参数对比

型号 GC2145 GC2640 OV2640 OV3660 OV5640
像素 2MP 2MP 2MP 3MP 5MP
最大分辨率 1600×1200 1600×1200 1600×1200 2048×1536 2592×1944
输出接口 DVP 8bit DVP 8bit DVP 8bit DVP 8bit DVP 8bit
输出格式 RAW、RGB565、YUV RAW、RGB565、YUV RAW、RGB565、YUV、JPEG RAW、RGB565、YUV、JPEG RAW、RGB565、YUV、JPEG
硬件JPEG 不支持 不支持 支持 支持 支持
对焦 固定焦 固定焦 固定焦 固定焦 固定焦/自动对焦(AF)版本
成本 最低 较低 中等 较高 最高

三、摄像头引脚

ESP32-S3-CAM开发板的摄像头接口引脚定义
在这里插入图片描述

四、实际接线

排线座是翻盖下接的,使用的时候把座子打开,屏幕插接进去,再压下即可。
板子两个USB是两种不同的下载方式,这里选择的是串口COM端进行下载。

PS:
标记USB-OTG的是USB下载口,插上会自动识别USB口。
标记USB-UART的是串口下载口,下载对应的串口驱动才能识别到端口号。

在这里插入图片描述

五、CameraWebServer 代码配置

1.单片机在arduino里的配置

ESP32S3配置
1.ARDUINO搭建ESP32环境,选择S3设备。(参考官方社区的离线搭建教程:ARDUINO ESP32环境搭建)
2.端口看设备管理器识别到的端口是COMxx,对应选择就行
3.FLASH选择"16MB",PSRAM选"OPI PSRAM",不然编译可能会报错

在这里插入图片描述

2.测试代码

这里用的是ESP32-S3-cam开发板进行测试,程序使用的是CameraWebServer 集成了:摄像头初始化,WiFi联网,HTTP服务器,JPEG图片采集,实时视频流(MJPEG),摄像头参数调节。
这里程序我统一设置了RGB565的格式,这个格式对于五款摄像头来说都是支持( GC2145,GC2640,OV2640, OV3660,OV5640),所以这个程序可以同时兼容5款摄像头去使用。

程序整体流程如下:

初始化串口
        │
配置Camera引脚
        │
camera_config_t
        │
esp_camera_init()
        │
连接WiFi
        │
启动HTTP服务器
        │
浏览器访问IP
        │
查看实时视频

代码展示:

#include "esp_camera.h"
#include <WiFi.h>
#define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM
#include "camera_pins.h"

const char* ssid = "skr";
const char* password = "123456789";

void startCameraServer();
void setupLedFlash(int pin);

void setup() {
  Serial.begin(115200);
  Serial.setDebugOutput(true);  //允许ESP-IDF底层日志输出
  Serial.println();

  camera_config_t config;  //创建camera配置结构体
  config.ledc_channel = LEDC_CHANNEL_0;
  config.ledc_timer = LEDC_TIMER_0;
  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_xclk = XCLK_GPIO_NUM;
  config.pin_pclk = PCLK_GPIO_NUM;
  config.pin_vsync = VSYNC_GPIO_NUM;
  config.pin_href = HREF_GPIO_NUM;
  config.pin_sccb_sda = SIOD_GPIO_NUM;
  config.pin_sccb_scl = SIOC_GPIO_NUM;
  config.pin_pwdn = PWDN_GPIO_NUM;
  config.pin_reset = RESET_GPIO_NUM;
  config.xclk_freq_hz = 20000000;
  config.pixel_format = PIXFORMAT_RGB565; // for face detection/recognition
  config.grab_mode = CAMERA_GRAB_WHEN_EMPTY;
  config.fb_location = CAMERA_FB_IN_PSRAM;
  config.frame_size = FRAMESIZE_240X240;//分辨率
  config.fb_count = 2;

  // camera init
  esp_err_t err = esp_camera_init(&config);
  if (err != ESP_OK) {
    Serial.printf("Camera init failed with error 0x%x", err);
    return;
  }

  sensor_t * s = esp_camera_sensor_get();
  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

  WiFi.begin(ssid, password);//开始连接wifi
  WiFi.setSleep(false);//关闭省电

  while (WiFi.status() != WL_CONNECTED) {  //等待连接
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected");

  startCameraServer();//启动HTTP服务器

  Serial.print("Camera Ready! Use 'http://");
  Serial.print(WiFi.localIP());
  Serial.println("' to connect");
}

void loop() {
  // Do nothing. Everything is done in another task by the web server
  delay(10000);
}

需要注意自己使用的时候要把这里改成自己对应要连接的WiFi账号和密码

const char* ssid = "xxx";
const char* password = "xxxxxx";

六、测试现象

代码烧录进单片机后,打开串口输出(波特率115200),可以看到板子连接到WiFi后会输出一个IP地址.
在这里插入图片描述

把电脑也连接到WiFi后打开对应IP地址,网页端点击Start Stream就可以看到实时视频流了。(Get Still是获取单帧图片)
在这里插入图片描述


七、总结

  • 这里给出的是五款摄像头通用的测试代码,官方的示例代码还有提供jpeg格式输出,但是只有OV系列的摄像头有这个格式,GC系列都是不支持jpeg输出的。
  • 如果你使用的不是ESP32S3的,是ESP32-CAM你可以直接把

#define CAMERA_MODEL_ESP32S3_EYE

换成

#define CAMERA_MODEL_AI_THINKER

再把板子选择
在这里插入图片描述

就可以直接测试了

  • 这里也总结了原有官方的代码用JPEG格式进行输出(仅OV系列),这里就不赘述了,有需要工程代码的可以留言邮箱获取!!
    在这里插入图片描述

Logo

智能硬件社区聚焦AI智能硬件技术生态,汇聚嵌入式AI、物联网硬件开发者,打造交流分享平台,同步全国赛事资讯、开展 OPC 核心人才招募,助力技术落地与开发者成长。

更多推荐