esp32 芯片有 48 个引脚,具有多种功能。并不是所有的 esp32 开发板的管脚都是外露的,有些管脚是不能用的。
关于如何使用 esp32 gpio 的问题很多。你应该使用什么引脚?您应该避免在项目中使用哪些引脚?这篇文章旨在成为 esp32 gpio 的简单易懂的参考指南。
下图说明了 esp-wroom-32 的引脚排列。如果您使用esp32 裸芯片构建定制板,您可以将其用作参考:
esp32 外设
esp32 外设包括:
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)
如果在使用线库的时候还想使用其他管脚,只需要调用:
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 还具有内置霍尔效应传感器,可检测周围磁场的变化。
发表评论