ESP32-CAM_MJPEG2SD

GitHub
1.6k 336 较难 1 次阅读 今天AGPL-3.0视频开发框架
AI 解读 由 AI 自动生成,仅供参考

ESP32-CAM_MJPEG2SD 是一款专为 ESP32 及 ESP32-S3 开发板打造的多功能摄像头应用,能将 OV2640 等常见模组瞬间变身智能监控终端。它核心解决了低成本硬件在视频录制与传输上的痛点:不仅支持将运动检测或连续拍摄的画面实时保存为标准的 AVI 视频文件(含音频同步),还能通过浏览器以 MJPEG 格式流畅直播,让用户无需复杂后端即可远程查看与管理录像。

这款工具特别适合电子爱好者、嵌入式开发者以及需要低成本定制监控方案的科研人员。无论是家庭安防、野生动物观测,还是无人机第一视角飞行记录,它都能胜任。其技术亮点在于极高的扩展性:除了基础的视频功能,还集成了 MQTT 智能家居联动、Telegram 报警通知、RTSP 推流、遥测数据记录甚至简单的对讲功能。同时,它支持丰富的外设接口,可连接云台、传感器及各类 I2C 设备。值得注意的是,为了获得最佳性能并运行全部高级特性,建议搭配内存更大的 ESP32-S3 系列主板使用。这是一个功能强大且开放的社区项目,让 DIY 视频监控变得既专业又触手可及。

使用场景

一位生态保护区的研究员需要在夜间无人值守的情况下,自动记录珍稀野生动物的活动轨迹并同步回传音频数据。

没有 ESP32-CAM_MJPEG2SD 时

  • 存储管理混乱:相机只能保存大量零散的 JPEG 图片,后期整理需手动合成视频,耗时且容易丢失帧序。
  • 缺乏音画同步:单独录制的音频文件无法与画面精准对齐,导致分析动物叫声与行为对应关系时极其困难。
  • 实时监控缺失:设备处于“黑盒”状态,研究员必须亲自前往现场取出 SD 卡才能查看内容,无法远程确认设备是否正常工作。
  • 触发机制单一:仅能依靠简单的定时拍摄,无法根据动物移动或环境声音智能启动录制,浪费大量存储空间在空白画面上。
  • 数据获取滞后:发现异常情况后无法立即获取证据,往往错过最佳研究或保护时机。

使用 ESP32-CAM_MJPEG2SD 后

  • 视频自动封装:工具直接将抓拍序列合成为标准 AVI 文件,支持按正确帧率播放,极大简化了后期归档与分析流程。
  • 音画完美同步:接入麦克风后,系统自动将 WAV 音频嵌入 AVI 文件中,确保每一声兽吼都能与画面动作精准匹配。
  • 远程实时串流:研究员可通过浏览器直接观看 MJPEG 实时画面或通过 RTSP 推流至 NVR,随时掌握现场动态。
  • 智能多维触发:利用摄像头像素变化检测运动,或结合 PIR/雷达传感器及加速度计,仅在检测到目标时启动录制,高效利用存储。
  • 灵活数据传输:支持通过 FTP、WebDAV 自动上传录像,或通过 Telegram 机器人发送警报,实现数据的即时获取与响应。

ESP32-CAM_MJPEG2SD 将廉价的硬件模块转化为具备音画同步、智能触发及远程管控能力的专业级野外监测终端,显著降低了科研门槛与维护成本。

运行环境要求

操作系统
  • 未说明 (基于 Arduino IDE,支持 Windows
  • macOS
  • Linux)
GPU

不需要 GPU

内存

ESP32: 4MB PSRAM; ESP32-S3: 推荐 8MB+ PSRAM

依赖
notes1. 这是一个嵌入式固件项目,需在 Arduino IDE 中编译并烧录到 ESP32 或 ESP32-S3 开发板。2. 必须启用 PSRAM。3. 分区方案要求:ESP32 选 'Minimal SPIFFS',ESP32-S3 选 '8M with spiffs' 或更大。4. 推荐使用 ESP32-S3 以获得双倍性能和更多功能(如音频、高分辨率)。5. 需配合 SD 卡存储录像文件。6. 避免使用无品牌的 ESP32-S3 克隆板(特别是标记为 RE:1.0 的),因其 PSRAM 规格可能不同导致崩溃。
python不需要 Python
arduino-esp32 core >= v3.1.1
ESP32-CAM_MJPEG2SD hero image

快速开始

ESP32-CAM_MJPEG2SD

适用于搭载OV2640/OV3660/OV5640/PY260摄像头的ESP32/ESP32S3,可将JPEG图像以AVI格式录制到SD卡,并通过MJPEG流在浏览器中播放。AVI格式使录制内容能够在媒体播放器上以正确的帧率回放。若安装了麦克风,则会同时创建一个WAV文件并嵌入到AVI文件中。

该应用支持:

  • 摄像头运动检测或PIR/雷达传感器/加速度计
  • 连续录制——延时摄影或行车记录仪模式
  • 音频录制——来自I2S或PDM麦克风
  • 摄像头云台伺服电机及灯光控制
  • RTSP服务器——视频、音频和字幕流
  • 遥测数据记录——在摄像机录制期间
  • 远程控制——对搭载摄像机的车辆进行远程操控
  • 警报通知——通过Telegram或电子邮件
  • 同时向Web浏览器和远程NVR进行流式传输——使用HTTP或RTSP协议
  • 通过FTP、HTTPS、WebDAV传输录制文件,或直接从浏览器下载
  • MQTT控制——与Home Assistant集成
  • 外部看门狗支持
  • 外设支持:SG90伺服电机、MX1508 H桥、28BYJ-48步进电机、HW-504操纵杆、BMP280、MPU9250、MY9221/WS2812/SK6812 LED灯
  • I2C设备支持:BMP280、BME280、MPU6050、MPU9250、SSD1306、LCD1602等
  • 机器学习接口支持
  • 相机中心功能——用于访问其他ESP32-CAM_MJPEG2SD设备
  • 摄影测量功能——用于拍摄照片以进行3D建模
  • 使用扩展板以获得更多引脚
  • 对讲功能——利用ESP上的麦克风和扬声器,以及用户设备浏览器中的麦克风和扬声器
  • 可选以太网网络连接——替代WiFi

由于ESP32的堆内存有限,无法支持所有功能。为获得更好的性能和功能,建议使用新款ESP32S3摄像头开发板,例如Freenove ESP32S3 Cam、ESP32S3 XIAO Sense、ESP32-S3-Cam(AI Thinker款式),但应避免使用标有“ESPS3 RE:1.0”的无品牌板。

这是一个复杂的应用程序,部分用户在应用提示警告时会提出问题,但这实际上是应用在提醒用户其硬件配置存在问题,而只有用户本人才能解决这些问题。请注意,一些克隆板的规格可能与原版不同,例如PSRAM容量。请仅针对实际的软件错误(ERR消息、未处理的库错误或崩溃)提交问题。如需提出改进建议,请使用讨论区。

10.9.3版本更新内容:

  • 新增以太网网络选项,替代WiFi
  • CAMERA_MODEL_Waveshare_ESP32_S3_ETH添加引脚
  • 定义外接W5500以太网控制器的引脚
  • 修复问题#650
  • 支持使用MPU6050或MPU9250加速度计进行运动检测
  • 支持OV5640自动对焦
  • 日志记录和内存使用优化
  • 修复问题#697
  • 修复问题#698
  • 内部改进

应用目的

该应用程序可用于运动检测或连续录制视频。典型应用场景包括安防摄像头、野生动物监测、火箭飞行监控以及FPV飞行器控制。

将一组JPEG图像保存为单个文件比分别保存为多个文件更快,也更易于管理,尤其是在图像尺寸较小的情况下。实际速率取决于SD卡的质量和容量,以及图像的复杂度和质量。一块标称Class 6的无品牌4GB SDHC卡,其写入速度仅为正品Sandisk 4GB SDHC Class 2卡的三分之一。以下是在全新格式化的Sandisk 4GB SDHC Class 2卡上,使用AI Thinker OV2640开发板、设置为最高JPEG质量和20MHz时钟频率时测得的录制速率。而在ESP32S3上采用24MHz时钟频率时,最大帧率可从50提升至60、25提升至30,但可能需要适当降低JPEG质量。

帧尺寸 OV2640摄像头最大帧率 mjpeg2sd最大帧率 检测时间 ms
96×96 50 45 15
QQVGA 50 45 20
QCIF 50 45 30
HQVGA 50 45 40
240×240 50 45 55
QVGA 50 40 70
CIF 50 40 110
HVGA 50 40 130
VGA 25 20 80
SVGA 25 20 120
XGA 12.5 5 180
HD 12.5 5 220
SXGA 12.5 5 300
UXGA 12.5 5 450

ESP32S3(采用Freenove ESP32S3 Cam开发板,搭载ESP32S3 N8R8模块)运行该应用的速度大约是ESP32的两倍,主要得益于其更快的PSRAM。它能够以OV2640的最大帧率进行录制,包括音频,除UXGA外的所有帧尺寸均可达到最高帧率(UXGA最高10fps)。

设计

ESP32 Cam模块配备4MB PSRAM(大多数ESP32S3则为8MB),用于缓存摄像头帧以及构建AVI文件,从而减少SD卡的写入次数,并通过与SD卡扇区大小对齐来优化写入操作。在播放时,AVI文件会从SD卡读取到多扇区大小的缓冲区中,然后按时间顺序逐帧发送到浏览器。默认情况下,SD卡以MMC 1线模式工作,因为这种模式在ESP32上几乎与MMC 4线模式一样快,同时释放了连接板载灯的引脚4,以及可用于PIR等传感器的引脚12。然而,在ESP32S3上,@josef2600的测试表明,MMC 4线模式可使速度提高一倍(参见此处)。

AVI文件以日期时间格式命名,格式为YYYYMMDD_HHMMSS,并在末尾附加帧尺寸、录制帧率和持续时间(秒),例如20200130_201015_VGA_15_60.avi,存储在按天创建的文件夹YYYYMMDD中。如果包含音频,文件名将以**_S结尾;若有遥测数据,则以_M**结尾。ESP32的时间由NTP服务器或连接的浏览器客户端同步设定。

安装

将 GitHub 项目文件下载到 Arduino IDE 的草图文件夹中,并移除应用文件夹名称中的 -master

请使用至少 arduino-esp32 核心 v3.1.1 版本进行编译,该版本包含网络修复和帧选择方面的改进。

appGlobals.h 文件中,仅取消注释一个 #define CAMERA_MODEL_* 宏来选择所需的 ESP-CAM 板,除非使用默认设置:

  • ESP32 Cam 板 - CAMERA_MODEL_AI_THINKER
  • Freenove ESP32S3 Cam 板 - CAMERA_MODEL_FREENOVE_ESP32S3_CAM

默认情况下不包含可选功能。如需启用某项功能,请在 appGlobals.h 中将相应的 #define INCLUDE_* 设置为 true

选择 ESP32 或 ESP32S3 开发板,并启用 PSRAM,同时使用以下分区方案:

  • ESP32 - Minimal SPIFFS (...)
  • ESP32S3 - 8M with spiffs (...)16MB(3MB APP...)

注意:

  • 如果出现编译错误,请通过 Boards Manager 将 IDE 中的 arduino-esp32 核心库更新至最新 v3.x 版本。
  • 如果出现错误:启动失败:请检查 SD 卡是否已插入相机初始化错误 0x105,通常是由于 相机板选择错误 导致的。
  • 如果出现警告:检测到崩溃循环,请查看日志,通常是因为电源供应不足。

首次安装时,应用程序将以 Wi‑Fi AP 模式启动——连接到 SSID:ESP-CAM_MJPEG_...,以便通过 192.168.4.1 上的网页选择路由器并输入路由器密码。配置数据文件(除密码外)会自动创建,且当有互联网连接时,应用程序的网页会自动从 GitHub 下载到 SD 卡的 /data 文件夹中。

后续对应用程序或 /data 文件夹中文件的更新,可以通过 OTA 上传 选项卡完成。此外,也可以通过 编辑配置 选项卡上的 重新加载 /data 按钮,或使用 WebDAV 客户端,从 GitHub 重新加载 /data 文件夹。

@ldijkman 提供的另一种安装流程,请参见 此处

浏览器功能仅在 Chrome 浏览器上经过全面测试。

主要功能

录制可通过以下两种方式触发:一是由摄像头自身检测到运动;二是保持某个引脚处于高电平状态(松开时内部下拉电阻将其拉低),例如使用主动高电平输出的运动传感器,如 PIR(HC‑SR501)或微波雷达(CWL‑0516),或者 I2C 加速度计(MPU6050),亦或是非运动检测类传感器,如声音传感器(KY‑037)。

此外,还可以通过网页上的 开始录制 按钮手动发起录制。

要回放录制内容,首先使用侧边栏中的 播放与文件传输 按钮选择日期文件夹,再选择所需的 AVI 文件。选定 AVI 文件后,点击 开始播放 按钮即可播放录像。

开始直播 按钮则仅显示来自摄像头的实时视频流。

录制内容随后可以上传至 FTP 或 HTTPS 服务器,也可下载到浏览器并在媒体播放器(如 VLC)中播放。若需集成 FTP 或 HTTPS 服务器,请将 #define INCLUDE_FTP_HFS 设置为 true

连续录制

系统提供延时摄影功能,可与运动捕捉功能并行运行。在侧边栏的 运动检测与录制 按钮下,选择 延时摄影 按钮。延时摄影的配置可在 编辑配置 选项卡的 运动 部分进行。

延时摄影文件的命名格式为:20200130_201015_VGA_15_60_T.avi

连续录制功能会在设备开机后按顺序生成一系列文件,类似于行车记录仪的录制方式。使用 运动检测与录制 侧边栏按钮中的 行车记录仪 滑块,选择每个文件的时长(以分钟为单位)。设置完成后需先点击 保存设置 按钮,再点击 重启 ESP 才能开始录制。

将滑块值设为 0 可关闭此功能。生成的文件名格式为:20200130_201015_VGA_15_60_C.avi。连续录制期间,运动检测功能将被禁用。

延时摄影与行车记录仪功能互斥。

其他功能与配置

应用程序的操作可按如下方式动态调整,操作界面主要直观易懂,用户可通过主页面完成相关设置。

连接设置:

  • 在侧边栏的 访问设置 按钮中,可配置 Wi‑Fi/以太网、时区、FTP/HTTPS、SMTP 以及认证参数。
    • 对于 时区,可使用下拉菜单,或直接粘贴来自 此处 第二列的时区代码。
  • 若要使更改永久生效,请点击 保存 按钮。
    • 网络设置更改后,必须重启 ESP 设备。
  • 启用 mdns 域名服务,以便使用 http://[主机名] 而不是 IP 地址。

修改录制参数:

  • 分辨率 是每帧的像素尺寸。
  • 帧率 是每秒所需帧数。
  • 质量 是 JPEG 压缩级别,会影响图像文件大小。

SD 存储管理:

  • 可通过下拉列表选择要删除的文件或文件夹,然后点击 删除 按钮并确认。
  • 也可通过下拉列表选择要上传的文件或文件夹,然后点击 文件上传 按钮,将其以 AVI 格式上传至远程服务器。
  • 使用 下载 按钮可将选定的 AVI 文件从 SD 卡下载到浏览器。
  • 当 SD 卡剩余空间不足时,可删除最旧的文件夹,或将文件上传后再删除。

通过网页上的 显示日志 选项卡查看应用程序日志:

  • 可选择不同的日志类型进行显示:
    • RTC RAM:RTC RAM 中循环存储的 7KB 日志(默认)。
    • WebSocket:日志通过 WebSocket 动态输出。
    • SD 卡:无限容量的日志保存在 SD 卡上。
  • 使用滑块可启用 SD 卡日志记录,但可能会降低录制速率。
  • 可使用按钮刷新或清除所选日志。

配置网页

更多配置详情可通过“编辑配置”选项卡访问,该选项卡会显示更多按钮:

网络

  • 默认网络接口为Wi‑Fi,但也可使用以太网,方法是使用内置以太网功能的开发板,例如 CAMERA_MODEL_Waveshare_ESP32_S3_ETH,或通过连接外部W5500以太网控制器。
  • 此功能仅适用于ESP32S3开发板。
  • 重启后,所有现有服务将自动使用所选的网络接口。
  • 如果在“访问设置”侧边栏中已将网络接口设置为以太网:
    • 应用程序将以静默模式运行(Wi‑Fi和BLE关闭)。
    • 初始启动仍会准备SD卡上的/data文件夹和用户界面。
    • Wi‑Fi AP向导将被禁用;可通过设备的DHCP IP地址或mDNS http(s)://<hostname>.local访问设备(如果您的网络支持)。
    • 硬件层面支持PoE版本;电源由开发板直接提供。
    • @RedCanti贡献。
  • 如果在“访问设置”侧边栏中已将网络接口设置为Eth+AP:
    • 以太网与Wi‑Fi AP可同时启用,但它们使用独立的网络。
    • 请勿同时在两个网络上打开网页。
  • 若要使用外部W5500以太网控制器,在选择以太网或Eth+AP后,“编辑配置”选项卡中会出现一个额外的“以太网”选项卡,用于输入连接W5500以太网控制器的SPI引脚编号。

运动检测: 请参阅“通过摄像头进行运动检测”章节。

外设,例如:

  • 选择是否使用PIR或雷达传感器(这些传感器也可与摄像头运动检测并行使用)。
  • 控制摄像头的云台。
  • 连接PDM或I2S麦克风及I2S功放。
  • 连接DS18B20温度传感器。
  • 监控ADC引脚上的电池电压。
  • 在夜间深度睡眠后,通过光敏电阻唤醒。

要集成外设,请将#define INCLUDE_PERIPH设置为true

“外设”选项卡还会显示其他配置选项卡:

  • 音频:用于配置麦克风和功放。
  • 遥控配置:用于配置遥控车辆的硬件。
  • 舵机:用于配置控制摄像头和遥控转向的舵机。
  • 摄影测量控制:用于配置和控制摄影测量相关的硬件。

应用更改后,需先点击“保存”,再点击“重启ESP”,以使外设在更改生效后重新启动。

请注意,ESP32摄像头模块上的可用引脚数量有限,无法支持所有外部传感器。可使用的引脚(存在一定限制)有:3、4、12、13、26、27、32、33。

  • 引脚3:标记为U0R。仅用作输入引脚,因为它也用于固件烧录。
  • 引脚4:同时也用于板载灯。可通过移除其限流电阻来关闭灯。
  • 引脚12:仅用作输出引脚。
  • 引脚13:内部弱上拉。
  • 引脚26、27:为I2C引脚,可与摄像头共享——详见“I2C设备”章节。
  • 引脚32:用于控制摄像头的电源开关。未引出至外部,但具备电子知识的用户可根据电路图将其断开,从而使摄像头始终处于开启状态。
  • 引脚33:用于板载红色LED。未引出至外部,但可通过移除其相邻的3V3电阻和红色LED限流电阻,并在VCC引脚与红色LED限流电阻焊盘之间连接导线,从而实现对VCC引脚的再利用。

请勿使用任何其他暴露的引脚,包括PSRAM所使用的引脚16。

Freenove版的ESP32S3开发板拥有较多空闲引脚,可支持多种外设。 而XIAO Sense版的ESP32S3虽然空闲引脚较少,但仍多于ESP32。

板载LED:

  • ESP32:灯4,信号33。
  • ESP32S3:
    • Freenove:灯48,信号2。
    • XIAO:无灯,信号21。

其他: 管理SD卡、电子邮件、Telegram等。若要集成电子邮件(SMTP),请将#define INCLUDE_SMTP设置为true

启用或禁用某项功能时,应使用“保存”按钮以持久化更改,并通过“重启ESP”按钮重启ESP。

通过摄像头进行运动检测

摄像头本身可通过motionDetect.cpp文件检测运动并生成AVI录像。它会从摄像头获取任意尺寸的JPEG图像,并以1/N的比例实时采样,将这些图像解码为非常小的灰度位图,然后与前一帧样本进行比较。这种小尺寸的处理方式可以平滑图像、去除伪影,并缩短处理时间。

对于运动检测,采用较高的采样率,即每2帧检测一次。一旦检测到运动,检查运动停止的频率会降低至每10帧检测一次,以便在几乎不增加额外开销的情况下捕获JPEG图像。下表“检测时间ms”展示了从OV2640摄像头获取并解码分析一帧图像所需的大致毫秒数。

摄像头运动检测默认启用;如需禁用,请在“运动检测与录制”侧边栏按钮中取消勾选“启用运动检测”。由于JPEG解码器的限制,运动检测不适用于SXGA以上分辨率的帧大小。

摄像头首页还提供了其他选项,其中:

  • “运动灵敏度”用于设置运动检测的阈值,数值越高灵敏度越高。
  • “显示运动”:若启用并按下“开始直播”按钮,将显示运动检测的过程图像,用于校准。灰度图像中,红色像素表示运动区域。
  • “最小帧数”:指至少需要捕获多少帧图像,否则文件会被删除。

音频录制

ESP32和ESP32S3均支持I2S麦克风,例如INMP441。而PDM麦克风,例如MP34DT01,则仅在ESP32S3上支持。音频录制在ESP32S3上运行良好,但在ESP32上则不可行,因为会显著降低帧率。

音频格式为16位单声道PCM,采样率为16kHz。I2S麦克风需要3个空闲引脚,而PDM麦克风则需要2个空闲引脚(I2S SCK引脚必须设置为-1)。引脚配置值(针对XIAO Sense预设)可在配置网页的“音频”按钮下设置。

网页上有一个“麦克风增益”滑块。数值越高,麦克风增益越大。选择“0”则会取消麦克风功能。

网页上的扬声器图标按钮可用于通过浏览器收听麦克风采集的声音。

要集成音频功能,请将#define INCLUDE_AUDIO设置为true

对讲机

对讲机功能允许配备麦克风和功放/扬声器的ESP32与托管应用程序网页的设备之间进行双向通话,其中浏览器可以访问主机设备的麦克风和扬声器。访问设备麦克风可能受到安全限制,请参阅 audio.cpp。此功能仅在ESP32S3上可行,且两端需要良好的WiFi连接和空间隔离,以防止产生反馈回路。

如果安装了I2S麦克风,I2S功放只需要ESP32S3上一个空闲引脚,因为它们可以共用时钟引脚。引脚值可在配置网页的音频按钮下设置。

网页上有一个用于调节功放音量的滑块。数值越高,ESP扬声器的音量越大。选择0则会关闭扬声器。

主页面左侧显示浏览器设备麦克风和扬声器的图标。选择这些图标(若未置灰)即可激活浏览器的麦克风或扬声器。

OV5640 & OV3660

OV5640和OV3660的引脚排列与专为OV2640设计的板子兼容,但其供电电压过高,超出了内部1.5V稳压器的承受范围,因此相机容易过热,除非加装散热片。

出于录制目的,OV5640应仅与ESP32S3板子配合使用。由于内存限制,高于“FHD”分辨率的帧尺寸仅适用于拍摄静态图像。

在ESP32S3上,OV5460最高分辨率下的可录制帧率如下:

帧尺寸 FPS
QXSGA 4
WQXGA 5
QXGA 5
QHD 6
FHD 6
P_FHD 6

要在具备相应功能的模块上使用自动对焦功能,需安装ESP32_OV5640_AF库,并在appConfigs.h中设置#define INCLUDE_AF true

PY260

PY260是一款500万像素的摄像头,随M5Stack Unit CamS3 5MP模块(CAMERA_MODEL_M5STACK_CAMS3_UNIT)提供。它具有不同于Omnivision系列相机的传感器设置,具体参数在侧边栏的图片设置选项卡中定义。

辅助板

为释放摄像头板上的引脚资源,本应用可同时安装在摄像头板和辅助板上,后者负责驱动诸如BDC电机、步进电机和舵机等硬件。与辅助板的通信方式有以下两种:

  • 不再将来自应用网页的指令直接发送到摄像头板,而是将其重定向到辅助板。
  • 摄像头板通过UART连接将应用网页的指令转发到辅助板。

辅助板可用于驱动以下硬件:

  • 实时控制遥控车的速度、转向和灯光。
  • 控制摄像头的水平和垂直转动。
  • 执行摄影测量操作。

在摄像头板上按常规方式安装应用。在外设选项卡下,选择以下任一方式:

  • 在“将RC/伺服/摄影测量指令发送至辅助IP”字段中输入辅助板的IP地址,保存并重启。此后,来自摄像头板网页的相关指令将被发送到辅助板。
  • 输入UART引脚编号并选择“使用UART进行辅助连接”,保存并重启。来自摄像头板网页的相关指令将先发送到摄像头板,再由摄像头板转发到辅助板。

在辅助板上安装应用前,需在appGlobals.h中的摄像头选择模块中取消注释#define AUXILIARY。辅助板无需摄像头、SD卡或PSRAM,只需具备WiFi功能及足够的引脚来连接相关硬件即可。请注意,ESP32-C3不支持用于BDC电机的MCPWM。

辅助板上的Auxil网页是摄像头应用网页的简化版本。遥控配置伺服配置摄影测量配置选项卡下的配置信息必须在辅助板网页上输入,而不能在摄像头网页上输入。如果使用UART连接,则需在两块板的网页上分别输入相关引脚编号,并将RX与TX相连,同时确保两块板共用一个地线。

要启用此功能,需将#define INCLUDE_UART设置为true

HTTPS

默认情况下,该应用使用HTTP网页界面,但也可以配置为使用HTTPS。要启用此功能,需将#define INCLUDE_CERTS设置为true。由于mbedtls的内存占用以及应用对处理器的负载,HTTPS仅能在ESP32-S3上使用,但由于内存不足和中断看门狗复位,仍可能不稳定。此外,在访问设置中,还可以为HTTP访问定义用户登录名和密码,以提高安全性。

有关如何生成和安装证书的信息,请参阅certificates.cpp文件。为避免浏览器提示“站点不安全”,请按照certificates.cpp中的说明将服务器证书导入浏览器。

要切换HTTPS的开启或关闭状态,可点击侧边栏的访问设置按钮,并调整使用HTTPS滑块。

注意:如果HTTPS已启用但证书配置不正确,将无法访问网页,此时需要手动删除SD卡上的证书文件。

除了应用本身的HTTPS状态外,为防止在访问远程服务器时发生中间人攻击,还应开启检查证书滑块。有关如何获取远程服务器证书的信息,请参阅certificates.cpp文件。

MQTT

要启用MQTT功能,在编辑配置 -> 其他选项卡中,填写以下字段:

  • “要连接的MQTT服务器IP”
  • “MQTT主题路径前缀”
  • 可选地,“MQTT用户名”和“MQTT密码”
  • 然后将“MQTT启用”设置为开启。

如果配置不为空且Ping测试成功,MQTT将自动连接。它会向mqtt代理发送消息,例如记录开始/停止、运动检测开始/停止,发布在/status通道上。主题为:homeassistant/sensor/{esp cam hostname}/state -> {"MOTION":"ON", "TIME":"10:07:47.560"}

您还可以向/cmd通道发布控制命令,以控制摄像头。主题为:homeassistant/sensor/{esp cam hostname}/cmd -> dbgVerbose=1;framesize=7;fps=1

要启用此功能,需将#define INCLUDE_MQTT设置为true

Home Assistant MQTT摄像头集成

与Home Assistant的MQTT摄像头集成由@gemi254贡献——发送MQTT发现消息,以:

  • 在检测到运动时发布图像载荷,显示在仪表盘上。
  • 自动在MQTT设备集成中创建一个Home Assistant摄像头设备。
  • homeassistant/sensor/{esp cam hostname}/motion通道发布运动开始/停止的消息,可用于家庭自动化场景。
  • 在检测到运动时发布图像载荷,显示在仪表盘上。

要启用此功能,需将#define INCLUDE_HASIO设置为true

外部心跳

@alojzjakob 贡献,更多信息请参见 https://github.com/alojzjakob/EspSee

允许通过路由器端口转发的不同端口访问位于单个动态 IP 后的多台摄像头。另一个限制是避免使用 DDNS,因为在给定的路由器上很难或无法设置。

您将能够轻松构建包含发送到您的服务器/网站的 JSON 数据中的摄像头列表。

要启用外部心跳,在 编辑配置 -> 其他 选项卡中,填写以下字段:

  • 心跳接收器域名或 IP(例如 www.espsee.com)
  • 心跳接收器 URI(例如 /heartbeat/)
  • 心跳接收器端口(SSL 使用 443,非 SSL 使用 80,或自定义端口)
  • 可选地填写 心跳接收器认证令牌(如果您使用 EspSee,它会为您的用户账户提供认证令牌)
  • 然后设置 启用外部心跳服务器

心跳将每 30 秒(默认)发送一次。它会向定义的域名/URI(即 www.mydomain.com/my-esp32cam-hub/index.php)发送一个 POST 请求,请求体为 JSON 格式,包含您特定应用可能需要的有用信息。

如果您使用 EspSee,它会向定义的域名/URI(即 https://www.espsee.com/heartbeat/?token=[your_token])发送一个 POST 请求,请求体为 JSON 格式,包含有关您的摄像头的有用信息,使该网站能够将其与您的用户账户关联,并为您提供无需 DDNS 即可轻松访问摄像头的方法。

如果您希望从同一外部 IP 地址(位于路由器后)访问多台摄像头,您可能需要进行端口转发,并相应地在 EspSee 摄像头条目中设置端口。

要集成此功能,请将 #define INCLUDE_EXTHB 设置为 true

端口转发

要通过互联网远程访问应用程序,请在您的路由器上为浏览器的 HTTP 端口设置端口转发,例如:

image2

在远程设备上,输入网址:your_router_external_ip:10880
要获取 your_router_external_ip 值,可以使用例如 https://api.ipify.org
为您的 ESP 摄像头设备设置静态 IP 地址。
出于安全考虑,应在 访问设置 侧边栏按钮中定义 身份验证设置

请注意,某些互联网服务提供商将使用 CGNAT,这将使端口转发难以实现或根本不可能(您可能需要联系您的 ISP 并要求他们提供解决方案,如果他们愿意协助的话)。

I2C 设备

多个 I2C 设备可以共享相同的两个 I2C 引脚。由于摄像头也使用 I2C,因此其他设备可以共享摄像头的 I2C 引脚,也可以使用单独的 I2C 端口。共享 I2C 的概念由 @rjsachse 贡献。

前一种方法可以节省引脚,尤其是在 ESP32 上,但通常 ESP32 摄像头板不会暴露这些引脚,因此需要焊接一些电线。而 ESP32S3 板通常会暴露所有引脚。

图片展示了如何将电线连接到 ESP32 AI Thinker 型号摄像头上的共享 I2C 端口。橙色电线是 SDA 引脚(GPIO26),白色电线是 SCL 引脚(GPIO27)。每根电线都焊接到板上电阻器的顶部。

默认情况下,I2C 端口与摄像头共享,但可以通过在 外设 选项卡中定义替代的 SDA 和 SCL 引脚来使用单独的端口。

要集成 I2C 支持,请将 #define INCLUDE_I2C 设置为 true。 要启用特定的 I2C 设备,请在 appGlobals.h 中将相应的 #define USE_* 设置为 true

遥测记录

由于 ESP32 的性能和内存限制,此功能更适合在 ESP32S3 摄像头板上使用。

在摄像头录制期间,可以捕获环境和运动数据等遥测信息(例如来自 GY-91 板上的 BMP280 和 MPU9250)。这些数据会存储在一个单独的 CSV 文件中,以便在电子表格中呈现。CSV 文件以对应的 AVI 文件命名。同时还会创建一个以对应 AVI 文件命名的字幕文件(SRT)。CSV 和 SRT 文件会随对应的 AVI 文件一起上传或删除。下载时,AVI、CSV 和 SRT 文件会被打包成一个 ZIP 文件。如果 SRT 文件与 AVI 文件在同一文件夹中,媒体播放器将显示包含遥测数据的字幕。

用户需要将所需传感器的代码添加到 telemetry.cpp 文件中。其中包含 BMP280 和 MPU9250 设备的简单示例。

要开启遥测记录,请在 外设 按钮下选择 使用遥测记录 选项。数据采集频率由 遥测采集间隔(秒) 设置。

注意:如果使用 Adafruit 传感器库,esp-camera 库会出现 冲突

要集成此功能,请将 #define INCLUDE_TELEM 设置为 true

Telegram 机器人

只能启用 Telegram 或 SMTP 邮件中的一种。
使用 IDBot 获取您的聊天 ID。
使用 BotFather 创建 Telegram 机器人并获取机器人令牌。
编辑配置 页面的 其他 选项卡中,粘贴 Telegram 聊天标识符Telegram 机器人令牌,并选择 使用 Telegram 机器人
您可能希望将机器人设置为私密。
请注意,此功能由于使用 TLS 而会占用大量堆内存。

Telegram 机器人现在将接收来自应用程序的移动警报,显示录制画面的一帧,并附带包含相关录制文件(最大 50MB)下载链接的说明文字,用户可以下载并播放该文件。

要集成此功能,请将 #define INCLUDE_TGRAM 设置为 true

远程控制

用于对安装摄像头的设备进行远程控制,例如 FPV 用的遥控车辆等。
最适合与 ESP32-S3 一起使用,以获得更高的帧率和更灵敏的控制响应。

要启用此功能,在 编辑配置 页面的 外设 选项卡中,选择 启用远程控制,然后保存并重启。 这将显示一个额外的配置按钮 RC 配置。 按下 RC 配置 按钮后,您可以为以下设备定义引脚:

  • SG90 型转向舵机
  • H 桥电机控制(已测试 MX1508)
  • 开关灯
  • 其他车辆控制参数。

转向可以通过舵机控制实现,也可以通过分别控制左右两侧电机来实现履带式转向。

流媒体视图现在将在左上角显示一个红色按钮。点击该按钮可显示或隐藏叠加的转向和电机控制界面。摄像头视图按钮可用于切换到全屏模式。有线连接的车辆也可以通过 HW-504 型操纵杆进行控制。摄像头视图(以及麦克风和遥测,如果已启用)可以被录制。
在此之前应禁用运动检测。

此功能可以使用 辅助板

要集成此功能,请将 #define INCLUDE_PERIPH#define INCLUDE_MCPWM 设置为 true

仅当您熟悉编程和电子技术,并能自行解决问题时才使用此功能

机器学习

机器学习人工智能可用于进一步判断在检测到运动时是否应保存录像,方法是分类画面中的物体是否为感兴趣的对象,例如人、特定类型的动物、车辆等。

由于内存占用和内置AI加速支持的限制,此功能仅在ESP32S3上可行。

请仅在熟悉机器学习的情况下使用此功能

该界面设计用于与由Edge Impulse AI平台打包成Arduino库的用户模型配合使用。 更多详情请参阅appGlobals.h

请使用96×96像素的灰度或RGB图像,并使用以下迁移学习神经网络设置训练模型:

相机中心

此选项卡允许访问其他ESP32-CAM_MJPEG2SD相机设备的网页界面。要显示此选项卡,在“编辑配置”页面的“其他”部分中,选择“显示相机中心选项卡”。

在该选项卡中,输入另一台相机的IP地址并按下“添加IP”按钮,系统将显示该相机的图像,并在其上叠加IP地址。对每台需要监控的相机重复此操作。单击某张图像即可打开该相机的网页。

点击图像上的“X”图标可移除该IP地址。按下“删除全部”按钮可移除所有IP地址。按下“刷新”按钮可更新每个屏幕,显示来自相应相机的最新图像。

这些IP地址存储在浏览器的本地存储中,而非应用程序本身。

向NVR流式传输

鉴于ESP32的性能和内存限制,此功能更适合在ESP32S3相机板上使用。

可以使用HTTP或RTSP协议,但不能同时使用。RTSP更为复杂。

流媒体性能取决于网络连接质量,但可通过关闭运动检测来提升,因为在流媒体过程中如果发生录制,录制会优先进行,可能导致流媒体卡顿。

RTSP

这需要安装一个额外的库——有关详细信息,请参阅RTSPServer库。必须是1.3.1版本或更高。

要将该库集成到本应用中,需将#define INCLUDE_RTSP设置为true

要启用RTSP,在“编辑配置”->“流媒体”选项卡中,选择:

  • 启用RTSP视频以开启视频流
  • 启用RTSP音频以开启音频流(需提前设置麦克风)。
  • 启用RTSP字幕以开启字幕流(需提前设置遥测,否则仅输出时间戳和FPS)。

然后保存并重启。要观看流媒体,使用支持RTSP的应用程序连接至rtsp://<camera_ip>:<RTSPport>

若启用了身份验证(用户名和密码): rtsp://<RTSPuser>:<RTSPpass>@<camera_ip>:<RTSPport>

RTSP现在支持多客户端组播。您也可以通过注释掉rtsp.cpp中的//#define OVERRIDE_RTSP_SINGLE_CLIENT_MODE来覆盖此逻辑,从而为所有传输方式(TCP、UDP、组播)启用多客户端。然而,为所有传输方式启用多客户端可能会降低流速并引发问题,因此请谨慎使用。为了获得最佳效果,建议在使用TCP或UDP单播时仍只保留一个客户端。更多详情,请参阅RTSPServer库中的README文件。

HTTP

如果#define INCLUDE_RTSP设置为false,则可使用HTTP流媒体。

独立于网页浏览器的流媒体可供远程NVR捕获。要启用这些流媒体,在“编辑配置”->“流媒体”选项卡中,选择:

  • 在/sustain?video=1上启用视频流以获取MJPEG流
  • 在/sustain?audio=1上启用音频流以获取WAV流(需提前设置麦克风)。
  • 在/sustain?srt=1上启用字幕流以获取SRT流(需提前设置遥测,否则仅输出时间戳)。

然后保存并重启。

如果启用了多个流,它们需要通过中间工具进行同步处理,例如go2rtc(但目前尚不支持字幕处理)。有关go2rtc的配置示例,请参阅ESP32-CAM_Audio

WebDAV

内置了一个简单的WebDAV服务器。可以使用Windows 10文件资源管理器等WebDAV客户端访问和管理SD卡内容。在文件夹地址栏中输入<ip_address>/webdav,例如192.168.1.132/webdav

对于Windows 11、Android、macOS、Linux,请参阅webDav.cpp文件。

要启用此功能,需将#define INCLUDE_WEBDAV设置为true

摄影测量

ESP可用于拍摄小型物体的一系列照片,通过步进电机驱动的转盘进行控制;既可以使用ESP自带摄像头拍摄低分辨率图像,也可以使用由ESP远程控制的单反相机拍摄高分辨率图像。拍摄的图像可用于生成3D模型。

要启用此功能,在“编辑配置”页面的“外设”部分中,选择“启用摄影测量”,然后保存并重启。

此时将出现一个额外的配置按钮“PG Config”。点击该按钮将显示用于控制摄影测量过程的选项。

此功能可以与辅助板配合使用。

更多信息请参阅photogram.cpp文件。要启用此功能,需将#define INCLUDE_PGRAM设置为true

版本历史

v10.9.32026/04/02
v10.9.22026/01/28
v10.9.12026/01/15
v10.8.32025/09/21
v10.8.02025/08/26
v10.6.22025/06/12
v10.5.42025/01/29
v9.9.42024/08/26
v9.7.32024/06/16
v9.1.22023/11/24
V8.82023/10/12

常见问题

相似工具推荐

openclaw

OpenClaw 是一款专为个人打造的本地化 AI 助手,旨在让你在自己的设备上拥有完全可控的智能伙伴。它打破了传统 AI 助手局限于特定网页或应用的束缚,能够直接接入你日常使用的各类通讯渠道,包括微信、WhatsApp、Telegram、Discord、iMessage 等数十种平台。无论你在哪个聊天软件中发送消息,OpenClaw 都能即时响应,甚至支持在 macOS、iOS 和 Android 设备上进行语音交互,并提供实时的画布渲染功能供你操控。 这款工具主要解决了用户对数据隐私、响应速度以及“始终在线”体验的需求。通过将 AI 部署在本地,用户无需依赖云端服务即可享受快速、私密的智能辅助,真正实现了“你的数据,你做主”。其独特的技术亮点在于强大的网关架构,将控制平面与核心助手分离,确保跨平台通信的流畅性与扩展性。 OpenClaw 非常适合希望构建个性化工作流的技术爱好者、开发者,以及注重隐私保护且不愿被单一生态绑定的普通用户。只要具备基础的终端操作能力(支持 macOS、Linux 及 Windows WSL2),即可通过简单的命令行引导完成部署。如果你渴望拥有一个懂你

349.3k|★★★☆☆|1周前
Agent开发框架图像

stable-diffusion-webui

stable-diffusion-webui 是一个基于 Gradio 构建的网页版操作界面,旨在让用户能够轻松地在本地运行和使用强大的 Stable Diffusion 图像生成模型。它解决了原始模型依赖命令行、操作门槛高且功能分散的痛点,将复杂的 AI 绘图流程整合进一个直观易用的图形化平台。 无论是希望快速上手的普通创作者、需要精细控制画面细节的设计师,还是想要深入探索模型潜力的开发者与研究人员,都能从中获益。其核心亮点在于极高的功能丰富度:不仅支持文生图、图生图、局部重绘(Inpainting)和外绘(Outpainting)等基础模式,还独创了注意力机制调整、提示词矩阵、负向提示词以及“高清修复”等高级功能。此外,它内置了 GFPGAN 和 CodeFormer 等人脸修复工具,支持多种神经网络放大算法,并允许用户通过插件系统无限扩展能力。即使是显存有限的设备,stable-diffusion-webui 也提供了相应的优化选项,让高质量的 AI 艺术创作变得触手可及。

162.1k|★★★☆☆|1周前
开发框架图像Agent

everything-claude-code

everything-claude-code 是一套专为 AI 编程助手(如 Claude Code、Codex、Cursor 等)打造的高性能优化系统。它不仅仅是一组配置文件,而是一个经过长期实战打磨的完整框架,旨在解决 AI 代理在实际开发中面临的效率低下、记忆丢失、安全隐患及缺乏持续学习能力等核心痛点。 通过引入技能模块化、直觉增强、记忆持久化机制以及内置的安全扫描功能,everything-claude-code 能显著提升 AI 在复杂任务中的表现,帮助开发者构建更稳定、更智能的生产级 AI 代理。其独特的“研究优先”开发理念和针对 Token 消耗的优化策略,使得模型响应更快、成本更低,同时有效防御潜在的攻击向量。 这套工具特别适合软件开发者、AI 研究人员以及希望深度定制 AI 工作流的技术团队使用。无论您是在构建大型代码库,还是需要 AI 协助进行安全审计与自动化测试,everything-claude-code 都能提供强大的底层支持。作为一个曾荣获 Anthropic 黑客大奖的开源项目,它融合了多语言支持与丰富的实战钩子(hooks),让 AI 真正成长为懂上

159.3k|★★☆☆☆|今天
开发框架Agent语言模型

ComfyUI

ComfyUI 是一款功能强大且高度模块化的视觉 AI 引擎,专为设计和执行复杂的 Stable Diffusion 图像生成流程而打造。它摒弃了传统的代码编写模式,采用直观的节点式流程图界面,让用户通过连接不同的功能模块即可构建个性化的生成管线。 这一设计巧妙解决了高级 AI 绘图工作流配置复杂、灵活性不足的痛点。用户无需具备编程背景,也能自由组合模型、调整参数并实时预览效果,轻松实现从基础文生图到多步骤高清修复等各类复杂任务。ComfyUI 拥有极佳的兼容性,不仅支持 Windows、macOS 和 Linux 全平台,还广泛适配 NVIDIA、AMD、Intel 及苹果 Silicon 等多种硬件架构,并率先支持 SDXL、Flux、SD3 等前沿模型。 无论是希望深入探索算法潜力的研究人员和开发者,还是追求极致创作自由度的设计师与资深 AI 绘画爱好者,ComfyUI 都能提供强大的支持。其独特的模块化架构允许社区不断扩展新功能,使其成为当前最灵活、生态最丰富的开源扩散模型工具之一,帮助用户将创意高效转化为现实。

108.3k|★★☆☆☆|1周前
开发框架图像Agent

gemini-cli

gemini-cli 是一款由谷歌推出的开源 AI 命令行工具,它将强大的 Gemini 大模型能力直接集成到用户的终端环境中。对于习惯在命令行工作的开发者而言,它提供了一条从输入提示词到获取模型响应的最短路径,无需切换窗口即可享受智能辅助。 这款工具主要解决了开发过程中频繁上下文切换的痛点,让用户能在熟悉的终端界面内直接完成代码理解、生成、调试以及自动化运维任务。无论是查询大型代码库、根据草图生成应用,还是执行复杂的 Git 操作,gemini-cli 都能通过自然语言指令高效处理。 它特别适合广大软件工程师、DevOps 人员及技术研究人员使用。其核心亮点包括支持高达 100 万 token 的超长上下文窗口,具备出色的逻辑推理能力;内置 Google 搜索、文件操作及 Shell 命令执行等实用工具;更独特的是,它支持 MCP(模型上下文协议),允许用户灵活扩展自定义集成,连接如图像生成等外部能力。此外,个人谷歌账号即可享受免费的额度支持,且项目基于 Apache 2.0 协议完全开源,是提升终端工作效率的理想助手。

100.8k|★★☆☆☆|1周前
插件Agent图像

markitdown

MarkItDown 是一款由微软 AutoGen 团队打造的轻量级 Python 工具,专为将各类文件高效转换为 Markdown 格式而设计。它支持 PDF、Word、Excel、PPT、图片(含 OCR)、音频(含语音转录)、HTML 乃至 YouTube 链接等多种格式的解析,能够精准提取文档中的标题、列表、表格和链接等关键结构信息。 在人工智能应用日益普及的今天,大语言模型(LLM)虽擅长处理文本,却难以直接读取复杂的二进制办公文档。MarkItDown 恰好解决了这一痛点,它将非结构化或半结构化的文件转化为模型“原生理解”且 Token 效率极高的 Markdown 格式,成为连接本地文件与 AI 分析 pipeline 的理想桥梁。此外,它还提供了 MCP(模型上下文协议)服务器,可无缝集成到 Claude Desktop 等 LLM 应用中。 这款工具特别适合开发者、数据科学家及 AI 研究人员使用,尤其是那些需要构建文档检索增强生成(RAG)系统、进行批量文本分析或希望让 AI 助手直接“阅读”本地文件的用户。虽然生成的内容也具备一定可读性,但其核心优势在于为机器

93.4k|★★☆☆☆|1周前
插件开发框架