2. 按键控制LED
任务目标
使用ESP32的GPIO数字输入功能读取按键状态,实现按下按键时点亮LED、松开时熄灭的控制逻辑。通过本案例掌握pinMode()、digitalRead()与digitalWrite()的基本用法,以及按键输入所需的硬件连接方式。
硬件与接线
- ESP32开发板 ×1
- LED ×1(建议串联220Ω限流电阻)
- 轻触按键 ×1
- 面包板与跳线若干
| ESP32引脚 | 连接目标 |
|---|---|
| GPIO2 | LED阳极(阴极经电阻接GND) |
| GPIO4 | 按键一端(另一端接GND) |
| GND | LED电阻、按键公共地 |
GPIO4内部启用上拉电阻,按键按下时引脚被拉低,读取到LOW;松开时恢复HIGH。GPIO2为LED输出引脚,输出HIGH点亮LED。
完整代码
const int ledPin = 2; // LED连接到GPIO2
const int buttonPin = 4; // 按键连接到GPIO4
void setup() {
pinMode(ledPin, OUTPUT); // LED引脚设为输出
pinMode(buttonPin, INPUT_PULLUP); // 按键引脚启用内部上拉
}
void loop() {
int buttonState = digitalRead(buttonPin); // 读取按键状态
if (buttonState == LOW) {
digitalWrite(ledPin, HIGH); // 按下(低电平)→ 点亮LED
} else {
digitalWrite(ledPin, LOW); // 松开(高电平)→ 熄灭LED
}
}
编译与烧录
- 安装Arduino IDE并添加ESP32开发板支持(开发板管理器搜索“esp32”安装)。
- 新建Arduino工程,将上述代码粘贴覆盖默认内容。
- 工具 → 开发板选择“ESP32 Dev Module”,选择正确的COM端口。
- 点击“上传”按钮,等待编译烧录完成。
验证方法
烧录成功后,观察以下行为:
- 未按下按键时,LED保持熄灭状态。
- 用手指按下按键并保持,LED应立即点亮。
- 松开按键,LED立即熄灭。
若按下时LED不亮,检查LED正负极是否接反、GPIO2是否正确连接;若LED常亮不受控,检查按键是否接在GPIO4与GND之间,以及代码中是否启用了INPUT_PULLUP。满足上述三种行为即判定案例通过。
常见问题
- 按键抖动:本案例未做软件消抖,快速按动时可能出现LED闪烁。实际工程中可增加20~50ms延时消抖或使用状态机处理。
- 引脚选择:GPIO2和GPIO4均为普通数字引脚,避开板载Flash相关引脚(如GPIO6~GPIO11)即可。