CameraWebServer是乐鑫 Arduino-ESP32 内核官方自带原生示例工程,是 ESP32/ESP32-S3 做网页 IP 摄像头最基础、入门首选的流媒体程序,内置完整摄像头驱动、WiFi、HTTP MJPEG 视频流、网页控制面板。
一、CameraWebServer项目说明
1. 项目基础定位
- 来源Arduino IDE 路径:
文件 → 示例 → ESP32 → Camera → CameraWebServer,随 ESP32 板库一起安装,无需额外下载第三方库。 - 核心作用ESP 芯片驱动 DVP 摄像头(OV2640/OV3660 等),搭建 80 端口 Web 服务,浏览器打开即可实时查看 MJPEG 视频流、在线调节图像参数、抓拍单帧照片。
- 适配芯片ESP32、ESP32-S2、ESP32-S3(完美支持 N16R8 带 PSRAM);必须带 PSRAM 才能跑 QVGA/VGA 等高分辨率,无 PSRAM 仅能极小尺寸画面。
- 来源Arduino IDE 路径:
网页控制面板界面
2. 整体代码结构
工程一共 4 个文件:
- CameraWebServer.ino(主入口)WiFi 初始化、摄像头参数配置、Web 服务路由注册、主循环
server.handleClient()轮询客户端请求。 - camera_pins.h预制各大开发板引脚映射宏,S3-EYE、AI-Thinker、M5、通用 S3-WROOM 全部预设好 GPIO 定义,开启对应宏自动加载引脚配置。
- app_httpd.cppHTTP 后端核心:MJPEG 长连接分片推流、单帧快照、接收网页调节指令、图像参数下发。
- camera_index.h内置压缩 HTML 前端页面(字符串形式嵌入代码),包含视频窗口、滑动调节条、功能按钮,无外部文件依赖。
- CameraWebServer.ino(主入口)WiFi 初始化、摄像头参数配置、Web 服务路由注册、主循环
3. 核心功能清单
- 实时 MJPEG 流媒体(无插件浏览器直接看)
- 拍照(JPEG)
- 录像(存浏览器)
- 分辨率调节
OV3660 支持:UXGA(2048×1536)、SXGA、QVGA
- 亮度 / 对比度 / 饱和度 / 锐度
- 夜间模式、特效、白平衡
- 人脸检测(最牛的内置功能)
- 无需训练
- 无需模型文件
- 网页画框显示人脸
- 闪光灯控制
4. 运行工作流程
- 上电 → 串口初始化 → WiFi 连接(打印分配 IP)
- 根据开启的板型宏加载 GPIO 引脚配置
- 填充
camera_config_t结构体,调用esp_camera_init()启动 DVP 摄像头 - 初始化 WebServer (80 端口),注册
/、/stream、/capture、参数调节路由 - 进入
loop()死循环:持续server.handleClient()处理浏览器 HTTP 请求 - 客户端访问
/stream时,开启长循环采集帧、JPEG 编码、TCP 分片持续下发画面
5. 优势与短板
优势
- 零额外依赖:官方自带,不用装第三方库,Arduino/PlatformIO 一键编译
- 上手极快:只改 WiFi 密码 + 切换板型宏就能跑通画面
- 可视化调试强:网页实时调画质参数,排查供电、时序问题直观
- 适配广泛:所有主流 ESP 摄像头开发板引脚全部预制
- 可快速二次开发:叠加 GPIO 继电器、SD 卡存截图、简单识别逻辑
明显短板
- 单线程阻塞模型所有 WiFi、网页、摄像头采集挤在同一个
loop()调度;多浏览器同时打开页面、WiFi 负载高时,采集任务被抢占,WROOM 电气差直接卡顿断流;而 ESP-IDF/rzeldent 用 FreeRTOS 多核分离任务。 - 只有 HTTP-MJPEG,无原生 RTSP延迟偏高(600ms~2s),不兼容 NVR 监控录像机、HA 专业流媒体链路;RTSP 必须自己额外移植库。
- 容错弱摄像头初始化轻微时序不稳、长线干扰、电源噪声时容易卡死采集;ESP-WHO、官方 esp_video 驱动自带重试、相位校正容错。
- Arduino 层内存开销更大 对比原生 ESP-IDF,Arduino 内核占用堆内存更高,PSRAM 带宽竞争更激烈,S3-WROOM 外接硬件短板被放大。
- 无鉴权保护 默认任何人连局域网都能打开摄像头画面,没有账号密码登录。
6. rzeldent/esp32cam-rtsp 简易对比
项目 | 框架 | 协议 | 多任务 | 延迟 | 稳定度 | 上手难度 |
CameraWebServer | Arduino 官方 | HTTP MJPEG | 单线程 | 高 | 一般 | 极低 |
rzeldent esp32cam-rtsp | Arduino(PIO) | RTSP+HTTP | FreeRTOS 多核 | 低 | 高 | 低 |
ESP-IDF esp_video | 原生 IDF | HTTP MJPEG | 多核调度 | 中 | 极高 | 中 |
二、测试硬件平台
1. ESP-S3-EYE 平台(兼容)
使用兼容ESP-S3-EYE 的开发板 CHDESP-S3-EYE,运行测试相关官方示例基本没有问题,测试后再移植测试第三方开发板。摄像头:OV3660(300 万像素)
2. ESPS3-N16R8-CAM
ESP32-S3 WROOM + OV3660 开发板常用的 Camera 定义:
//Camera Config #define CAMERA_PIN_D0 GPIO_NUM_11 #define CAMERA_PIN_D1 GPIO_NUM_9 #define CAMERA_PIN_D2 GPIO_NUM_8 #define CAMERA_PIN_D3 GPIO_NUM_10 #define CAMERA_PIN_D4 GPIO_NUM_12 #define CAMERA_PIN_D5 GPIO_NUM_18 #define CAMERA_PIN_D6 GPIO_NUM_17 #define CAMERA_PIN_D7 GPIO_NUM_16 #define CAMERA_PIN_XCLK GPIO_NUM_15 #define CAMERA_PIN_PCLK GPIO_NUM_13 #define CAMERA_PIN_VSYNC GPIO_NUM_6 #define CAMERA_PIN_HREF GPIO_NUM_7 #define CAMERA_PIN_SIOC GPIO_NUM_5 #define CAMERA_PIN_SIOD GPIO_NUM_4 #define CAMERA_PIN_PWDN GPIO_NUM_NC #define CAMERA_PIN_RESET GPIO_NUM_NC #define XCLK_FREQ_HZ 20000000三、Arduino IDE 操作步骤
开发板:ESP32-S3 EVB
摄像头:OV3660(300 万像素,比 OV2640 高级)
示例:Arduino → 文件 → 示例 → ESP32 → Camera → CameraWebServer
这个示例原生支持 OV3660 + ESP32-S3,只需要修改 2 处代码就能直接跑。
第一步:打开示例
Arduino IDE 操作:文件 → 示例 → ESP32 → Camera → CameraWebServer
打开后是一个巨大的.ino文件,我们只改关键区域。
第二步:配置摄像头型号
找到代码里这一段(大约第 10~30 行):
// =================== // Select camera model // =================== //#define CAMERA_MODEL_WROVER_KIT // Has PSRAM //#define CAMERA_MODEL_ESP_EYE // Has PSRAM #define CAMERA_MODEL_ESP32S3_EYE // Has PSRAM //#define CAMERA_MODEL_M5STACK_PSRAM // Has PSRAM //#define CAMERA_MODEL_M5STACK_V2_PSRAM // M5Camera version B Has PSRAM //#define CAMERA_MODEL_M5STACK_WIDE // Has PSRAM //#define CAMERA_MODEL_M5STACK_ESP32CAM // No PSRAM //#define CAMERA_MODEL_M5STACK_UNITCAM // No PSRAM //#define CAMERA_MODEL_AI_THINKER // Has PSRAM //#define CAMERA_MODEL_TTGO_T_JOURNAL // No PSRAM //#define CAMERA_MODEL_XIAO_ESP32S3 // Has PSRAM#define CAMERA_MODEL_ESP32S3_EYE因为ESP32-S3-WROOM + OV3660 官方匹配型号就是这个。(兼容板与第三方都选这个配置)
第三步:修改 WiFi 信息
找到:
const char* ssid = "********"; const char* password = "********";改成你自己的路由器 WiFi。
第四步:板卡配置
Arduino 中:工具 → 开发板 → ESP32 Arduino → ESP32S3 Dev Module
Flash/PSRAM 及其他配置项,参考下方图示:
第五步:上传 & 运行
- 把 ESP32-S3 开发板插电脑
- 选择正确串口
- 点击上传
注:如果上传中断或错误,需要让板卡进入下载模式(先按 BOOT 键不放,再按 RST,松开 RST 就进入下载模式,最后放 BOOT)
上传成功后打开串口监视器(115200 波特率)你会看到:
ESP32-S3-EYE 兼容板启动信息:
第三方开发板启动信息: