目录

工欲善其事

实践出真知

活跃标签: linux java mysql 待分类 js springboot win10 电路 vue macOS nginx esp32 windows git docker idea maven esp8266 python Arduino

存档:

X

详解ESP32模块的引脚分配图和定义

ESP32的优势之一是它的GPIO比ESP8266多得多。您不必兼顾或多复用IO。有几件事要注意,因此请仔细查看引脚分配图。

ESP32外围设备和I/O

尽管ESP32总共有48个GPIO引脚,但其中只有25个引出到开发板两侧的插头。这些引脚可以分配给各种外围职责,包括:

● 15个ADC通道:15个12位SAR ADC的通道。ADC范围可以在固件中设置为0-1V,0-1.4V,0-2V或0-4V

● 2个UART接口:一个用于串口加载代码。它们具有流控制,并支持IRDA!

● 25个PWM输出:25个通道PWM引脚用于调光LED或控制电动机。

● 2个DAC通道:8位DAC可产生真正的模拟电压。

● 3个SPI和1个I2C接口:有3个SPI和1个I2C接口,可连接各种传感器和外围设备。

● 9个触摸引脚:9个GPIO具有电容触摸感应。

  • 18 个模数转换器 (ADC) 通道
  • 4 组SPI接口
  • 3 组UART接口
  • 1 组I2C接口
  • 16 个PWM输出通道
  • 2 个数模转换器 (DAC)
  • 2 个I2S接口
  • 10 个电容式感应 GPIO
  • 16 个 RTC GPIO
  • ESP32 内置2个霍尔传感器

得益于ESP32的引脚多路复用功能,这意味着单个GPIO引脚可以充当ADC输入/DAC输出/触摸引脚。

ESP32引脚分配

ESP32开发板总共有30个引脚将其连接到外界。为简单起见,具有相似功能的引脚分组在一起。引脚如下:

重要的说在前面,在使用ESP32的时候不建议使用以下引脚,因为会在项目中出现各种无解的问题。

不建议使用或限制使用的引脚

不建议使用 Strapping引脚 ,SPI flash 引脚 以及 仅输入的引脚

Strapping 引脚

GPIO 0
GPIO 2
GPIO 4
GPIO 5 (启动时必须为高电平)
GPIO 12 (启动时必须为低电平)
GPIO 15 (启动时必须为高电平)

注意:

在硬件上要注意使用外接模块时不能将GPIO12拉高,否则将导致ESP32启动异常。还有一些GPIO在启动或重置时其状态更改为高或者输出PWM信号,在使用时需要注意。

仅输入引脚

GPIO 34 到 39 是 GPI – 仅输入引脚。这些引脚没有内部上拉或下拉电阻。它们不能用作输出,因此只能将这些引脚用作输入:

GPIO 34
GPIO 35
GPIO 36
GPIO 39

这些引脚都是ESP32用于引导加载程序或者烧录模式/在大多数内置USB/Serial的开发板上,不需要担心这些引脚的状态,开发板会把这些引脚设置为正确的状态,以便使用烧录或启动模式。

但是,如果你有外设连接到这些引脚上,当你在尝试上传新代码、用新固件烧写ESP32或重置电路板时可能会遇到麻烦,例如不明原因的错误和失败。可能是因为这些外设阻止ESP32进入正确的模式。

所以以上的引脚 不建议在项目中使用。

esp32-pins-detail

让我们更详细地分析ESP32引脚及其功能。

GPIO引脚

ESP32开发板有25个GPIO引脚,可以通过编程方式分配给各种功能。每个启用的GPIO都可以配置为内部上拉或下拉或设置为高阻抗。

仅输入GPIO引脚

GPIO34、GPIO35、GPIO36(VP)和GPIO39(VN)引脚无法配置为输出,它们可以用作数字输入、模拟输入或其他目的。另请注意,它们没有像其他GPIO引脚那样具有内部上拉或下拉电阻。

同样,GPIO36(VP)和GPIO39(VN)引脚也是ADC超低噪声前放大器的组成部分,这有助于配置Pre-Amp的采样时间和噪声。

ESP32中断引脚

所有GPIO都可以配置为中断。

ADC引脚

ESP32具有15个12位ADC输入通道。这些GPIO可用于将引脚上的模拟电压转换为数字数字。

ESP32 有 18 x 12 位 ADC 输入通道(而ESP8266 只有 1x 10 位 ADC)。这些是可用作 ADC 和相应通道的 GPIO:

与某些数字外设(PWM、软件 SPI 和 I2C)不同,ADC 引脚是固定的,即您必须使用具有 ADC 功能的预定义 GPIO 引脚,并且不能在软件中对其进行配置。但是,您必须了解一些限制。

尽管 ESP32 有 18 个通道的 ADC,但并非所有 ADC 引脚都可供用户使用。在 8 个 ADC1 通道中,只有 6 个可用(ACD1_CH0 和 ACD1_CH3 到 ACD1_CH7),而 ADC1_CH1 和 ADC1_CH2 不可用(即使引脚在 ESP32 开发板中没有暴露)。

来到ADC2,就有些复杂了。当您使用 ESP32 的 Wi-Fi 时,Wi-Fi Driver 使用 ADC2 Peripheral。因此,只有在未启动 Wi-Fi 驱动程序时才能使用 ADC2。

即使您正在使用 ADC2(假设未使用 Wi-Fi),所有引脚也并非随时可用,因为与 ADC2 相关的一些引脚用于其他重要目的(引导绑定)。

ADC ChannelPin NameGPIO PinNotes
ACD1_CH0A036可用 / 内置霍尔传感器
ACD1_CH1\37不可用
ACD1_CH2\38不可用
ACD1_CH3A339可用 / 内置霍尔传感器
ACD1_CH4A432可用
ACD1_CH5A533可用
ACD1_CH6A634可用
ACD1_CH7A735可用
ACD2_CH0A104启动WIFI时不可用
ACD2_CH1A110不可用 / 用于BOOT
ACD2_CH2A122用于BOOT Strapping
ACD2_CH3A1315用于BOOT Strapping
ACD2_CH4A1413启动WIFI时不可用
ACD2_CH5A1512启动WIFI时不可用
ACD2_CH6A1614启动WIFI时不可用
ACD2_CH7A1727启动WIFI时不可用
ACD2_CH8A1825启动WIFI时不可用
ACD2_CH9A1926启动WIFI时不可用

ADC 输入通道具有 12 位分辨率。这意味着您可以获得范围从 0 到 4095 的模拟读数,其中 0 对应于 0V,4095 对应于 3.3V。您还可以在代码和 ADC 范围上设置通道的分辨率。

ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要牢记这一点。您将获得类似于下图所示的行为。

ESP32上的ADC是12位ADC,这意味着它具有检测4096离散模拟电平的能力。换句话说,它将将输入电压映射到0和操作电压之间的3.3V之间,为0到4095之间的整数值。

您还可以在代码中设置通道的ADC分辨率和ADC范围。

ESP32 内置霍尔效应传感器

ESP32 还具有内置霍尔效应传感器,可检测周围磁场的变化。

  • GPIO 36
  • GPIO 39

DAC引脚

ESP32具有两个8位DAC通道,可用于将数字信号转换为真正的模拟电压。它可以用作控制模拟设备的数字电位计。

ESP32上的双DAC具有8位分辨率,这意味着0到256之间的值将产生一个模拟电压在0到3.3V之间。

触摸引脚

ESP32具有9个电容接触式GPIO。当电容载荷(例如人的手指)与GPIO紧邻时,ESP32检测到电容的变化。

通过将它们连接到任何导电物体,例如电线、螺纹、箔、布、导电涂料等。这些电容式触摸引脚也可以用来从深度睡眠中唤醒ESP32。

SPI引脚

SPI引脚ESP32具有三个SPI(SPI,HSPI和VSPI),支持从机和主机模式。这些SPI还支持以下通用SPI特征:

● SPI格式转移的4个正时模式

● 最多80 MHz和80 MHz的分开时钟

● 最多64字节FIFO

仅VSPI和HSPI是可用的SPI接口,并且集成的闪存芯片使用第三个SPI总线。标准库通常在两者之间使用VSPI引脚。默认情况下,可以用的SPI的引脚映射是:

SPIMOSIMISOCLKCS
VSPI(SPI3)GPIO 23GPIO 19GPIO 18GPIO 5
HSPI(SPI2)GPIO 13GPIO 12GPIO 14GPIO 15

SPI(Serial Peripheral Interface) 协议是由摩托罗拉公司提出的通讯协议,即串行外围设备接口,是一种高速全双工的通信总线。它被广泛地使用在 ADC、LCD 等设备与 MCU 间,要求通讯速率较高的场合。

芯片的管脚上只占用四根线。
MISO: 主器件数据输出,从器件数据输入。
MOSI:主器件数据输入,从器件数据输出。
SCK: 时钟信号,由主设备控制发出。
NSS(CS): 从设备选择信号,由主设备控制。当NSS为低电平则选中从器件。

ESP32集成了4组SPI外设。

  • SPI0SPI1在内部用于访问ESP32所连接的闪存。两个控制器共享相同的SPI总线信号,并且有一个仲裁器来确定哪个可以访问该总线。
  • SPI2SPI3通用SPI控制器,有时分别称为HSPI和VSPI。它们向用户开放。SPI2和SPI3具有独立的总线信号,分别具有相同的名称。每条总线具有3条CS线,最多能控制6个SPI从设备。

需要注意的是,HSPI和VSPI并不是网友们认为的high-speed SPI 和Very High-speed SPI,这是SPI和HSPI、VSPI是一样的,只不过是换个名字用于区分,SPI相当于SPI0或SPI1,HSPI相当于SPI2,VSPI相当于SPI3。

I2C引脚

ESP32具有单个I2C总线,可让您连接多达112个传感器和外围设备。默认情况下,SDA和SCL引脚分配给以下引脚。但是,您可以在带有Wire.Begin(SDA,SCL)命令的任何GPIO引脚上键入I2C协议。

其实在ESP32中任何引脚都可以定义为SDA或SCL,但不到逼不得已不推荐这么做。

I2S 高速数位音讯传输标准协议

在ESP32引脚上实际是标记为 DAC1 和 DAC2

  • GPIO 25
  • GPIO 26

UART引脚

ESP32具有2个UART接口,即UART0和UART2,可提供异步通信(RS232和RS485)和IRDA支持,并以最高5Mbps进行通信。

● UART0引脚连接到USB到串行转换器,用于闪烁和调试。因此,不建议使用UART0引脚。

● 另一方面,UART2是附加的串口1引脚,并且未连接到USB到串行转换器。这意味着您可以使用它们连接到诸如GPS、指纹传感器等的UART设备。

PWM引脚

开发板有25个由脉冲宽度调制(PWM)控制器控制的PWM引脚的通道(几乎所有GPIO引脚)。PWM输出可用于驱动数字电动机和LED。

控制器由PWM计时器和PWM操作员组成。每个计时器都以同步或独立的形式提供时间,并且每个PWM操作员为一个PWM通道生成波形。

ESP32 PWM 控制器主要设计用于控制 LED 的强度,但它也可用于生成其他目的的 PWM 信号。它有16个通道,可以产生独立的PWM波形。

ESP32 PWM 控制器有 8 个高速通道和 8 个低速通道,我们总共有 16 个通道。它们根据速度分为两组。每组有 4 个定时器/8 个通道。这意味着每两个通道共享同一个定时器。因此,我们无法独立控制每对通道的 PWM 频率。

所有可以作为输出的引脚都可以用作 PWM 引脚(GPIO 34 到 39 不能产生 PWM)。

要设置 PWM 信号,您需要在代码中定义这些参数:

  • 信号的频率;
  • 占空比;
  • 脉宽调制通道
  • 要输出信号的 GPIO。

RTC GPIO引脚

一些GPIO被引到RTC低功率子系统,它们称为RTC GPIO。这些是特殊的引脚,用于当超低功率(ULP)协作者运行时从深度睡眠中唤醒ESP32。以下GPIO可以用作外部唤醒源。

电源引脚

有两组电源引脚 - VIN引脚和3.3V引脚。如果您具有调节的5V电压源,则可以将VIN引脚用于直接提供ESP32及其外围设备。 3.3V引脚是板载电压调节器的输出。该引脚可用于为外部组件提供电源。 GND是ESP32开发板的地引脚。

EN引脚

EN引脚用于启用ESP32。上拉高电平时启用芯片。当拉低时,芯片以最小的功率工作。


标题:详解ESP32模块的引脚分配图和定义
作者:llilei
地址:http://solo.llilei.work/articles/2024/04/05/1712282927452.html