ESP32 芯片有 48 个引脚,具有多种功能。并不是所有的 ESP32 开发板的管脚都暴露在外,有些管脚不能使用。
关于如何使用 ESP32 GPIO 有很多问题。你应该使用什么引脚?您应该避免在项目中使用哪些引脚?这篇文章旨在成为一份简单易懂的 ESP32 GPIO 参考指南。
下图说明了 ESP-WROOM-32 的引脚排列。如果您使用ESP32 裸芯片构建定制板,则可以将其用作参考:
注意:并非所有 GPIO 都可以在所有开发板中访问,但无论您使用哪种开发板,每个特定 GPIO 都以相同的方式工作。如果您刚刚开始使用 ESP32,我们建议您阅读我们的入门指南:
ESP32 外设
ESP32 外设包括:
- 18 个模数转换器 (ADC) 通道
- 3个SPI接口
- 3个UART接口
- 2个I2C接口
- 16个PWM输出通道
- 2 个数模转换器 (DAC)
- 2个I2S接口
- 10 个电容感应 GPIO
ADC(模数转换器)和 DAC(数模转换器)功能分配给特定的静态引脚。但是,您可以决定哪些引脚是 UART、I2C、SPI、PWM 等——您只需在代码中分配它们。由于 ESP32 芯片的多路复用功能,这是可能的。
虽然您可以在软件上定义管脚属性,但默认分配的管脚如下图所示(这是ESP32 DEVKIT V1 DOIT 板的 36 管脚示例 – 管脚位置可能因制造商而异)。
此外,还有一些具有特定功能的引脚,使其适合或不适合特定项目。下表显示了哪些引脚最适合用作输入、输出以及需要谨慎使用的引脚。
以绿色突出显示的引脚可以使用。黄色突出显示的可以使用,但您需要注意,因为它们可能主要在启动时出现意外行为。不建议将红色突出显示的引脚用作输入或输出。
highlighted in red are not recommended to use as inputs or outputs.
GPIO | 输入 | 输出 | 注释 |
0 | 上拉 | OK | 启动时输出PWM信号 |
1 | TX pin | OK | 启动时调试输出 |
2 | OK | OK | 连接到板载LED |
3 | OK | RX pin | 启动时拉高 |
4 | OK | OK | |
5 | OK | OK | 启动时输出PWM信号 |
6 | x | x | 已连接到集成SPI闪存 |
7 | x | x | 已连接到集成SPI闪存 |
8 | x | x | 已连接到集成SPI闪存 |
9 | x | x | 已连接到集成SPI闪存 |
10 | x | x | 已连接到集成SPI闪存 |
11 | x | x | 已连接到集成SPI闪存 |
12 | OK | OK | 如果拉高,则启动失败 |
13 | OK | OK | |
14 | OK | OK | 启动时输出PWM信号 |
15 | OK | OK | 启动时输出PWM信号 |
16 | OK | OK | |
17 | OK | OK | |
18 | OK | OK | |
19 | OK | OK | |
21 | OK | OK | |
22 | OK | OK | |
23 | OK | OK | |
25 | OK | OK | |
26 | OK | OK | |
27 | OK | OK | |
32 | OK | OK | |
33 | OK | OK | |
34 | OK | 仅限输入 | |
35 | OK | 仅限输入 | |
36 | OK | 仅限输入 | |
39 | OK | 仅限输入 |
继续阅读有关 ESP32 GPIO 及其功能的更详细和深入的分析。
仅输入引脚
GPIO 34 到 39 是 GPI——仅输入引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,因此只能将这些引脚用作输入:
ESP-WROOM-32 上集成的 SPI 闪存
GPIO 6 到 GPIO 11 暴露在一些 ESP32 开发板上。但是,这些引脚连接到 ESP-WROOM-32 芯片上的集成 SPI 闪存,不推荐用于其他用途。所以,不要在你的项目中使用这些引脚:
电容式触摸 GPIO
ESP32 有 10 个内部电容式触摸传感器。这些可以感知任何带有电荷的东西的变化,比如人类皮肤。因此,他们可以检测用手指触摸 GPIO 时引起的变化。这些引脚可以很容易地集成到电容垫中并取代机械按钮。电容式触摸引脚也可用于将 ESP32 从深度睡眠中唤醒。
这些内部触摸传感器连接到这些 GPIO:
- T0 (GPIO 4)
- T1 (GPIO 0)
- T2 (GPIO 2)
- T3 (GPIO 15)
- T4 (GPIO 13)
- T5 (GPIO 12)
- T6 (GPIO 14)
- T7 (GPIO 27)
- T8 (GPIO 33)
- T9 (GPIO 32)
模数转换器 (ADC)
ESP32 有 18 个 12 位 ADC 输入通道(而ESP8266 只有 1 个 10 位 ADC)。这些是可用作 ADC 和相应通道的 GPIO:
- ADC1_CH0 (GPIO 36)
- ADC1_CH1 (GPIO 37)
- ADC1_CH2 (GPIO 38)
- ADC1_CH3 (GPIO 39)
- ADC1_CH4 (GPIO 32)
- ADC1_CH5 (GPIO 33)
- ADC1_CH6 (GPIO 34)
- ADC1_CH7 (GPIO 35)
- ADC2_CH0 (GPIO 4)
- ADC2_CH1 (GPIO 0)
- ADC2_CH2 (GPIO 2)
- ADC2_CH3 (GPIO 15)
- ADC2_CH4 (GPIO 13)
- ADC2_CH5 (GPIO 12)
- ADC2_CH6 (GPIO 14)
- ADC2_CH7 (GPIO 27)
- ADC2_CH8 (GPIO 25)
- ADC2_CH9 (GPIO 26)
注意:使用 Wi-Fi 时不能使用 ADC2 引脚。因此,如果您使用的是 Wi-Fi,并且无法从 ADC2 GPIO 获取值,则可以考虑改用 ADC1 GPIO。那应该可以解决您的问题。
ADC 输入通道具有 12 位分辨率。这意味着您可以获得 0 到 4095 范围内的模拟读数,其中 0 对应 0V,4095对应 3.3V。您还可以在代码和 ADC 范围上设置通道的分辨率。
ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要牢记这一点。您将获得类似于下图所示的行为。
数模转换器 (DAC)
ESP32 上有 2 个 8 位 DAC 通道,用于将数字信号转换为模拟电压信号输出。这些是 DAC 通道:
- DAC1 (GPIO25)
- DAC2 (GPIO26)
RTC GPIO
ESP32 支持 RTC GPIO。当 ESP32 处于深度睡眠状态时,可以使用路由到 RTC 低功耗子系统的 GPIO。当超低功耗 (ULP) 协处理器运行时,这些 RTC GPIO 可用于将 ESP32 从深度睡眠中唤醒。以下 GPIO 可用作外部唤醒源。
- RTC_GPIO0 (GPIO36)
- RTC_GPIO3 (GPIO39)
- RTC_GPIO4 (GPIO34)
- RTC_GPIO5 (GPIO35)
- RTC_GPIO6 (GPIO25)
- RTC_GPIO7 (GPIO26)
- RTC_GPIO8 (GPIO33)
- RTC_GPIO9 (GPIO32)
- RTC_GPIO10 (GPIO4)
- RTC_GPIO11 (GPIO0)
- RTC_GPIO12 (GPIO2)
- RTC_GPIO13 (GPIO15)
- RTC_GPIO14 (GPIO13)
- RTC_GPIO15 (GPIO12)
- RTC_GPIO16 (GPIO14)
- RTC_GPIO17 (GPIO27)
脉宽调制
ESP32 LED PWM 控制器有 16 个独立通道,可配置为生成具有不同属性的 PWM 信号。所有可以作为输出的引脚都可以用作 PWM 引脚(GPIO 34 到 39 不能生成 PWM)。
要设置 PWM 信号,您需要在代码中定义这些参数:
- 信号频率;
- 占空比;
- 脉宽调制通道;
- 要输出信号的 GPIO。
I2C
ESP32 有两个 I2C 通道,任何引脚都可以设置为 SDA 或 SCL。在 Arduino IDE 中使用 ESP32 时,默认的 I2C 引脚为:
- 通用输入输出接口 21 (SDA)
- GPIO 22 (SCL)
如果你想在使用线库时使用其他管脚,你只需要调用:
Wire.begin(SDA, SCL);
SPI
默认情况下,SPI 的引脚映射为:
SPI | MOSI | MISO | CLK | CS |
VSPI | 通用输入输出接口 23 | 通用输入输出接口 19 | 通用输入输出接口 18 | 通用输入输出接口 5 |
HSPI | 通用输入输出接口 13 | 通用输入输出接口 12 | 通用输入输出接口 14 | 通用输入输出接口 15 |
中断
所有 GPIO 都可以配置为中断。
Strapping引脚(捆绑引脚?)
ESP32 芯片有以下strapping引脚:
- 通用输入输出 0
- 通用输入输出接口 2
- 通用输入输出接口 4
- GPIO 5(启动时必须为高电平)
- GPIO 12(启动期间必须为低电平)
- GPIO 15(启动时必须为高电平)
这些用于将 ESP32 置于引导加载程序或闪烁模式。在大多数带有内置 USB/Serial 的开发板上,您无需担心这些引脚的状态。该板将引脚置于正确的状态以进行闪烁或启动模式。
但是,如果您将外围设备连接到这些引脚,您可能无法尝试上传新代码、使用新固件刷新 ESP32 或重置电路板。如果您有一些外围设备连接到Strapping引脚,并且在上传代码或刷新 ESP32 时遇到问题,可能是因为这些外围设备阻止了 ESP32 进入正确模式。resetting、flashing或booting后,这些引脚按预期工作。
引导时引脚为高电平
一些 GPIO 在启动或复位时将其状态更改为 HIGH 或输出 PWM 信号。这意味着如果您有连接到这些 GPIO 的输出,您可能会在 ESP32 重置或启动时得到意外结果。
- 通用输入输出接口 1
- 通用输入输出接口 3
- 通用输入输出接口 5
- GPIO 6 到 GPIO 11(连接到 ESP32 集成 SPI 闪存 – 不推荐使用)。
- 通用输入输出接口 14
- 通用输入输出接口 15
启用 (EN)
Enable (EN) 是 3.3V 稳压器的使能引脚。它被上拉,所以接地以禁用 3.3V 稳压器。例如,这意味着您可以使用此引脚连接到按钮来重新启动 ESP32。
GPIO 电流消耗
根据 ESP32 数据表中的“推荐工作条件”部分,每个 GPIO 消耗的绝对最大电流为 40mA。
ESP32 内置霍尔效应传感器
ESP32 还具有内置霍尔效应传感器,可检测周围磁场的变化。