3. ESP32 GPIO基础与数字信号:认识引脚编号,点亮第一盏LED灯

好,我们正式开始动手了。

前面两章我们聊了ESP32是什么,也搭好了开发环境。现在,是时候让硬件听我们的话了。这一章,我们来认识ESP32的GPIO引脚,学会用digitalWritedigitalRead这两个最基础的数字信号函数。然后,用一颗LED灯,完成你的第一个实验:点亮与熄灭。

3.1 认识ESP32的引脚编号

ESP32的引脚,不是随便乱标的。每个引脚都有固定的编号,比如GPIO2、GPIO4、GPIO5等等。这些编号,就是我们在代码里控制它们的“地址”。

我个人习惯,拿到一块新的ESP32开发板,第一件事就是看引脚图。你想想看,如果连哪个引脚能输出PWM、哪个引脚是ADC输入都不清楚,后面调试起来会很痛苦。

这里我列一下最常用的几个引脚,你记一下:

引脚编号 功能说明 注意事项
GPIO2 板载LED(很多开发板自带) 高电平点亮,低电平熄灭
GPIO4 普通数字I/O 可做PWM输出
GPIO5 普通数字I/O 上电时注意电平状态
GPIO16 普通数字I/O 常用于外设控制
GPIO17 普通数字I/O 同上
⚠️ 注意: 不是所有引脚都能随便用!比如GPIO6到GPIO11是连接Flash的,你千万别碰它们,否则程序会跑飞。我曾经有个学生,非要用GPIO6接LED,结果板子直接不启动了。嗯,这就是血的教训。

3.2 数字信号:高电平和低电平

数字信号,说白了就是两个状态:高电平和低电平。在ESP32上,高电平是3.3V,低电平是0V。我们用HIGHLOW这两个常量来表示。

你可能会问:为什么是3.3V而不是5V?因为ESP32是3.3V逻辑的芯片。如果你接5V的外设,一定要加电平转换,否则会烧引脚。我在项目中遇到过,有人直接把5V的舵机信号线接到GPIO上,结果芯片冒烟了……

3.3 digitalWrite:让引脚输出高或低

digitalWrite(pin, value)这个函数,就是让指定引脚输出高电平或低电平。用法很简单:

digitalWrite(2, HIGH);  // GPIO2输出高电平,LED亮
digitalWrite(2, LOW);   // GPIO2输出低电平,LED灭

但要注意,使用之前必须先调用pinMode()设置引脚模式。否则,引脚默认是输入模式,你写高低电平是没用的。

核心要点: 使用digitalWrite前,一定要先pinMode(pin, OUTPUT)。这是新手最容易忘的坑。

3.4 digitalRead:读取引脚的电平状态

有输出,就有输入。digitalRead(pin)用来读取引脚当前的电平,返回HIGHLOW

int val = digitalRead(4);  // 读取GPIO4的电平
if (val == HIGH) {
  Serial.println("引脚4是高电平");
}

这个函数在后续的光感跟随项目中会频繁用到。比如,光敏电阻模块输出高电平表示光线暗,低电平表示光线亮。你通过digitalRead读取这个信号,就能判断环境光强度。

3.5 第一个实验:点亮与熄灭LED

好了,理论讲完了,我们直接上手。这个实验的目标是:让LED亮1秒,灭1秒,循环往复。

你需要准备:

  • ESP32开发板一块
  • LED灯一个(颜色随意,我习惯用红色,醒目)
  • 220Ω电阻一个(限流用,别省这一步)
  • 杜邦线两根
  • 面包板一块(可选,但推荐)

接线方式:

  1. LED正极(长脚)接GPIO2
  2. LED负极(短脚)串联220Ω电阻后接GND

然后,打开Arduino IDE,输入以下代码:

void setup() {
  pinMode(2, OUTPUT);  // 设置GPIO2为输出模式
}

void loop() {
  digitalWrite(2, HIGH);  // 点亮LED
  delay(1000);            // 等待1秒
  digitalWrite(2, LOW);   // 熄灭LED
  delay(1000);            // 等待1秒
}

上传代码后,你会看到LED以1秒的间隔闪烁。恭喜,你的第一个硬件实验成功了!

💡 小技巧: 如果你发现LED不亮,先检查接线。正负极有没有接反?电阻有没有接?GPIO2是不是被其他程序占用了?我曾经有一次,折腾了半小时,结果发现是LED坏了……换个LED就好了。

3.6 避坑指南:我踩过的那些坑

做这个实验,有几个坑我必须要提醒你:

  • 引脚编号别搞错:ESP32的引脚编号是GPIO2,不是D2。有些开发板标注的是D2,但代码里一定要写2。
  • 电阻不能省:LED直接接3.3V会烧掉。220Ω是标准值,没有的话100Ω到1kΩ都行。
  • 上电顺序:先接好线,再上电。不要带电插拔,容易烧引脚。
  • 板载LED:很多ESP32开发板自带一个LED,通常接在GPIO2上。如果你外接LED,注意别和板载的冲突。

嗯,这些坑我当年都踩过。尤其是那个电阻的问题,我第一次做实验时觉得“就一个LED,不接电阻也没事吧?”结果LED瞬间冒烟,还带着一股焦味。从那以后,我再也不敢省电阻了。

3.7 扩展思考:从闪烁到呼吸灯

学会了基本的点亮熄灭,你可以试着做点更有趣的。比如,用analogWrite()实现呼吸灯效果。虽然这涉及PWM(脉宽调制),但原理很简单:让LED的亮度逐渐变化。

不过,那是下一章的内容了。这一章,你先把这个闪烁实验做熟练。记住,基础越扎实,后面做智能窗帘时就越顺手。

好了,去动手吧。把LED点亮,然后熄灭。再点亮,再熄灭。看着它一闪一闪的,你会很有成就感的。