// ESP32 按键控制 LED 示例
// 适用于 Wokwi 在线仿真 + 实体 ESP32-WROOM
// 定义引脚
const int LED_PIN = 2; // ESP32 开发板上通常板载一个 LED 在 GPIO2
const int BUTTON_PIN = 0; // GPIO0 通常是板载按键(BOOT 按钮)
// 定义 LED 状态
bool ledState = false;
void setup() {
// 初始化串口,用于调试输出
Serial.begin(115200);
delay(100);
// 配置引脚模式
pinMode(LED_PIN, OUTPUT);
// 关键:使用内部上拉电阻!
// 这样 BUTTON_PIN 在空闲时是高电平,按下时是低电平
pinMode(BUTTON_PIN, INPUT_PULLUP);
// 初始状态:LED 熄灭
digitalWrite(LED_PIN, LOW);
Serial.println("ESP32 已启动");
Serial.println("按下按键(GPIO0)控制 LED 开关");
Serial.println("内部上拉已启用,空闲状态为高电平");
}
void loop() {
// 检测按键是否被按下
// 注意:因为启用了内部上拉,按键按下时读到 LOW(0)
if (digitalRead(BUTTON_PIN) == LOW) {
// 按键被按下,切换 LED 状态
ledState = !ledState;
digitalWrite(LED_PIN, ledState ? HIGH : LOW);
// 输出当前状态到串口监视器
if (ledState) {
Serial.println("LED 已点亮");
} else {
Serial.println("LED 已熄灭");
}
// 简单的消抖处理:等待按键释放
// 这个 while 循环会一直等待,直到按键弹起(读到 HIGH)
while (digitalRead(BUTTON_PIN) == LOW) {
delay(10); // 等待 10 毫秒,避免抖动
}
// 再等待一小段时间,确保消抖完成
delay(20);
}
// 可以在这里添加其他代码
// delay 不是必须的,但可以降低 CPU 占用
delay(10);
}