esp32cam点灯
287.5.esp32cam点灯
void setup() { // 定义上电或复位后由 Arduino 框架调用一次的初始化函数。
pinMode(4,OUTPUT); // 将 GPIO4 配置为数字输出,用来控制板载闪光灯。
digitalWrite(4,LOW); // 先把 GPIO4 输出低电平,使闪光灯处于熄灭状态。
} // 初始化结束,接下来进入反复执行的 loop 函数。
void loop() { // 定义不断重复的点灯流程。
digitalWrite(4,HIGH); // GPIO4 输出高电平,点亮 ESP32-CAM 的白色闪光灯。
delay(2000); // 保持当前亮灯状态 2000 毫秒,即约 2 秒。
digitalWrite(4,LOW); // GPIO4 输出低电平,熄灭闪光灯。
delay(2000); // 保持灭灯状态约 2 秒,然后从 loop 顶部重新点亮。
} // 本轮结束;框架会再次调用 loop,持续交替亮灭。
一、ESP32-CAM点灯
本节沿用第 285 节配置的 AI Thinker ESP32-CAM 板型和第 286 节的 USB 转 TTL 烧录连接,通过 GPIO4 控制板上已有的白色闪光灯。上方代码按视频最终画面抄录,移除了 IDE 自动生成的英文注释和视频原有的“延迟 2s”注释,只增加逐行讲解;没有添加视频未写的变量、库、外接 LED 或其他功能。原笔记的“ESP3CAN”“GPL4”“四迎交口”分别应为 ESP32-CAM、GPIO4 和 I/O(输入/输出)接口。
1.1 Arduino的基本数字输入输出
1.1.1 pinMode
pinMode(pin, mode)用于设置某个 GPIO 的工作模式,没有返回值。本节pin=4指 GPIO4,不是“开发板上的第 4 个排针”;OUTPUT表示该脚由程序主动输出高、低电平。pinMode(4,OUTPUT);放在只执行一次的setup()里,不必在每次亮灭时重复配置。- 视频 PPT 列出的常见模式有
INPUT(输入)、OUTPUT(输出)和INPUT_PULLUP(带内部上拉的输入)。输入模式适合接收按键、传感器等信号;上拉输入可使外部开关断开时的引脚保持确定的高电平,避免“悬空”时读数乱跳。这里要驱动灯,所以选择OUTPUT。PPT 的三种模式是本节的入门范围,不是说所有板卡只支持这三种模式。 - 视频对照引脚图指出 ESP32-CAM 摄像头附近的白色闪光灯由 GPIO4 控制。该 LED 已焊在板上,本实验不用另接一颗 LED。板上还有其他指示灯,不能只看“板上有灯”就随意改成其他 GPIO。GPIO4 也连到 microSD 卡的数据线,因此今后若启用 SD 卡,尤其使用四线数据模式,必须重新考虑这个复用关系;本节没有使用 SD 卡。
setup()中紧跟着digitalWrite(4,LOW);,是给已经设为输出的 GPIO4 一个明确的低电平,使灯在初始化这一步熄灭。它不是“等待两秒后才点亮”:setup()一结束,第一次loop()马上把 GPIO4 拉高;上电、复位到程序接管 GPIO 之前也不保证灯永远不会短暂闪一下。
1.1.2 digitalRead
- PPT 的
digitalRead(pin)用来读取数字输入脚当前是HIGH还是LOW,例如读取按键状态;它不能命令引脚输出低电平。原笔记把初始化低电平的调用写成digitalRead,与视频实际代码不符,正确调用是digitalWrite(4,LOW)。 - 读和写可以这样区分:
digitalRead是“板子看外部信号”,digitalWrite是“板子向外输出电平”。虽然 GPIO 在很多情况下可配置为输入或输出,同一个 API 仍要按任务选用。本节只输出控制闪光灯,代码中没有digitalRead()。
1.1.3 digitalWrite
digitalWrite(pin, value)中的value使用大写常量HIGH或LOW,不是原笔记写的hi。因为 GPIO4 已配置为OUTPUT,digitalWrite(4,HIGH)将其拉到高电平,使本板的白色闪光灯点亮;digitalWrite(4,LOW)将其拉到低电平,灯熄灭。这是 ESP32-CAM 板载闪光灯的接法和现象,不能推广成“所有 LED 都是高电平亮”:若换了外部接线或其他板载 LED,亮灭极性应查相应原理图。- 从电路角度看,GPIO4 输出的是控制电平,板上的闪光灯电路包含 LED 及配套驱动/限流元件;有合适的供电并形成电流回路时,LED 才发光。本节控制的是已经接好的板载电路,不应把裸 LED 不加限流地直接接到 GPIO 上,也不应把电机等大负载直接接到 GPIO4。若灯不亮,除了代码,还要查板型、供电、烧录是否真正成功和实物板型是否相符。
delay(2000)的单位是毫秒:2000 ms = 2 s。视频口述和原笔记把单位说成“微秒”是错的;要按微秒计时应是另一个接口delayMicroseconds(),但本节并未使用它。第一次delay(2000)保持亮,第二次保持灭,所以一轮是亮约 2 秒 + 灭约 2 秒 ≈ 4 秒,不是整轮只有 2 秒。delay()会暂停当前这段loop()业务代码继续往下执行,适合此处最简单的演示;这里不擅自换成非阻塞写法。
1.1.4 烧录
- 沿用上一节的接法:USB 转 TTL 的
TXD接 ESP32-CAM 的U0R/GPIO3,RXD接U0T/GPIO1,GND共地,按模块和板子标识提供合适的5V板级供电。上电前确认极性与串口信号电平;白色闪光灯无需外接线。烧录时还要用临时跳线将GPIO0/IO0接到GND,让它在复位瞬间进入下载模式。 - Arduino IDE 中选择 AI Thinker ESP32-CAM 和实际出现的 COM 口,点击“上传”。IDE 先编译,再通过串口连接并写入程序。若停在
Connecting...,在确认 GPIO0 已接地且板子有电之后,按一下板上的Reset让 ESP32 重新采样启动电平。视频中一次尝试失败后重新上传,提醒不要连续乱按复位键;这应理解为复位时机要合适,而非“双击复位必然导致上传失败”的通用规律。 - 等待写入、校验结束并看到 IDE 的“上传完成”,再移除 GPIO0 到 GND 的那根下载模式跳线,按一次
Reset(或重新上电),开发板才会从已烧录的 Flash 正常运行。原笔记的“拔掉烧录线”若被理解为拔掉所有 USB 转 TTL 供电线,板子也会断电,灯当然不会继续闪;若要完全脱离烧录器运行,须先安排另一套符合板子规格的供电。拔插导线时最好先断电,避免排针间短接。 - 视频最终展示白色闪光灯约亮 2 秒、灭 2 秒,循环往复。看到“上传完成”只证明烧录过程报告成功;实际亮灭才是本节的运行验证。若板子一直不运行,先检查 IO0 是否还接地以及是否复位;若灯始终不亮,再核对 GPIO4、所选板型和供电;若偶发重启,要检查供电是否稳定。
核对依据
- 本地视频
videos/287.5.esp32cam点灯.mp4、转录transcripts/287.5.esp32cam点灯.txt与课程包源码/7、项目3、项目4资料/项目3:基于ESP32的物联网WIFI小车.zip内的wifi监控避障小车.pptx和接线图和烧入相关图片/ESP32-CAM.jpg:核对课堂代码、GPIO4、板上 LED 与烧录演示。本节代码以视频最终草图为准,不能用压缩包中后续完整小车代码代替。 - Arduino 官方
digitalWrite()参考、digitalRead()参考原稿、引脚模式说明与delay()参考原稿:核对输入/输出区别以及毫秒单位。 - Zephyr 官方 ESP32-CAM 板卡说明:确认 GPIO4 连接板载闪光灯并与 microSD 数据脚共用;Espressif ESP32 启动模式说明:确认 GPIO0 需在复位时拉低才进入下载模式。