摄像头的使用

Tutorial: 卓越工程师 Category: 嵌入式 Published: 2026-10-23 11:05:29 Views: 1 Likes: 0 Comments: 0

290.8.摄像头的使用

#define CAMERA_MODEL_AI_THINKER  // 选择视频所用 AI Thinker ESP32-CAM 的摄像头引脚配置。
const char* ssid = "302";        // 记录视频演示的手机热点名称;复现时改成自己的热点名称。
const char* password = "12345678"; // 记录视频演示的热点密码;复现时改成自己的热点密码。

一、摄像头的使用

本节使用 Arduino IDE 自带的 CameraWebServer 示例,让 AI Thinker ESP32-CAM 连接手机热点,再用同一热点下的电脑浏览器查看摄像头画面。上方仅摘录视频中实际选择、填写的三条业务代码,保留其名称和值并逐行加注;它们分布在示例原有的不同位置,不是可以单独编译运行的完整程序。视频中的 302 和 12345678 只是演示用热点信息,实际使用必须与自己的网络一致,也不宜沿用这个简单密码。Espressif 旧版示例

1.1 功能演示

  • ESP32-CAM 主板负责运行程序、采集图像并提供网页;前端的小摄像头经柔性排线与主板连接。镜头把光投到图像传感器上,传感器将光转换为图像数据,ESP32 再把图像送给访问网页的设备。因此“摄像头”不只是镜头,排线和接口接触不良也可能导致采集失败。检查排线、卡扣或镜头保护膜时应先断电,不要带电插拔。
  • 本节实现的是局域网内实时查看:网页打开后点击 Start Stream 才开始持续显示画面。它没有演示录像、云端存储、远程公网监控或自动上传照片;手机热点提供连接通道,并不替 ESP32-CAM 采集或托管网页。
  • 开始前确认使用的是视频中的 AI Thinker 型 ESP32-CAM,并已按前几节准备好摄像头排线、可靠供电和 USB 转串口烧录连接。视频在 Arduino IDE 顶部选择的板型名称是 AI Thinker ESP32-CAM,它是IDE 的开发板选择;下面的摄像头型号宏是示例中的引脚配置选择,二者需要分别核对。

1.2 项目工具

  1. Arduino IDE 中选 文件 → 示例 → ESP32 → Camera → CameraWebServer,打开 ESP32 开发板包自带的摄像头网页示例。视频可见 CameraWebServer.ino、app_httpd.cpp、camera_index.h、camera_pins.h 等标签;课堂只改主草图中的摄像头型号与热点信息,不需要把其他示例/库文件抄成自己的业务代码。
  2. 选择开发板 AI Thinker ESP32-CAM 和实际 USB 转串口设备对应的 COM 口。视频把原来有效的 WROVER KIT 型号行注释掉,使 #define CAMERA_MODEL_AI_THINKER 成为有效的型号定义;不能同时启用两个摄像头型号。它会让 camera_pins.h 采用该板的摄像头信号引脚映射,例如时钟、图像数据线及同步线,而不只是更改网页显示的名字。Espressif 示例引脚定义
  3. 在主草图填手机热点的 SSID 和密码。视频最终画面对应第 22、23 行;原笔记的“第 21、26 行”“ait link”是识别/定位错误,准确名称是 AI Thinker。不同开发板包版本会调整示例结构和行号,应按变量名、型号名查找,不要只盯固定行号;较新版本的型号选择可能移到了 board_config.h。视频对应的旧版示例、当前示例配置文件

1.3 代码修改

  • 课堂所说的“两处”,指型号选择和Wi-Fi 凭据配置两类修改;若按具体有效代码行数数,则是上方宏定义加 SSID、密码共三行。注释掉错误板型、启用 AI Thinker 后,只把字符串换成自己的热点名称和密码,示例其余网页服务器、摄像头初始化逻辑沿用原版,不擅自补写函数。
  • 手机开启热点后,让电脑接入该热点。ESP32-CAM 按 ssid/password 连接同一个热点,属于 Wi-Fi STA(客户端)模式;手机在这里是 AP(接入点)。原版 ESP32 使用 2.4 GHz Wi-Fi,如果热点仅开放 5 GHz,板子可能找不到它;复现时可检查热点是否提供 2.4 GHz 网络。Espressif Arduino Wi-Fi 文档、ESP32 规格
  • 热点名称不要求“越简单越好”才能运行,关键是大小写、空格、密码都与代码一致。简单 ASCII 名称只是在初次实验时便于排除输入错误。此处的密码是加入 Wi-Fi 的密码,不是网页账号密码。

1.4 程序下载

  1. 延续前课的 USB 转串口烧录接法,先核对供电、共地、TX/RX 交叉连接和 COM 口。对于需手动进入下载模式的板子,IO0/GPIO0 临时接 GND,复位后再上传;它是在复位时采样的启动模式脚,按复位并不等于自动开始烧录。IDE 编译和写入摄像头示例可能需要等待一会儿,视频中的“代码多、下载较慢”是一次演示体验,并非固定耗时。Espressif 启动模式说明
  2. IDE 显示烧录完成后,断开的是 IO0—GND 下载模式跳线,不是把供电和串口线全部拔掉;再按开发板复位键,让已写入的程序正常启动。若 IO0 仍被拉低,复位后可能再次进入下载模式而不运行摄像头示例。
  3. 打开 Arduino IDE 的串口监视器,设为 115200 波特率并复位。视频依次看到 WiFi connected、网页服务端口 80、视频流端口 81,最后提示 Camera Ready! Use 'http://192.168.28.134' to connect。192.168.28.134 只是那次手机热点分配给板子的局域网 IP;重连或换热点后可能变,须以自己串口监视器显示的地址为准。浏览器输入完整的 http://板子当前IP,不必在地址栏手填视频流端口。Espressif 旧版示例、网页/流服务实现

1.5 网页调节画面

  • 电脑浏览器访问板子 IP 后,先出现摄像头控制页面;视频点击 Start Stream 后才看见连续图像,继续点击可停止。Get Still 是抓取单帧,Start Stream 是持续显示,两者不要混为一谈。视频演示了亮度、画面上下翻转(V-Flip)和水平镜像(H-Mirror)等设置;也可按实际页面尝试分辨率、对比度等控件,但不同传感器/示例版本不保证每个选项都有相同效果。
  • 调高分辨率、降低 JPEG 压缩通常增加单帧数据量,也可能增加内存/无线传输负担,画面不一定更流畅。摄像头驱动文档特别提醒:除低分辨率 JPEG 外,更高配置通常依赖启用 PSRAM(板上的外部内存,用来容纳较大的图像帧)。视频所用 AI Thinker 配置在示例中标为带 PSRAM;不应把所有 ESP32-CAM 外形板都视为相同配置。Espressif 摄像头驱动说明、旧版示例
  • 串口监视器在播放时显示 MJPG、帧大小、每帧耗时、fps/平均帧率等诊断文字;真正的画面显示在浏览器,不会“同步显示在串口窗口”。fps 表示大致每秒传送的画面帧数,会随分辨率、网络与处理时间变化。Espressif 示例流处理代码
  • **无法看到画面时分层排查:**若串口无 WiFi connected,先查热点名称/密码、2.4 GHz 及供电;若串口有 IP 而网页打不开,查电脑是否接入同一热点、地址是否输对以及热点是否限制设备互访;若网页能开但点 Start Stream 后没有图像,再查是否选对摄像头型号、排线是否插稳、供电是否可靠及串口有没有摄像头初始化报错。不能仅凭“没有画面”就判定摄像头损坏。视频口述推荐安信可板可作为选购建议,但品牌本身不是排障结论。

1.6 原理分析

本次示例实际的数据路径是:摄像头采集图像 → 示例取得 JPEG 图像帧 → ESP32-CAM 提供网页和图像帧 → 经手机热点形成的局域网 → 电脑浏览器显示。手机热点承担 Wi-Fi 接入与局域网转发,电脑和 ESP32-CAM 都是它的接入设备;ESP32-CAM 才是本例的 HTTP 网页/视频流服务器,浏览器是发请求并显示结果的客户端。ESP32 获得本地 IP 后,浏览器向该 IP 发 HTTP 请求;点击播放后,示例通过连续发送 JPEG 图像帧构成 MJPEG 流,所以浏览器看起来像实时视频。仅在同一可互访的局域网中查看不要求额外的云端服务器,也不代表可以从公网直接访问。Espressif 摄像头驱动说明、Wi-Fi 文档、旧版示例主程序、MJPEG 响应实现

视频末尾 PPT 另画了 microdot/uPython 接口、Flask/Python 后端、上传并存储照片等扩展示意架构,但本节实际运行的是 Arduino CameraWebServer:串口明确打印板上网页服务器和流服务器端口,课堂没有搭建 Python 后端或照片存储服务。因此不能照 PPT 把“手机是服务器”、外部 Flask 服务器和自动上传图片写成这次实验已实现的功能。演示网页使用 http://,热点密码也不等于网页登录认证;只应在可信的本地网络中实验,勿未经额外防护就将摄像头服务映射到公网。

核对依据