ESP32 开发笔记: GPIO 参考指南

道锋潜鳞
2023-04-04 / 0 评论 / 41 阅读 / 正在检测是否收录...

前言

前几天发了个关于esp32引脚定位的图,想了想再发篇文章说明每个管脚具体的用处和限制

正文

ESP32 芯片有48个引脚,具有多种功能,并不是所有的 ESP32 开发板的管脚都暴露在外,有些管脚不能使用。下图显示了典型 ESP-WROOM-32 模块的引脚排列。它由 38 针组成(每个长边 14 针,底部短边 10 针)。通过图片可知,除开3.3V和3个GND, ESP-WROOM-32 模块有34个可编程GPIO端口。

202304020806208515.webp

ESP32每个 GPIO 消耗的绝对最大电流为 40mA。ESP32 还具有内置霍尔效应传感器,可检测周围磁场的变化。

关于如何使用 ESP32 GPIO 有很多问题。你应该使用什么引脚?您应该避免在项目中使用哪些引脚?这篇文章旨在成为一份简单易懂的 ESP32 GPIO 参考指南。

以下是几种不同版本的开发板引脚,可以参考一下

202304041303113464.webp
202304041306183919.webp
202304041306335514.webp
设计厂商不同,开发板的管脚也不相同

外设(Peripherals)

ESP32 DEVKIT V1 DOIT 板具有 36个管脚,但管脚位置可能因制造商而异,38个管脚的开发板是在 EN 和 GPIO23 的上面各多1个3v3 和1个 GND引脚,管脚位置可能因制造商而异。
202304041303113464.webp

  • 1812ADC 通道
  • 28DAC 通道
  • 16PWM 通道
  • 3UART 接口
  • 3SPI 接口
  • 2I2C 接口
  • 2I2S 接口
  • 10电容式触摸感应 GPIO
  • 16RTC GPIO

ADC 和 DAC 引脚是出厂预定义的 ,您必须使用制造商指定的引脚。但其他功能如 PWM、SPI、UART、I2C 等可以通过程序分配给任何 GPIO 引脚。

GPIO接口

ESP32 芯片有34个可编程的GPIO引脚,每个引脚执行多个功能,也就是IO口复用,设置IO口功能的时候只有一个功能会被激活。可以在程序中将引脚配置为 GPIO 、 ADC 、UART等等。

此外,还有一些具有特定功能的引脚,使其适合或不适合特定项目。下表显示了哪些引脚最适合用作输入、输出以及需要谨慎使用的引脚。

以绿色突出显示的引脚可以使用。黄色突出显示的可以使用,但您需要注意,因为它们可能主要在启动时出现意外行为。 不建议将红色突出显示的引脚用作输入或输出。

202304041317134709.webp

仅输入GPIO (Input only pins)

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

  • GPIO 34
  • GPIO 35
  • GPIO 36
  • GPIO 39

电容式触摸 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)

了解如何在 Arduino IDE 中使用触控引脚: ESP32 Touch Pins with Arduino IDE

模数转换器 (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)

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

ESP32 ADC 引脚没有线性行为。您可能无法区分 0 和 0.1V,或 3.2 和 3.3V。使用 ADC 引脚时需要牢记这一点。

ESP32 上有 2 个 8 位 DAC 通道,用于将数字信号转换为模拟电压信号输出。这些是 DAC 通道:

  • DAC1 (GPIO25)
  • DAC2 (GPIO26)

脉宽调制 ( PWM)

ESP32 LED PWM 控制器有 16 个独立通道,可配置为生成具有不同属性的 PWM 信号。所有可以作为输出的引脚 都可以用作 PWM 引脚。

注意:所有GPIO端口中,GPIO 34 到 39 不能生成 PWM)。

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

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

实时时钟 (RTC)

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)

UART

ESP32 有3个 UART ,UART1用作板载USB转串口程序一键下载, ESP32 DEVKIT V1 DOIT 板上UART0和UART2的引脚为:

UARTGPIO
UART0_TXGPIO1
UART0_RXGPIO3
UART2_TXGPIO17
UART2_RXGPIO16

I2C

ESP32 有2个 I2C 通道,任何引脚都可以设置为 SDA 或 SCL。在 Arduino IDE 中使用 ESP32 时,默认的 I2C 引脚为:

  • GPIO 21 (SDA)
  • GPIO 22 (SCL)

SPI

默认情况下,SPI 的引脚映射为:
202304041323163446.webp

中断(INT)

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

使能 (EN)

Enable (EN) 是 3.3V 稳压器的使能引脚。它被上拉,所以接地以禁用 3.3V 稳压器。例如,这意味着您可以使用此引脚连接到按钮来重新启动 ESP32。

集成闪存(SPI flash)

GPIO 6 到 GPIO 1 暴露在一些 ESP32 开发板上。但是,这些引脚连接到 ESP-WROOM-32 芯片上的集成 SPI 闪存,不推荐用于其他用途。所以,不要在你的项目中使用这些引脚:

  • GPIO 6 (SCK/CLK)
  • GPIO 7 (SDO/SD0)
  • GPIO 8 (SDI/SD1)
  • GPIO 9 (SHD/SD2)
  • GPIO 10 (SWP/SD3)
  • GPIO 11 (CSC/CMD)

Strapping Pins

ESP32 芯片有以下捆扎引脚:

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

这些用于将 ESP32 置于引导加载程序或闪烁模式。在大多数带有内置 USB/Serial 的开发板上,您无需担心这些引脚的状态。该板将引脚置于正确的状态以进行闪烁或启动模式。

但是,如果您将外围设备连接到这些引脚,您可能无法尝试上传新代码、使用新固件刷新 ESP32 或重置电路板。如果您有一些外围设备连接到捆绑引脚,并且在上传代码或刷新 ESP32 时遇到问题,可能是因为这些外围设备阻止了 ESP32 进入正确模式。重置、闪烁或启动后,这些引脚按预期工作。

Pins HIGH at Boot

一些 GPIO 在启动或复位时将其状态更改为 HIGH 或输出 PWM 信号。这意味着如果您有连接到这些 GPIO 的输出,您可能会在 ESP32 重置或启动时得到意外结果。

  • GPIO 1
  • GPIO 3
  • GPIO 5
  • GPIO 6 至 GPIO 11 (连接到 ESP32 集成 SPI 闪存 - 不推荐使用).
  • GPIO 14
  • GPIO 15

参考资料

ESP32 入门笔记02: GPIO 参考指南

0

评论 (0)

取消