本文是“攻玉计划”的一部分,翻译自 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 的相关疑惑,祝好!