GPIO 编程点亮第一盏 LED

📅 2026-05-04 · 📂 硬件编程 · ⏱ 阅读约 5 分钟

📺 B站推荐视频:ESP32 入门教程

概述

GPIO(通用输入输出)是 ESP32 最基础的外设。本篇带你从零开始——安装 Arduino IDE、配置开发板、编写第一行代码、点亮 LED。走完这篇,你就正式踏入硬件编程的大门了。

学习目标:理解 GPIO 数字输出原理,掌握 pinMode() / digitalWrite() 函数,学会面包板接线。

物料清单

全套入门套件约 15 元,淘宝搜 "ESP32入门套件" 一步买齐。

硬件接线

🔌 接线图
         ESP32
      ┌─────────┐
      │  3.3V   │
      │         │
      │ GPIO23 ─┼──[220Ω]──⊳ LED(+) ── GND
      │ GPIO22 ─┼──[220Ω]──⊳ LED(+) ── GND
      │  GND  ──┼────────────── LED(-)
      └─────────┘
      
      ⊳ LED 长脚(+) → 电阻 → GPIO
      ⊳ LED 短脚(-) → GND
⚠️ 必须接限流电阻:ESP32 GPIO 输出 3.3V,LED 正向压降约 1.8-2.2V。不接电阻会导致电流 >30mA,烧毁引脚。220Ω → 电流 ≈ (3.3-2.0)/220 ≈ 6mA,够亮且安全。

步骤一:安装 Arduino IDE + ESP32 支持包

  1. 下载 Arduino IDE 2.x(免费)
  2. 打开 IDE → 文件 → 首选项 → "附加开发板管理器网址" 填入:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
  3. 工具 → 开发板 → 开发板管理器 → 搜索 "esp32" → 安装 esp32 by Espressif Systems(选最新版 3.x)
  4. 选择开发板:工具 → 开发板 → esp32 → ESP32 Dev Module
💡 首次安装可能较慢:如果下载失败,切换网络或用手机热点。国内用户可在首选项中设置代理。

步骤二:第一个程序 — Blink

// Blink.ino — 第一个 ESP32 程序 #define LED_PIN 23 void setup() { pinMode(LED_PIN, OUTPUT); Serial.begin(115200); Serial.println("ESP32 启动成功!"); } void loop() { digitalWrite(LED_PIN, HIGH); // 亮 delay(1000); digitalWrite(LED_PIN, LOW); // 灭 delay(1000); }

代码解释:

步骤三:上传到 ESP32

  1. USB 连接 ESP32 → 工具 → 端口 → 选择串口(Windows: COM3/4, macOS: /dev/cu.usbserial-xxx)
  2. 点击 → 上传 按钮(或 Ctrl+U / ⌘U)
  3. 观察底部输出窗口:"Connecting..." → "Writing..." → "Done"
  4. LED 开始 1 秒间隔闪烁 ✓
⚠️ 上传失败?按住 ESP32 上的 BOOT 按钮不放 → 点上传 → 控制台出现 "Connecting..." 时松开。部分板子需手动进下载模式。
💡 串口监视器:工具 → 串口监视器(Ctrl+Shift+M),波特率选 115200,能实时看到 Serial.println() 输出。

进阶:PWM 呼吸灯

// 用 LEDC PWM 实现呼吸灯效果 #define LED_PIN 23 #define PWM_CH 0 #define PWM_FREQ 5000 #define PWM_RES 8 // 8位 = 0-255 void setup() { ledcSetup(PWM_CH, PWM_FREQ, PWM_RES); ledcAttachPin(LED_PIN, PWM_CH); } void loop() { for (int d = 0; d <= 255; d++) { ledcWrite(PWM_CH, d); delay(5); } // 渐亮 for (int d = 255; d >= 0; d--) { ledcWrite(PWM_CH, d); delay(5); } // 渐灭 }

ESP32 的 LEDC 外设支持 16 路独立 PWM(通道 0-15),频率最高 40MHz,分辨率 1-16 位。比 Arduino Uno 的 analogWrite 强大得多。

GPIO 底层原理

ESP32 GPIO 内部结构简化:

 GPIO引脚 ──┬── 输出驱动(推挽/开漏) ── VDD (3.3V)
            ├── 输入缓冲(施密特触发器) ── 去抖动后送CPU
            ├── 内部上拉电阻 (~45kΩ, 可编程开启)
            ├── 内部下拉电阻 (~45kΩ, 可编程开启)
            └── ESD 保护二极管 → VDD / GND
参数说明
输出电压0V / 3.3V不是 5V!接 5V 传感器需电平转换
最大输出电流40mA建议控制在 12mA 以内
输入电压范围0 ~ 3.3V超过 3.6V 可能永久损坏
总电流限制~1200mA所有引脚合计

常见问题

⚠️ 不是 5V 容忍:ESP32 GPIO 不能接 5V。接 HC-SR04、继电器模块等 5V 设备时,必须用分压电阻或电平转换模块。
⚠️ 禁用的 GPIO:GPIO 6-11 连接内部 SPI Flash,不可用作普通 GPIO。GPIO 0/2/12/15 影响启动模式,新手慎用。
💡 先用板载 LED:多数 ESP32 板载 LED 连接 GPIO2。先用板载 LED 验证代码逻辑,再接外设,减少接线排查时间。
💡 进阶学习路径:GPIO 输出 → PWM → 外部中断 → ADC/DAC → I²C/SPI 总线。

延伸练习

  1. 同时控制红绿两颗 LED 交替闪烁
  2. 用两个按键分别控制 LED 的亮灭(引入 digitalRead()
  3. 实现摩尔斯电码(SOS:三短三长三短)闪烁
  4. 驱动 WS2812 全彩灯带(学习 FastLED 库)