ESP32 入门教程(一):使用 GPIO 控制 LED 亮灭
一、前言
点亮 LED 是单片机开发的Hello World,也是入门硬件交互的第一课。通过本实验,你能搞懂电压、电流、回路三大基础电路概念,掌握 GPIO 输出控制逻辑,建立软件代码控制物理硬件的思维,为后续电机、传感器、物联网项目打下基础。
ESP32 是集成 WiFi + 蓝牙的 3.3V 单片机,相比传统 51 单片机,自带无线通信功能,是物联网开发首选。本文从零讲解电路原理、硬件接线、Arduino 代码、烧录全流程,零基础新手也能一次成功。 本篇目标:使用 ESP32 GPIO5 引脚驱动 LED,实现 0.5 秒周期循环闪烁。
二、硬件准备
本次实验所需全部元器件清单:
- ESP32-WROOM/S3 开发板 ×1
- USB 数据线(数据传输款,仅充电线无法烧录)×1
- 红色直插 LED 灯珠 ×1
- 220Ω 色环限流电阻 ×1
- 830 孔面包板 ×1
- 公对母杜邦线若干
三、核心原理简析
1. 硬件基础
LED硬件构造
LED 是一种将电能转化为光能的半导体器件:
极性:LED 具有正负极之分。长脚为正极(阳极),短脚为负极(阴极)。电流只能从正极流向负极,反向连接时不导通。
正向压降:不同颜色的LED具有不同的导通电压。
电流限制:LED 对电流非常敏感。当电压超过其正向导通电压后,微小的电压增加都会导致电流急剧上升。
1.4 限流电阻的作用
(1)LED 发光三大必要条件
LED 想要正常点亮,必须同时满足三点:存在电位差、形成完整闭合回路、回路电流受控。
- 电压:两点电位差值,ESP32 高电平输出 3.3V,GND 接地为 0V,二者形成驱动电压;
- 电流:电荷定向移动,是 LED 发光根本,无电流则灯不亮;
- 闭合回路:电流从 GPIO 流出,经过电阻、LED,最终回到 GND,线路断开直接灭灯。
水路类比通俗理解电路逻辑
把电路等效成供水系统,快速理解抽象电学概念:
- 3.3V GPIO = 高处水塔(高电位),GND = 低处水池(0V 低电位)
- 电流 = 水流,只会从高电位流向低电位
- GPIO 输出
HIGH= 打开水龙头,产生电流;LOW= 关闭水龙头,切断电流 - 220Ω 限流电阻 = 管道节流阀,限制电流大小,防止烧毁 LED
(2)ESP32 关键硬件特性
- 逻辑电压3.3V,禁止外接 5V 电压,否则烧毁引脚;上电默认引脚为高阻输入,不会自动输出电压,必须代码配置输出模式;
- GPIO:通用输入输出引脚,负责外接外设;GND 为公共负极,是回路必备;
- 引脚避坑:
- 禁用输出引脚:GPIO6/7/8/9/11(Flash 引脚)、34/35/36/39(仅输入)、0/2/12/15(启动配置脚);
- 推荐安全引脚:4、5、13、14、16、17、18、19、21、22、23、25、26、27、32、33,本实验使用 GPIO5。
(3)LED 与限流电阻规则
- LED 有极性:长脚 = 正极,短脚 = 负极,电流只能正进负出,接反不亮;正极必须串联电阻再接 GPIO,负极接 GND;
- 限流电阻不可省略:推荐 220Ω~330Ω,将回路电流限制在 5~10mA 安全区间,无电阻会瞬间击穿 LED、烧坏开发板引脚。
(4)面包板使用规则
- 中间区域:同一竖列金属片连通,元件插同一列即导通;
- 两侧电源轨:红线为正极、蓝线为负极,整条导轨互通,统一供电。
2. 核心 API 函数解析
Arduino 框架控制 LED 仅需 3 个核心函数,同时包含程序固定双函数结构:
(1)程序基础结构
void setup():初始化函数,上电只执行 1 次,用于配置引脚模式、串口初始化;void loop():主循环函数,setup 执行完成后无限循环运行,实现持续闪烁逻辑。
(2)三大硬件控制函数
表格
| 函数 | 作用 | 参数说明 |
|---|---|---|
pinMode(pin, mode) | 配置引脚工作模式 | pin:引脚编号;mode 填OUTPUT设为数字输出 |
digitalWrite(pin, value) | 输出高低电平 | HIGH=3.3V 高电平(亮灯);LOW=0V 低电平(灭灯) |
delay(ms) | 程序阻塞延时 | ms 单位毫秒,delay(1000)= 暂停 1 秒 |
四、接线指南
接线前置要求:全程断电操作,避免短路烧板
接线顺序:
- ESP32 GPIO5 引脚 → 杜邦线接入面包板任意一列;
- 同列插入 220Ω 限流电阻,电阻另一端接入面包板另一列;
- 电阻另一端列位插入 LED长脚(正极);
- LED 短脚(负极)用杜邦线连接 ESP32 任意 GND 引脚,闭合完整回路。
电路示意图:
- GPIO5 → 220Ω 电阻 → LED 长脚 (+) → LED 短脚 (-) → GND
电路接线图
五、代码实现
cpp
运行
// 宏定义LED控制引脚,后期修改引脚仅需改此处,方便维护 #define LED_PIN 5 // 上电仅执行一次的初始化函数 void setup() { // 将GPIO5配置为数字输出模式,才能输出高低电平 pinMode(LED_PIN, OUTPUT); } // 无限循环主函数,重复执行亮灭逻辑 void loop() { digitalWrite(LED_PIN, HIGH); // 输出3.3V高电平,产生电流,LED点亮 delay(500); // 保持点亮状态0.5秒(500毫秒) digitalWrite(LED_PIN, LOW); // 输出0V低电平,无电位差,LED熄灭 delay(500); // 保持熄灭状态0.5秒 }代码注释完整,每一步操作都标注原理,新手可直观理解每一行代码作用。
六、编译与烧录步骤
1. Arduino IDE 环境配置
- 文件→首选项,添加 ESP32 开发板管理器地址;
- 工具→开发板→开发板管理器,搜索
ESP32完成安装; - 工具栏开发板选择:
ESP32S3 Dev Module(根据自己开发板型号选择); - 端口选择:设备管理器查看 USB 对应 COM 端口,IDE 工具栏选中对应端口。
2. 烧录操作与 BOOT 键注意事项
- 将 USB 数据线连接电脑与 ESP32 开发板;
- 粘贴上方代码,点击左上角对勾图标编译,无报错即可下一步;
- 点击向右箭头上传烧录:
- 部分 ESP32 开发板烧录时需要按住
BOOT按键,等待进度条走动后松开;
- 部分 ESP32 开发板烧录时需要按住
- 进度条 100% 提示上传完成,代表代码已写入单片机。
七、实验现象与总结
1. 预期实验现象
烧录完成后,开发板上电,LED 持续循环闪烁:亮 0.5s → 灭 0.5s,无限往复。 拓展修改:将delay(500)改为delay(100),闪烁速度明显加快;修改LED_PIN为 4 并更换接线,LED 同样正常闪烁。
2. 核心知识点回顾
- LED 点亮三要素:3.3V 电位差、完整闭合回路、串联 220Ω 限流电阻;
- ESP32 为 3.3V 系统,区分引脚可用 / 禁用列表,避免硬件损坏;
- Arduino 程序固定结构:
setup()初始化、loop()循环执行; - GPIO 输出核心三函数:
pinMode配置模式、digitalWrite输出电平、delay延时控制灯光时长; - 硬件接线核心要点:LED 长脚接电阻、短脚接 GND,极性不可接反。
