Arduino for ESP32 ---ESP32的硬件介绍

常见ESP32开发版

市面上大部分开发版是基于 ESP32-S 和 ESP32-WROOM模组制造而成,本专栏都适用

  • NodeMCU-32S

ESP32-WROOM
NodeMCU-32S

  • ESP32-DevKitC

ESP32-DevKitC

  • 自己画的
    DIY

芯片规格

  • 双核32位MCU
  • 集成WIFI 和蓝牙
  • 时钟频率高达240MHz,512K的RAM
  • 丰富的外设:ADC,DAC,UART,SPI,IIC,I2S,电容式触摸…
  • 内置霍尔传感器和温度传感器
  • 根据不同厂商制作的开发版一般引出来的IO口有30个或其他数量

引脚介绍

ESP32 芯片有 48 个引脚,绝大多数引脚具有多种功能。但并不是所有的开发版引脚都留出来,有些引脚是不能使用的,在发开的过程中需要注意。下图是引脚功能展示图
在这里插入图片描述
*需要注意复位时输出PWM信号的引脚,避免这些引脚连接到舵机等通过PWM信号驱动的元件。

GPIO输入输出备注
0上拉,复位时输出PWM信号
1X串口TX ,复位时输出调试信息
2大部分开发版连接到板载LED
3X串口RX,复位时为高电平
4-
5复位时输出PWM信号
6xx连接SPI闪存,不可使用
7xx连接SPI闪存,不可使用
8xx连接SPI闪存,不可使用
9xx连接SPI闪存,不可使用
10xx连接SPI闪存,不可使用
11xx连接SPI闪存,不可使用
12如果在通电、复位时为高电平可能会启动失败
13-
14复位时输出PWM信号
15复位时输出PWM信号
16-
17-
18-
19-
21-
22-
23-
25-
26-
27-
32-
33-
34x只能为输入
35x只能为输入
36x只能为输入
39x只能为输入

电容式触摸 GPIO

ESP32 有 10 个内部电容式触摸传感器。这些可以感知任何带有电荷的东西的变化,比如人类皮肤。因此,他们可以检测用手指触摸 GPIO 时引起的变化。
相关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 个 12 位 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 引脚!!,ESP32的ADC是12位的分辨率,也可以通过程序设置,具体使用在后面介绍

数模转换器 (DAC)

ESP32 上有 2 个 8 位 DAC 通道,用于将数字信号转换为模拟电压信号输出。具体使用在后面介绍

  • DAC1 (GPIO25)
  • DAC2 (GPIO26)

RTC GPIO

ESP32 支持 RTC GPIO。当 ESP32 处于深度睡眠状态时,这些 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)

PWM

除了IO34、IO35、IO36、IO39,其他GPIO均可作为PWM引脚,具体使用在以后介绍

I2C

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

  • GPIO21 (SDA)
  • GPIO22 (SCL)

SPI

默认情况下,具体使用在后面介绍,SPI 的引脚映射为:

SPIMOSIMISOCLKCS
VSPIGPIO23GPIO19GPIO18GPIO5
HSPIGPIO13GPIO12GPIO14GPIO15

中断

所有GPIO均可设置为中断,具体使用在后面介绍

GPIO电流

根据 ESP32 数据手册中的“推荐工作条件”说明,每个 GPIO 消耗的绝对最大电流为 40mA

复位

EN 引脚,正常通过电阻上拉,如果EN为低则芯片被禁用。

  • 8
    点赞
  • 77
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Arduino ESP32-C3板(ESP32-C3 DevKitM)有多个硬件定时器,可以用来生成精确定时的信号,例如PWM信号、定时采样等。在这里,我们将介绍如何在Arduino ESP32-C3板上使用硬件定时器来生成PWM信号。 步骤1:引入头文件 首先,需要在Arduino IDE中引入ESP32-C3的头文件,其中包含了定时器相关的函数和常量。 #include <esp32-hal-timer.h> 步骤2:配置定时器 在Arduino ESP32-C3板上,有四个硬件定时器可供使用,分别为TIMER0、TIMER1、TIMER2和TIMER3。在使用定时器之前,需要先进行配置。以下是一个示例代码段,用于配置TIMER0。 void initTimer0() { // 配置TIMER0为PWM模式 timerAttach(TIMER0, 0, true); timerSetMode(TIMER0, TIMER_PWM_MODE, 1); timerSetFrequency(TIMER0, 1000); timerSetDuty(TIMER0, 0, 50); // 开始TIMER0 timerAlarmEnable(TIMER0); } 在上述代码中,我们首先使用timerAttach()函数将TIMER0与GPIO0引脚绑定,然后使用timerSetMode()函数将其设置为PWM模式。接下来,使用timerSetFrequency()函数设置PWM频率为1000Hz,然后使用timerSetDuty()函数设置PWM占空比为50%。最后,使用timerAlarmEnable()函数启动TIMER0。 步骤3:控制PWM输出 完成定时器的配置后,可以使用timerWrite()函数来控制PWM输出。以下是一个示例代码段,用于控制TIMER0输出PWM信号。 void loop() { for (int i = 0; i <= 100; i++) { timerWrite(TIMER0, i); delay(10); } } 在上述代码中,我们使用一个for循环来逐步增加PWM占空比,从0到100。每次循环使用timerWrite()函数来设置PWM占空比,然后使用delay()函数延时10毫秒。 总结 在Arduino ESP32-C3板上使用硬件定时器可以生成精确的PWM信号,用于控制各种设备和传感器。在使用定时器时,需要注意配置定时器的模式、频率和占空比。同时,也需要注意控制PWM输出的时序,以保证信号的稳定性和准确性。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值