关于本教程:
ESP32 基础篇
1.ESP32简介
2.ESP32 Arduino 集成开发环境
3.VS 代码和 PlatformIO
4.ESP32 引脚 ☑
5.ESP32 输入输出
6.ESP32 脉宽调制
7.ESP32 模拟输入
8.ESP32 中断定时器
9.ESP32 深度睡眠
ESP32 协议篇
ESP32 网络服务器
ESP32 LoRa
ESP32 BLE
ESP32 BLE 客户端-服务器
ESP32 蓝牙
ESP32 MQTT
ESP32 ESP-NOW
ESP32 Wi-Fi
ESP32 WebSocket
ESP32 ESP-MESH
ESP32 邮箱
ESP32 短信
ESP32 HTTP 获取 POST
HTTP GET Web APIs
HTTP POST Web APIs
ESP32 服务器篇
持续更新,关注博主不迷路!!!
ESP32 传感器模块篇
持续更新,关注博主不迷路!!!
ESP32 终极实战篇
百余项ESP32实战项目,敬请关注!!!
ESP32 芯片有 48 个引脚,具有多种功能。并不是所有的 ESP32 开发板的管脚都是外露的,有些管脚是不能用的。
关于如何使用 ESP32 GPIO 的问题很多。你应该使用什么引脚?您应该避免在项目中使用哪些引脚?这篇文章旨在成为 ESP32 GPIO 的简单易懂的参考指南。
下图说明了 ESP-WROOM-32 的引脚排列。如果您使用ESP32 裸芯片构建定制板,您可以将其用作参考:
注意:并非所有开发板都可以访问所有 GPIO,但无论您使用哪种开发板,每个特定 GPIO 的工作方式都相同。如果您刚刚开始使用 ESP32,我们建议您阅读我们的指南: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 管脚示例- 管脚位置可能会因制造商而异)。
此外,还有一些具有特定功能的管脚,使它们适合或不适合特定项目。下表显示了哪些引脚最适合用作输入、输出以及您需要注意哪些引脚。
以绿色突出显示的引脚可以使用。黄色高亮的是可以使用的,但是你需要注意,因为它们可能主要在启动时有意想不到的行为。不建议将以红色突出显示的引脚用作输入或输出。
GPIO | Input | Output | 说明 |
0 | pulled up | OK | 开机时输出 PWM 信号,必须为 LOW 才能进入闪烁模式 |
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——仅输入引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,因此只能将这些引脚用作输入:
- GPIO 34
- GPIO 35
- GPIO 36
- GPIO 39
ESP-WROOM-32 上集成的 SPI 闪存
部分 ESP32 开发板暴露了 GPIO 6 到 GPIO 11。但是,这些引脚连接到 ESP-WROOM-32 芯片上的集成 SPI 闪存,不建议用于其他用途。所以,不要在你的项目中使用这些引脚:
- GPIO 6 (SCK/时钟)
- GPIO 7 (SDO/SD0)
- GPIO 8 (SDI/SD1)
- GPIO 9 (SHD/SD2)
- GPIO 10 (SWP/SD3)
- GPIO 11 (CSC/CMD)
电容式触摸 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 x 12 位 ADC 输入通道(而ESP8266 只有 1x 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)
了解如何使用 ESP32 ADC 引脚:
带 Arduino IDE 的 ESP32 ADC 引脚
带有 MicroPython 的 ESP32 ADC 引脚
注意:使用 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 x 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。将 ESP32 与 Arduino IDE 一起使用时,默认的 I2C 引脚为:
- GPIO 21 (SDA)
- GPIO 22 (SCL)
如果在使用线库的时候还想使用其他管脚,只需要调用:
Wire.begin(SDA, SCL);
SPI接口
默认情况下,SPI 的引脚映射为:
中断
所有 GPIO 都可以配置为中断。
开机时引脚为高电平
一些 GPIO 在启动或复位时将其状态更改为高电平或输出 PWM 信号。这意味着如果您将输出连接到这些 GPIO,您可能会在 ESP32 重置或启动时得到意想不到的结果。
- GPIO 1
- GPIO 3
- GPIO 5
- GPIO 6 到 GPIO 11(连接到 ESP32 集成 SPI 闪存 – 不建议使用)。
- GPIO 14
- GPIO 15
启用(EN)
启用 (EN) 是 3.3V 稳压器的启用引脚。它被拉高,所以接地以禁用 3.3V 稳压器。这意味着您可以使用连接到按钮的此引脚来重启 ESP32,例如。
消耗的 GPIO 电流
根据 ESP32 数据表中的“推荐工作条件”部分,每个 GPIO 消耗的绝对最大电流为 40mA。
ESP32 内置霍尔效应传感器
ESP32 还具有内置霍尔效应传感器,可检测周围磁场的变化。文章来源:https://uudwc.com/A/596z
总结
我们希望您发现本 ESP32 GPIO 参考指南很有用。如果您有更多关于 ESP32 GPIO 的技巧,请在下方留言分享。文章来源地址https://uudwc.com/A/596z