Skip to content

oringing/esp32-cam

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

19 Commits
 
 
 
 
 
 
 
 
 
 

Repository files navigation

ESP32-CAM + OV2640 轻量监控系统 📹

视频流展示图

  • http视频流测试图

项目简介 ✨

本仓库基于 ESP32-CAM 开发板与 OV2640 摄像头,实现了一套低成本轻量监控系统,支持局域网实时监控、公网访问(内网穿透)及 MQTT 远程控制功能。作为大三计算机专业学生的嵌入式练手项目,代码注重实战性与可维护性,适合作为嵌入式 / 物联网方向的简历项目案例。

硬件参数速览 📊

esp32cam外观图

  • (这里是我所购买的esp32cam模块参数,购买商家如上图所示,具体参数请以自己的开发板为准)

🖥️ ESP32-CAM 模块核心参数

特性 详情
处理器 双核240MHz ESP32,支持蓝牙4.2 + BLE 🛜
存储配置 4Mb SPI Flash +520kB SRAM + 4MB PSRAM (超大扩展内存) 💾
WiFi性能 2.4GHz频段,支持802.11b/g/n,板载2dBi天线 📶
功耗控制 Deep-sleep模式最低6mA,节能小能手 🌙
扩展接口 支持TF卡(最大4GB)、UART/SPI/I2C等 🔌
供电要求 4.75-5.25V,≥1A电源适配器,⚠须注意:输入电源低于5V2A时,图片会有几率出现水纹⚡

完整硬件参数图:
ESP32-CAM开发板简介
ESP32-CAM开发板参数图

📸 OV2640 摄像头核心参数

特性 详情
最高分辨率 UXGA(1600×1200)@15fps 🚀
主流配置 SVGA(800×600) / VGA(640×480)
最大帧率 UXGA(16001200)@15 帧;SVGA(800600)@30帧;CIF(352*288)@60帧
输出格式 支持JPEG/RGB/YUV等,本项目用JPEG优化传输 📦
镜头参数 F2.0光圈 + 78°广角 + 3.6mm焦距 🔍
接口类型 8位数据总线 + SCCB控制接口 (类I²C)

完整硬件参数图:

  • OV2640摄像头参数图
  • OV2640摄像头介绍与特点

固件功能清单 🚀

核心功能 (已实现)

  • 📹 摄像头采集:固定VGA(640×480)分辨率,JPEG格式输出
  • 🔗 WiFi连接:STA模式自动重连(5次重试),成功后打印IP
  • 🌐 HTTP服务:8080端口提供视频流,仅支持1台设备查看
  • 📡 MQTT 通信:基于 EMQX 搭建服务端,ESP32-CAM 作为客户端实现双向通信
  • 📱 微信小程序:开发配套小程序客户端,通过MQTT协议连接ESP32-CAM,支持视频流查看、截图指令发送

扩展功能 (待开发)

  • 📸 远程截图:访问/snapshot保存图片到TF卡
  • 📡 MQTT控制:接收指令开关摄像头,降低待机功耗
  • 🌍 内网穿透:Ngrok实现公网访问 (Ngrok免费版已测试完成,部署过程之后完善)

开发环境 🛠️

快速上手 🚀

  1. 克隆仓库并进入固件目录

    git clone <仓库地址>
    cd esp32-cam/esp32cam_firmware
  2. 配置WiFi参数,修改http视频流端口号和帧率(使用VSCODE)

在此路径文件中修改wifi配置:esp32cam_firmware\main\wifi.h 修改http视频流配置:esp32cam_firmware\main\http_server.h

  1. 分区表配置(重要!否则可能会编译失败) 由于代码未优化(其实就是写的伊托答辩),生成的.bin固件大小可能超过默认分区表factory分区容量(通常为1MB),会导致如下报错:
Error: app partition is too small for binary camera_test.bin size 0x10b070: Part 'factory' 0/0 @ 0x10000 size 0x100000 (overflow 0xb070)
/*
报错信息核心含义:
    应用程序二进制文件 camera_test.bin 大小为 0x10b070 (约1.045MB)
    factory 分区大小为 0x100000 (1MB),起始地址 0x10000
    二进制文件大小超过分区容量,溢出 0xb070 字节 (45,168字节)
*/

解决方案

  • 第一步(本仓库已实现,直接做第二步):在项目根目录新建 partitions.csv文件并添加以下内容,将factory分区容量增加至1.5MB:
# Name,   Type, SubType, Offset,  Size, Flags
nvs,      data, nvs,     0x9000,  0x6000,
phy_init, data, phy,     0xf000,  0x1000,
factory,  app,  factory, 0x10000, 0x150000,
  • 第二步:通过menuconfig指定自定义分区表 运行命令打开图形界面:
idf.py menuconfig

导航路径:Partition Table → 选择Custom partition table CSV → 在Custom partition CSV file中输入partitions.csv,保存退出。

  1. 启用PSRAM配置(解决摄像头初始化失败问题) 若串口日志中出现PSRAM可用: 0 字节摄像头初始化失败,需配置启用PSRAM:
    运行以下命令打开图形配置界面:
idf.py menuconfig

依次导航并开启以下设置:
路径:Component config → ESP32-specific config → Support for external, SPI-connected RAM(启用外部SPI连接的RAM支持)
路径:Component config → SPI RAM config → Initialize SPI RAM when booting the ESP32(启动时初始化SPI RAM)

  1. 编译烧录 (使用ESP-IDF终端,并替换COMx为实际串口)

    idf.py -p COMx flash monitor
  2. 浏览器访问串口打印的IP地址即可查看视频流 👀

注意事项 ⚠️

  • 必须使用≥1A电源,否则摄像头可能初始化失败,根据商家资料得知,输入电源低于5V2A时,图片可能会出现水纹⚡
  • 仅支持2.4GHz WiFi,5GHz频段无法连接 📶
  • 扩展功能开发前建议检查Flash剩余容量(初始化时串口会输出剩余Flash物理容量) 💾

关于项目 📝

这是我作为大三计算机专业学生的嵌入式练手项目,主打一个"从0到1"的实战过程。目前只实现http视频流实时监控功能,后续会持续迭代扩展功能。如果对你有帮助,欢迎star🌟 鼓励一下~

项目进展 🚧

✅ 已完成

  • [√] ESP32-CAM硬件基础配置
  • [√] WiFi连接功能实现
  • [√] HTTP视频流服务搭建
  • [√] MQTT通信功能实现
  • [√] 微信小程序开发
  • [√] 前端-硬件打通,实现实时视频流查看

🚧 进行中

  • 远程截图功能开发
  • SD卡图片保存功能实现
  • MQTT远程控制功能完善

🎯 下一步计划

  1. 实现远程截图功能,通过HTTP请求获取图片
  2. 实现SD卡图片保存功能,将截图存储到TF卡
  3. 完善MQTT控制功能,支持开关摄像头等指令
  4. 开发内网穿透功能,实现公网访问

有任何问题欢迎提Issue,一起交流学习呀!😊

About

基于ESP32-CAM的轻量级远程监控系统,支持局域网实时视频流(HTTP MJPEG)、WiFi自动重连、内网穿透(Sakura Frp/ngrok),可扩展MQTT远程控制与低功耗模式。基于ESP-IDF v5.5开发,适配OV2640摄像头,适合宿舍/实验室轻量监控场景。

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages