2. 按键控制LED

任务目标

使用ESP32的GPIO数字输入功能读取按键状态,实现按下按键时点亮LED、松开时熄灭的控制逻辑。通过本案例掌握pinMode()、digitalRead()与digitalWrite()的基本用法,以及按键输入所需的硬件连接方式。

硬件与接线

  • ESP32开发板 ×1
  • LED ×1(建议串联220Ω限流电阻)
  • 轻触按键 ×1
  • 面包板与跳线若干
ESP32引脚连接目标
GPIO2LED阳极(阴极经电阻接GND)
GPIO4按键一端(另一端接GND)
GNDLED电阻、按键公共地

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
  }
}

编译与烧录

  1. 安装Arduino IDE并添加ESP32开发板支持(开发板管理器搜索“esp32”安装)。
  2. 新建Arduino工程,将上述代码粘贴覆盖默认内容。
  3. 工具 → 开发板选择“ESP32 Dev Module”,选择正确的COM端口。
  4. 点击“上传”按钮,等待编译烧录完成。

验证方法

烧录成功后,观察以下行为:

  • 未按下按键时,LED保持熄灭状态。
  • 用手指按下按键并保持,LED应立即点亮。
  • 松开按键,LED立即熄灭。

若按下时LED不亮,检查LED正负极是否接反、GPIO2是否正确连接;若LED常亮不受控,检查按键是否接在GPIO4与GND之间,以及代码中是否启用了INPUT_PULLUP。满足上述三种行为即判定案例通过。

常见问题

  • 按键抖动:本案例未做软件消抖,快速按动时可能出现LED闪烁。实际工程中可增加20~50ms延时消抖或使用状态机处理。
  • 引脚选择:GPIO2和GPIO4均为普通数字引脚,避开板载Flash相关引脚(如GPIO6~GPIO11)即可。