ESP32 Arduino引脚分配参考:您应该使用哪些 GPIO 引脚?

ESP32 芯片有 48 个引脚,具有多种功能。并非所有 ESP32 开发板中的所有引脚都暴露出来,有些引脚无法使用。

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

下图显示了 ESP-WROOM-32 引脚排列。如果您使用ESP32 裸芯片构建定制板,可以将其用作参考:

ESP32 引脚排列芯片 ESP-WROOM-32

注意:并非所有开发板都可以访问所有 GPIO,但无论您使用哪种开发板,每个特定 GPIO 都以相同的方式工作。如果您刚刚开始使用 ESP32,我们建议您阅读我们的指南:ESP32 开发板入门。

ESP32 引脚分配参考:您应该使用哪些 GPIO 引脚?

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 芯片的多路复用功能,这是可能的。

虽然您可以在软件上定义引脚属性,但默认分配的引脚如下图所示(这是具有36 个引脚的ESP32 DEVKIT V1 DOIT 板的示例- 引脚位置可能会根据制造商而变化)。

 

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

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

GPIOInputOutputNotes
0pulled upOKoutputs PWM signal at boot, must be LOW to enter flashing mode
1TX pinOKdebug output at boot
2OKOKconnected to on-board LED, must be left floating or LOW to enter flashing mode
3OKRX pinHIGH at boot
4OKOK
5OKOKoutputs PWM signal at boot, strapping pin
6xxconnected to the integrated SPI flash
7xxconnected to the integrated SPI flash
8xxconnected to the integrated SPI flash
9xxconnected to the integrated SPI flash
10xxconnected to the integrated SPI flash
11xxconnected to the integrated SPI flash
12OKOKboot fails if pulled high, strapping pin
13OKOK
14OKOKoutputs PWM signal at boot
15OKOKoutputs PWM signal at boot, strapping pin
16OKOK
17OKOK
18OKOK
19OKOK
21OKOK
22OKOK
23OKOK
25OKOK
26OKOK
27OKOK
32OKOK
33OKOK
34OKinput only
35OKinput only
36OKinput only
39OKinput only

继续阅读有关 ESP32 GPIO 及其功能的更详细和深入的分析。

仅输入引脚

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

  • 通用输入输出口34
  • 通用输入输出口35
  • 通用输入输出口36
  • 通用输入输出口39

ESP-WROOM-32 上集成的 SPI 闪存

某些 ESP32 开发板中暴露了 GPIO 6 至 GPIO 11。不过,这些引脚连接到 ESP-WROOM-32 芯片上的集成 SPI Flash,不建议用于其他用途。因此,不要在您的项目中使用这些引脚:

  • GPIO 6(SCK/CLK)
  • 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)

注意:使用 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 引脚时需要记住这一点。您将得到类似于下图所示的行为。

ESP32 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库时想使用其他引脚,只需调用:

Wire.begin(SDA, SCL);

SPI

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

SPI莫西味噌时钟脉冲CS
VSPI通用输入输出口23通用输入输出口19通用输入输出口18通用输入输出口5
HSPI通用输入输出口13通用输入输出口12通用输入输出口14通用输入输出口15

 

中断

所有 GPIO 均可配置为中断。

捆扎别针

ESP32 芯片有以下捆扎引脚:

  • GPIO 0(必须为低电平才能进入启动模式)
  • GPIO 2(启动期间必须悬空或为低电平)
  • 通用输入输出口4
  • GPIO 5(启动期间必须为高电平)
  • GPIO 12(启动期间必须为低电平)
  • GPIO 15(启动期间必须为高电平)

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

但是,如果您有外设连接到这些引脚,则在尝试上传新代码、使用新固件刷新 ESP32 或重置开发板时可能会遇到困难。如果您有一些外设连接到捆绑引脚,并且您在上传代码或刷新 ESP32 时遇到问题,可能是因为这些外设阻止了 ESP32 进入正确的模式。

启动时引脚为高电平

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

  • 通用输入输出口1
  • 通用输入输出口3
  • 通用输入输出口5
  • GPIO 6 至 GPIO 11(连接至 ESP32 集成 SPI 闪存 – 不建议使用)。
  • 通用输入输出口14
  • 通用输入输出口15

启用(EN)

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

GPIO 电流消耗

根据 ESP32 数据表中的“推荐工作条件”部分,每个 GPIO 消耗的绝对最大电流为 40mA。

ESP32 内置霍尔效应传感器

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/174452.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

警方打击了大规模网络钓鱼提供商BulletProftLink

导语 最近,马来西亚皇家警察宣布成功打击了一个名为BulletProftLink的大规模网络钓鱼提供商。这个提供超过300个钓鱼模板的平台被查封,给全球网络安全带来了巨大的利好消息。本文将带您了解这个引人注目的行动背后的故事,并揭示BulletProftLi…

USB拦截工具

USB 闪存驱动器对组织的安全和数据构成了独特的威胁。它们的便携性和充足的存储容量使它们成为数据盗窃的便捷媒介。 什么是 USB 拦截器 USB(通用串行总线)阻止程序用于禁用插入可移动存储设备的端口,便携性和充足的存储容量使 USB 成为可能…

qt+opengl 着色器VAO、VBO、EBO(四)

文章目录 一、顶点着色器和片段着色器代码分析1. 着色器12. 顶点着色器2 二、使用步骤1. 使用着色器12. 使用着色器23. 在着色器2中使用EBO 三、完整代码 一、顶点着色器和片段着色器代码分析 1. 着色器1 用到的坐标矩阵, 四个四边形顶点坐标 float vertices_data[36] {// 所…

深度学习(生成式模型)——Classifier Guidance Diffusion

文章目录 前言问题建模条件扩散模型的前向过程条件扩散模型的反向过程条件扩散模型的训练目标 前言 几乎所有的生成式模型,发展到后期都需要引入"控制"的概念,可控制的生成式模型才能更好应用于实际场景。本文将总结《Diffusion Models Beat …

通过cpolar实现外网ssh远程连接linux

现在我有个想法,就是希望通过外网能够远程连接到我的开发板。这里我们就需要使用到一种技术,内网穿透。 内网穿透是一种将内部网络中的设备通过外网进行访问的技术。在linux系统中,实现内网穿透有多种方式,其中最常见的方法是使用…

微信小程序:页面跳转传参问题

今天后端大兄弟突然拿着一个反编译过来的小程序源码,问能不能改。我心里直道好家伙,WebGIS开发的岗位,前端的活儿真是一个不少。大致看了看有几处是调整页面和接口修改的,源码部分和Vue项目语法十分相像,就临阵磨枪&am…

RT-Thread系列10——ETH网口设备

文章目录 1. ETH测试第一步:cubemx配置。第二步:board.h配置。第三步:rtthread settings配置第四步:以太网复位引脚设置第五步:修改rtthread源码第六步:修改 cubemx 生成的 main 函数第七步:编译…

单链表经典OJ题(三)

目录 1、反转链表 2、合并两个有序链表 3、链表的中间结点 4、环形链表的约瑟夫问题 5、移除链表元素 6、移除元素 1、反转链表 206. 反转链表 - 力扣(LeetCode) 翻转链表的实质就是更改当前结点的前驱结点和后继结点 假设原链表为:1->2->…

【教3妹学编辑-mysql】mybatis查询条件遇到的坑及解决方案

2哥 :3妹,今天怎么下班这么晚啊。 3妹:嗨,别提了,今天线上出bug了, 排查了好久。 2哥:啊,什么问题呀? 3妹:我们内部的一个管理系统报错了, 最近排查下来是myb…

[CANN训练营]UART通信笔记

文章目录 前言一、前提知识1.串行通信2.并行通信3.单工、半双工、全双工通信3.1单工通信3.2半双工通信3.3全双工通信 4.补充:通信速率 二、UART通信1.UART通信2.UART工作原理 总结 前言 在ROS学习中,我们在入门基础除了ROS的小乌龟外,在通信…

YOLOV5中parser参数配置

源码下载链接:ultralytics/yolov5: YOLOv5 🚀 in PyTorch > ONNX > CoreML > TFLite (github.com) 需要配置的参数:--data parser.add_argument(--data, ...):添加一个用于数据配置文件的路径的参数。 可以直接修改&am…

【算法|动态规划 | 区间dp No.1】AcWing 282. 石子合并

个人主页:兜里有颗棉花糖 欢迎 点赞👍 收藏✨ 留言✉ 加关注💓本文由 兜里有颗棉花糖 原创 收录于专栏【AcWing算法提高学习专栏】【手撕算法系列专栏】 🍔本专栏旨在提高自己算法能力的同时,记录一下自己的学习过程&a…