本文是“攻玉计划”的一部分,翻译自 https://randomnerdtutorials.com/esp8266-pinout-reference-gpios/

本文旨在介绍 ESP8266 的引脚定义、引脚功能及如何使用它们。

ESP-12E 模块拥有 17 个 GPIO 引脚。但在各个开发板上,ESP8266 芯片的 GPIO 引脚并不一定全部引出,而且某些引脚不建议使用,某些引脚有非常特殊的功能。

本文将指导你如何正确使用 ESP8266 的各个 GPIO,避免用错引脚而浪费时间。

ESP12-E 模块引脚定义

下图阐述了 ESP-12E 模块的引脚定义。当你的项目使用裸 ESP-12E/F 模块的时候,可以参考此图。

🔵注意:某些开发板可能不能使用全部的引脚,但相同的引脚在不同的开发板上,功能肯定是一样的。

当前市场上有很多不同的 ESP8266 模块/开发板,它们的形状、大小、可用 GPIO 数目各不相同。但最常用的是 ESP-01(S)、ESP-12E/F、NodeMCU 开发板以及 Wemos D1 Mini 开发板。你可以自己搜索这些开发板模块的区别。

ESP-01(S) 引脚定义

如果你在用 ESP-01(S) 的板子,可以参考下图的 GPIO 引脚定义。

ESP-12E NodeMCU 开发板

ESP-12E NodeMCU 开发板的引脚定义如下图所示。

Wemos D1 Mini 开发板

Wemos D1 Mini 开发板的引脚定义如下图所示。

ESP8266 的外设

ESP8266 的外设包括:

  • 17 个 GPIO
  • SPI
  • I2C(软件实现)
  • I2S(支持 DMA)
  • UART
  • 10 位 ADC

推荐使用的引脚

需要注意的一点是,ESP8266 开发板上丝印的引脚号,并不是芯片真正的 GPIO 编号。比如,D0 是 GPIO16,D1 是 GPIO5。

下表说明了 ESP8266 开发板上丝印的引脚号与实际 GPIO 编号的对应关系,并提醒你哪些引脚在使用时需要注意。

绿色标记的引脚可以随意使用;黄色标记的引脚可以使用,但需要注意它们在芯片启动时的影响,可能带来意外的问题。红色标记的引脚不建议用作输入或输出功能。

丝印标签 GPIO 可作为输入 可作为输出 备注
D0 GPIO16 不可用于中断 不可用于 PWM 或 I2C 🟠启动时为高电平
用于从深度睡眠中唤醒
D1 GPIO5 🟢是 🟢是 通常用作 SCL (I2C)
D2 GPIO4 🟢是 🟢是 通常用作 SDA (I2C)
D3 GPIO0 已被上拉 🟢是 与 FLASH 按键连接,如果拉低则会启动失败
D4 GPIO2 已被上拉 🟢是 🟠启动时为高电平
连接板载 LED,如果拉低则会启动失败
D5 GPIO14 🟢是 🟢是 SPI (SCLK)
D6 GPIO12 🟢是 🟢是 SPI (MISO)
D7 GPIO13 🟢是 🟢是 SPI (MOSI)
D8 GPIO15 已被下拉至 GND 🟡是 SPI (CS)
如果拉高则会启动失败
RX GPIO3 🟡是 🔴RX 引脚 🟠启动时为高电平
TX GPIO1 🔴TX 引脚 🟡是 🟠启动时为高电平
启动时的调试输出引脚,如果拉低会启动失败
A0 ADC0 🟢模拟输入 🔴禁用

接下来的篇幅将更详细地介绍 ESP8266 GPIO 引脚的功能。

连接 FLASH 芯片的引脚

GPIO6 到 GPIO11 通常用于连接 FLASH 芯片,所以,不推荐使用这几个引脚。

启动过程中用到的引脚

如果某些引脚被拉高或者拉低,ESP8266 可能会启动失败。下表是部分引脚在启动时的状态:

  • GPIO16:启动时为高电平
  • GPIO0:如果被拉低,则启动失败
  • GPIO2:启动时为高电平,如果被拉低,则启动失败
  • GPIO15:如果被拉高,则启动失败
  • GPIO3:启动时为高电平
  • GPIO1:启动时为高电平,如果被拉低,则启动失败
  • GPIO10:启动时为高电平
  • GPIO9:启动时为高电平

启动时为高电平的引脚

以下引脚在启动时会输出 3.3V 的高电平。如果你在这些引脚上接了继电器之类的外设,可能会带来一些问题:

  • GPIO16
  • GPIO3
  • GPIO1
  • GPIO10
  • GPIO9

此外,其他引脚(除了 GPIO5 和 GPIO4),在启动时会输出低电平信号,同样可能带来问题。你可以阅读 此文章 以详细了解各个 GPIO 在启动时的状态。

🟢如果需要控制继电器或功率管,GPIO4 和 GPIO5 是最安全的引脚。

模拟输入引脚

ESP8266 只有一个引脚支持模拟输入,此引脚叫 ADC0,丝印上常标记为 A0。

如果使用 ESP8266 裸芯片(ESP-12E/F)的话,此引脚的电压输入范围为 0-1V。如果使用了 NodeMCU 之类的开发板,那么电压输入范围就是 0-3.3V,因为开发板上已经集成了分压器。

板载 LED

大多数 ESP8266 模块均有一个内置的 LED,通常连在 GPIO2 上。LED 亮灭的逻辑是反向的,GPIO2 为高电平时,LED 熄灭;GPIO2 低电平时,LED 亮起。

复位引脚

当 RST 引脚被拉低时,ESP8266 将被复位。按开发板上的 RESET 按键同理。

GPIO0

当 GPIO0 被拉低时,复位 ESP8266,芯片将进入 bootloader 模式。按开发板上的 FLASH/BOOT 按钮同理。

GPIO16

GPIO16 可被用于从深度睡眠中唤醒 ESP8266。要实现此功能,需要将 GPIO16 连接在 RST 引脚上。关于如何实现深度睡眠,请搜索并参考 Arduino 官网上的相关案例。

I2C

ESP8266 没有硬件 I2C 引脚,但可以用软件模拟,所以你可以使用任意引脚实现 I2C。通常我们会使用以下引脚:

  • GPIO5:SCL
  • GPIO4:SDA

SPI

ESP8266 上的 SPI 引脚如下:

  • GPIO12:MISO
  • GPIO13:MOSI
  • GPIO14:SCLK
  • GPIO15:CS

PWM 引脚

我们可以在 ESP8266 的所有引脚(GPIO0 至 GPIO15)上软件实现 PWM 功能。ESP8266 上的 PWM 有 10 位精度。关于如何实现 PWM 功能,请搜索并参考 Arduino 官网上的相关案例。

中断引脚

ESP8266 的所有 GPIO 引脚均支持中断,除了 GPIO16。相关案例请搜索并参考 Arduino 官网上的相关案例。

总结

希望本文能解决你对 ESP8266 GPIO 的相关疑惑,祝好!