跳过导航,直接进入主要内容跳过导航,直接进入主要内容跳过导航,直接进入主要内容

API 概述

ESP32-S3 摄像头监控固件 REST API 文档

状态查询 | 配置接口 | 文件管理 | 设备控制 | 视频流 | WiFi 扫描 | 完整示例


本固件基于 web_server.c、mjpeg_streamer.c、config_manager.c 源码编写,最后更新:2026-07-21。

基础地址

模式 地址
AP 模式(默认) http://192.168.4.1
STA 模式 http://<设备IP>

认证机制

契约 v1.9(2026-09-18)起的固件没有设备级密码——Web 管理密码(X-Password 请求头 / ?password= 查询参数 / web_password 配置键)已移除。所有 HTTP 端点在可信局域网内开放,信任边界是路由器的 WPA2。

统一响应格式

所有 API 接口返回 Content-Type: application/json,格式统一为:

成功响应:

{
  "ok": true,
  "data": { ... }
}

错误响应:

{
  "ok": false,
  "error": "错误描述信息"
}

注意:POST /api/config 成功时返回 {"ok": true},不含 data 字段。

CORS 跨域支持

所有 HTTP 响应(包括错误响应和静态文件)均包含以下 CORS 头:

Access-Control-Allow-Origin: *
Access-Control-Allow-Methods: GET, POST, DELETE, OPTIONS
Access-Control-Allow-Headers: Content-Type

OPTIONS 请求(预检请求)返回上述 CORS 头和空响应体,状态码 200。

接口总览

#RJ|| # | 方法 | 路径 | 描述 | #YY| #SR||---|------|------|------| #SV| #RM|| 1 | GET | /api/status | 否 | 获取设备状态 | #HQ| #NQ|| 2 | GET | /api/config | 否 | 获取当前配置 | #JW| #RV|| 3 | POST | /api/config | 更新配置 | #PX| #YB|| 4 | GET | /api/files | 否 | 获取录制文件列表 | #KB| #HZ|| 5 | DELETE | /api/files?name=xxx | 删除指定文件 | #YR| #WM|| 6 | POST | /api/files/batch | 批量删除文件 | #WR| #QN|| 7 | GET | /api/download?name=xxx | 否 | 下载指定文件 | #KR| #VY|| 8 | GET | /api/scan | 否 | 扫描 WiFi 网络 | #VS| #JS|| 9 | POST | /api/time | 手动设置系统时间 | #QT| #BM|| 10 | POST | /api/record?action=start\|stop | 控制录像 | #JZ| #HH|| 11 | POST | /api/reset | 恢复出厂设置 | #MS| #MZ|| 12 | POST | /api/ota | OTA固件升级 | #ZT| #RZ|| 13 | POST | /api/format | 格式化SD卡 | #BP| #QP|| 14 | GET | /metrics | 否 | Prometheus 监控指标(文本格式) | #SR| #YY|| 15 | GET | /setup | 否 | 首次WiFi配置向导页面 | #PJ| #SQ|| 16 | GET | /ota | 否 | OTA固件升级页面 | #HT| #TS|| 17 | GET | /* | 否 | 静态文件(Web UI) | #PV| #PS|| 18 | OPTIONS | /* | 否 | CORS 预检请求 | #NJ| #SQ|| 19 | POST | /onvif/device_service | 否 | ONVIF 设备服务(SOAP) | #BJ|| 20 | POST | /onvif/media_service | 否 | ONVIF 媒体服务(SOAP) | #PS| | RTSP | rtsp://<IP>:554/stream | 否 | MJPEG+G.711 双轨道流 | | MJPEG | http://<IP>:81/stream | 否 | MJPEG 实时视频流(仅视频) | | 音频 | http://<IP>/api/audio | 否 | HTTP 分块 G.711 μ-law 音频流(网页预览用) |

注意:RTSP 提供音视频双轨道,适用于 NVR 集成。MJPEG(端口 81)仅支持视频。 #TX|## HTTP 状态码

HTTP 状态码

状态码 含义 触发场景
200 成功 请求处理成功
400 请求错误 参数缺失、JSON 格式错误、路径遍历检测
404 资源不存在 文件不存在、静态文件未找到
500 服务器内部错误 WiFi 扫描失败、时间设置失败
503 服务不可用 MJPEG 流客户端连接数已达上限

附录

SD 卡路径

用途 路径
录制文件 /sdcard/recordings/

配置优先级

SD 卡配置文件 > NVS 存储 > 编译时默认值

SPIFFS 分区

Web 界面静态文件存储在 SPIFFS 分区(约 256KB),路径前缀 /spiffs/。

服务器配置

参数 值
端口 80
最大 URI 处理器 20
任务栈大小 8192 字节
接收超时 30 秒
发送超时 30 秒
URI 匹配模式 通配符(wildcard)

/api/status 响应字段

/api/status 返回包含以下字段的 JSON:

{
  "ok": true,
  "data": {
    "recording": false,
    "wifi_state": "STA_CONNECTED",
    "sd_available": 75.5,
    "sd_total": 29.7,
    "sd_free_percent": 75.5,
    "camera_sensor": "OV2640",
    "camera_res": "SVGA",
    "camera_quality": 12,
    "chip_temp": 42.5,
    "free_heap": 185432,
    "free_psram": 4194304,
    "timelapse_mode": "normal",

    "motion_score": 0,

    "firmware_version": "0.4.0",

    "upload_queue": 0,

    "last_upload": "",

    "frames_dropped": 0
  }
}

新增字段:chip_temp

  • 类型:number(温度,摄氏度)
  • 范围:20-80°C(ESP32-S3 典型工作范围)
  • 说明:ESP32-S3 内核温度
  • 新增版本:支持温度监控功能的版本

/api/files/batch - 批量文件操作

批量删除录制文件,单次请求可删除多个文件。

请求:

{
  "names": ["file1.avi", "file2.avi", "file3.avi"]
}

响应:

{
  "ok": true,
  "data": {
    "deleted": 2,
    "failed": 1
  }
}

/metrics - Prometheus 监控指标

以 Prometheus text exposition 格式暴露设备指标,供外部监控系统使用。

请求:GET /metrics

响应:text/plain

可用指标:

# HELP esp_free_heap_bytes Free heap memory bytes
# TYPE esp_free_heap_bytes gauge
esp_free_heap_bytes 185432

# HELP esp_free_psram_bytes Free PSRAM memory bytes
# TYPE esp_free_psram_bytes gauge
esp_free_psram_bytes 4194304

# HELP esp_chip_temp_celsius ESP32-S3 chip temperature
# TYPE esp_chip_temp_celsius gauge
esp_chip_temp_celsius 42.5

# HELP esp_recording_state Recording state (0=IDLE, 1=RECORDING, 2=PAUSED, 3=ERROR)
# TYPE esp_recording_state gauge
esp_recording_state 0

# HELP sd_free_bytes SD card free bytes
# TYPE sd_free_bytes gauge
sd_free_bytes 22385920

# HELP sd_total_bytes SD card total bytes
# TYPE sd_total_bytes gauge
sd_total_bytes 31457280

# HELP sd_free_percent SD card free percentage
# TYPE sd_free_percent gauge
sd_free_percent 71.1

# HELP wifi_state WiFi state (0=AP, 1=STA_CONNECTING, 2=STA_CONNECTED, 3=STA_DISCONNECTED)
# TYPE wifi_state gauge
wifi_state 2

# HELP upload_queue_size NAS upload queue size
# TYPE upload_queue_size gauge
# HELP upload_queue_size NAS upload queue size
# TYPE upload_queue_size gauge
upload_queue_size 0

# HELP esp_uptime_seconds ESP32-S3 uptime in seconds
# TYPE esp_uptime_seconds gauge
esp_uptime_seconds 3600

# HELP esp_min_free_heap_bytes Minimum free heap memory bytes since boot
# TYPE esp_min_free_heap_bytes gauge
esp_min_free_heap_bytes 150000

# HELP esp_wifi_rssi_dbm WiFi RSSI in dBm
# TYPE esp_wifi_rssi_dbm gauge
esp_wifi_rssi_dbm -45

# HELP esp_upload_success_total Total successful uploads
# TYPE esp_upload_success_total counter
esp_upload_success_total 42

# HELP esp_upload_failure_total Total failed upload attempts
# TYPE esp_upload_failure_total counter
esp_upload_failure_total 3

共 15 项指标(9 项原有 + 6 项新增)。

Prometheus 抓取配置:

scrape_configs:
  - job_name: 'esp32-cam'
    scrape_interval: 15s
    static_configs:
      - targets: ['192.168.1.100:80']

POST /api/ota - OTA 固件升级

从URL触发固件升级。

请求体:


{"url": "https://example.com/firmware/mibee_cam.bin"}

响应:


{"ok": true, "data": {"message": "OTA更新已启动,设备将重启..."}}

WebSocket 实时推送

设备在根路径 / 提供WebSocket连接,用于Web UI仪表盘实时更新。

事件:

  • {"type":"status","data":{...}} 状态更新(每5秒)

  • {"type":"motion","data":{"score":30}} 运动检测事件

可访问性增强功能已加载,支持焦点管理、键盘导航和屏幕阅读器
页面已加载完成,可访问性功能已启用
页面已加载完成,可访问性功能已启用