专题 / esp32

GPIO 与第一颗灯

点灯之外:上下拉、复位时序与 boot 引脚的坑。

最小点灯程序

#define LED_PIN 2   // 多数 DevKit 板载 LED 在 GPIO2

void setup() {
  pinMode(LED_PIN, OUTPUT);
}

void loop() {
  digitalWrite(LED_PIN, HIGH);
  delay(500);
  digitalWrite(LED_PIN, LOW);
  delay(500);
}

能跑起来不算完,下面这些才是 ESP32 和 STM32 不一样的地方。

引脚使用前的三个检查

  1. 是不是 strapping 引脚:GPIO0(BOOT)、GPIO2、GPIO5、GPIO12、GPIO15 在上电瞬间 有特殊含义。GPIO12(MTDI)拉高会让 flash 电压变成 1.8V 导致启动失败—— 这是新手「烧录正常、复位起不来」的头号原因,详见 上电复位时序的研究。
  2. 输入模式记得配上下拉:pinMode(BTN, INPUT_PULLUP), 悬空输入在 ESP32 上漂得比 STM32 更明显。
  3. 只接输入的引脚:GPIO34~39 只能输入、没有内部上下拉,按键别用它们。

按键去抖(不用 delay 的写法)

const uint8_t BTN = 4;
bool last = HIGH;

void setup() { pinMode(BTN, INPUT_PULLUP); Serial.begin(115200); }

void loop() {
  bool now = digitalRead(BTN);
  if (last == HIGH && now == LOW) {
    Serial.println("按下(这个沿已经天然过滤了大部分抖动)");
  }
  last = now;
  delay(10);   // 简单采样去抖,够用
}

下一步