ESP32 架构包括将一些外设配置到任何 GPIO 引脚的功能,由 IO MUX GPIO 管理。从本质上讲,此功能意味着我们可以使用 IO MUX 和 GPIO Matrix 将内部外设路由到不同的物理引脚。
Digtal pads是GPIO引脚,我们看到图上是一个双箭头,代表的是双向,既可以作为输入也可也作为输出。
IO MUX 中每个GPIO管脚有一组寄存器。每个管脚可以配置成GPIO功能(连接GPIO交换矩阵)或者直连功能(旁路GPIO交换矩阵,快速信号如以太网、SDIO、SPI、JTAG、UART等会旁路GPIO交换矩阵以实现更好的高频数字特性。所以高速信号会直接通过IOMUX输入和输出。)
GPIO交换矩阵则可以将部分外设映射到任意的I/O口上
要使用此功能,我们必须注意一些预防措施:
某些 GPIO 仅为 INPUT。
一些外设具有 OUTPUT 信号,必须在能够配置为 OUTPUT 的 GPIO 上使用。
一些外设,主要是高速外设、ADC、DAC、Touch 和 JTAG 使用专用的 GPIOs 引脚。
一些引脚用于连接模块上的闪存 - 这可以防止它们用于任何其他用途 - 如果外围设备被路由到这些引脚之一,设备将无法启动。
ESP32共有34个物理GPIO管脚,序号为:0-19,21-23,25-27,32-39。其中GPIO34-39仅用作输入管脚,其他的既可以作为输入又可以作为输出管脚,GPIO2为启动引脚,最好也好不要接东西。
以下是 ESP32 上的基本外设列表。外设列表可能因每个 ESP32 SoC 系列而异。要查看 ESP32-S2 和 ESP32-C3 上可用的所有外设,请查看每个数据表。
Type 类型 |
Function 功能 |
---|---|
ADC |
Dedicated GPIOs 专用 GPIO |
DAC |
Dedicated GPIOs 专用 GPIO |
Touch Sensor 触摸传感器 |
Dedicated GPIOs 专用 GPIO |
JTAG |
Dedicated GPIOs 专用 GPIO |
SD/SDIO/MMC HostController |
Dedicated GPIOs 专用 GPIO |
Motor PWM 电机 PWM |
Any GPIO 任何 GPIO |
SDIO/SPI SlaveController SDIO/SPI 从控制器 |
Dedicated GPIOs 专用 GPIO |
UART |
Any GPIO[1] 任何 GPIO[1] |
I2C |
Any GPIO 任何 GPIO |
I2S |
Any GPIO 任何 GPIO |
LED PWM |
Any GPIO 任何 GPIO |
RMT |
Any GPIO 任何 GPIO |
GPIO |
Any GPIO 任何 GPIO |
Parallel QSPI 并行 QSPI |
Dedicated GPIOs 专用 GPIO |
EMAC |
Dedicated GPIOs 专用 GPIO |
Pulse Counter 脉冲计数器 |
Any GPIO 任何 GPIO |
TWAI |
Any GPIO 任何 GPIO |
USB |
Dedicated GPIOs 专用 GPIO |
[1] 除了由 bootloader 决定的下载/编程模式。
该表格位于 Espressif 提供的每个数据表中。
在 Arduino Uno 中,我们有由硬件定义的 I2C 引脚,A4 是 SDA,A5 是 SCL。在这种情况下,我们不需要在 Wire.begin(); 函数中设置这些引脚,因为它们已经在 Wire 库中。
void setup()
{
Wire.begin(); // join i2c bus (address optional for master)
}
现在,对于 ESP32,I2C 的默认引脚是 SDA (GPIO21) 和 SCL (GPIO22)。如果您需要更改引脚,我们可以使用不同的引脚作为默认引脚的替代。要更改引脚,我们必须在调用 Wire.begin(); 之前调用 Wire.setPins(int sda, int scl); 该函数。
int sda_pin = 16; // GPIO16 as I2C SDA
int scl_pin = 17; // GPIO17 as I2C SCL
void setup()
{
Wire.setPins(sda_pin, scl_pin); // Set the I2C pins before begin
Wire.begin(); // join i2c bus (address optional for master)
}
SD卡是一种用于存储数字数据的存储卡,它是一种非易失性存储卡,可以用于移动设备、数码相机、音乐播放器、智能手机、平板电脑等各种设备。
本小节通过点亮LED和串口输出两个程序,来初步掌握ArduinoIDE、了解GPIO和串口使用、同时把开发环境与开发板的连接,上传程序的各环节跑通,
本程序是小鹏物联网智能浇花套件的单机版程序(不连接物联网),供同学们参考。
本文介绍ESP32中的中断机制,以及如何通过GPIO中断实现按钮控制。重点讲解了如何设置中断服务例程、处理中断抖动问题,并提供了消除中断抖动的示例代码。
本文主要介绍在未联网(AP热点)情况下实现WEB交互界面的CSS和javascript库。
本文介绍如何使用Arduino-ESP32库中的API函数获取ESP32的芯片、RAM信息等,并提供了一个示例程序代码。
ESP32系列(包括ESP32-S3)搭载Xtensa双核处理器,默认情况下Arduino框架仅使用单核运行用户代码,通过多核编程,可以充分利用硬件资源来提升系统响应和性能。
ESP32Encoder库是一个利用ESP32脉冲计数器硬件外设实现高效旋转编码器读取的软件库。
本文对比了几款适合物联网开发的盒子硬件参数,供大家参考。
乐动掌控采用掌控板作为主控,塑胶一体式外壳,侧面和底面开具多个乐高扩展孔位,兼容乐高积木,可完成多种创意应用。
在MicroPython的ESP32库中,NVS类用于管理非易失性存储,支持 32 位有符号整数和 二进制blob。