ESP32及其功能:最通用的微控制器的完整指南

最后更新: 五月1 , 2026
  • ESP32 将强大的 CPU、WiFi、蓝牙和众多外设集成到一个低成本的 SoC 中。
  • 其高度复用的引脚排列最多可支持 34 个 GPIO,并具备 ADC、DAC、PWM、触摸和 RTC 功能。
  • 有多个系列(WROOM、WROVER、S2、S3、C3、C6、CAM)适用于不同类型的项目。
  • 它可以使用 Arduino、ESP-IDF 或 MicroPython 进行编程,涵盖从简单的原型到专业产品的所有内容。

ESP32开发板及其功能

如果你从事物联网、家庭自动化或自动化系统方面的工作,迟早会接触到ESP32。当你开始查找相关信息时,很容易比一开始更加困惑:引脚在这里,型号在那里,低功耗模式,WiFi,蓝牙,摄像头,PSRAM……看起来很混乱,但实际上,如果你冷静地理解它,它是一个非常连贯的平台。

本文将为您提供一份全面且条理清晰的ESP32概述:它究竟是什么,硬件层面的功能,引脚和特殊功能的组织方式,有哪些芯片系列,它们之间有何区别,哪些开发板最常用,每种开发板最适合您的需求,以及如何开始实际编程。本文旨在帮助您清晰了解ESP32生态系统,并知道如何选择和使用合适的开发板,避免出错。

智能建筑中的执行器
相关文章:
智能建筑中的执行器:实现家庭和楼宇自动化的关键

ESP32是什么?它为什么如此受欢迎?

ESP32 是由乐鑫科技(Espressif Systems)开发的一款低成本、低功耗的 32 位系统级芯片 (SoC)。它将强大的微处理器、Wi-Fi、蓝牙(包括标准蓝牙和低功耗蓝牙)、存储器、模数转换器以及各种外设集成到单个芯片上。这使其成为互联项目的“瑞士军刀”。

经典款采用双核 Xtensa LX6 微处理器,通常运行频率为 160 或 240 MHz,性能最高可达 600 DMIPS。较新的系列(例如 ESP32-C3 或 C6)采用低功耗 RISC-V 内核,而其他系列,例如 S2/S3,则在内存、功耗和轻量级 AI 功能方面有所改进。

ESP32 的关键特性之一是将WiFi 802.11 b/g/n 和蓝牙(BR/EDR 和 BLE)集成在同一芯片上,共享无线电模块。这省去了外部连接模块,节省了电路板空间,并降低了成本。因此,它已成为家庭自动化项目、联网传感器、自动化系统和商业原型的实际标准。

除了处理器和无线电模块外,ESP32 还将520 KiB 的 SRAM和 ROM 直接集成到 SoC 中,并带有用于通过 SPI 管理外部闪存的控制器。商用模块(例如 WROOM 或 WROVER)通常包含 4 到 16 MB 的集成闪存,有些模块还添加了外部 PSRAM 以满足对性能要求更高的应用(图形、摄像头、人工智能等)。

内部架构、内存和能源管理

ESP32 的内部架构结合了一个或两个 Xtensa LX6/LX7 或 RISC-V 主内核和一个超低功耗 (ULP) 协处理器。该协处理器旨在以低功耗模式执行小型任务,例如在芯片其余部分处于睡眠状态以节省电池电量时定期读取传感器数据。

内存分为多个区域:除了处理器使用的520 KiB 主 SRAM外,芯片还包含一个快速 RTC RAM 区域(约 8 kB)和一个慢速 RTC RAM 区域(约 8 kB)。快速 RTC RAM 允许在深度睡眠模式下保留数据,以便在唤醒后无需重新计算即可恢复设置或状态。

在存储方面,典型的设计是基于SPI连接的闪存,固件和其他非易失性数据存储在其中。许多ESP32 WROOM模块配备4MB闪存,而更高级或面向摄像头的版本(例如带有PSRAM的ESP32-WROVER、ESP32-S3等)则可配备8MB、16MB或更大的闪存。

电源管理是该平台的另一大优势。该芯片集成了内部低压差线性稳压器 (LDO)、不同的电源域以及多种节能模式。在深度睡眠模式下,功耗可降至约 5 μA,可通过 GPIO、定时器、触摸传感器或 ADC 测量值唤醒,具体取决于 RTC 和 ULP 协处理器的配置方式。

在安全性方面,ESP32 支持所有标准的 IEEE 802.11 功能(最新版本支持 WPA、WPA2 和 WPA3,以及 WAPI),并提供安全启动机制和闪存加密。它还集成了用于 AES、SHA-2、RSA、ECC 和随机数生成器 (RNG) 的硬件加速器,以及一个 1024 位 OTP 区域,用于存储不可变的密钥和参数。

ESP32引脚图和功能复用

初次接触 ESP32 DevKitC 或类似产品时,最引人注目的莫过于其引脚数量和多种功能。芯片上最多可配备 34 个 GPIO 引脚,但其中许多引脚与其他内部外设复用,或专用于特定用途。

引脚复用是ESP32 的一项关键特性。通过配置芯片的引脚矩阵,大多数内部信号(UART、I2C、SPI、PWM 等)都可以路由到几乎任何 GPIO,而不会造成明显的性能损失。电路板上显示的引脚分配是默认的,但通常可以根据需要重新分配功能。

在设计项目时,务必注意某些引脚有特殊限制:有些引脚用于启动(启动引脚),有些连接到 SPI 闪存,还有一些与 JTAG 等调试接口相关。如果使用不当,系统可能无法启动或变得不稳定。

ESP32 DevKitC 或 NodeMCU-32S 开发板通过两排排针引出这些引脚。虽然不同厂商的布局可能略有差异,但它们通常共享相同的 GPIO 编号和大部分功能,因此引脚图和表格可以在不同开发板之间通用。

  DLSS 4.5 与 DLSS 4 的详细区别

特殊引脚:连接引脚、仅输入引脚、实时时钟引脚和触觉引脚

在GPIO引脚排列中,有一组启动配置引脚,也称为启动配置引脚。这些引脚用于确定芯片的启动方式、某些内部组件的电压以及SPI闪存的一些参数。系统复位期间会读取这些引脚,并将此时的逻辑电平锁存,直到下次复位或断电。

ESP32 上常用的引脚包括GPIO0、GPIO2、GPIO4、GPIO5、GPIO12 和 GPIO15。例如,GPIO0 必须为低电平才能进入下载模式;启动期间不应强制将 GPIO2 置高;GPIO5 和 GPIO15 通常带有上拉电阻以确保状态正确;GPIO12 用于选择某些存储器的电压。虽然这些引脚可以在电路中重复使用,但最好不要过载它们,也不要使用在开机期间改变其电平的电路。

还有一小部分引脚仅供数字和/或模拟输入,也就是说,它们不能用作输出:GPIO34、GPIO35、GPIO36 和 GPIO39。此外,与其他 GPIO 引脚不同,这些引脚没有内部上拉或下拉电阻,因此如果需要稳定它们的电平,则必须外部添加电阻。

一些 GPIO 连接到低功耗 RTC 子系统,被称为RTC 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。这些引脚可以实现的功能包括:使用 ULP 协处理器或低功耗中断源将芯片从深度睡眠模式唤醒。

此外,ESP32 还集成了10 个电容式触摸传感器,分别对应特定的 GPIO 引脚:TOUCH0 (GPIO4)、TOUCH1 (GPIO0)、TOUCH2 (GPIO2)、TOUCH3 (GPIO15)、TOUCH4 (GPIO13)、TOUCH5 (GPIO12)、TOUCH6 (GPIO14)、TOUCH7 (GPIO27)、TOUCH8 (GPIO33) 和 TOUCH9 (GPIO32)。当电容负载(例如手指)靠近这些引脚时,芯片会检测到电容的变化,从而无需额外元件即可实现触摸按钮、滑块或接近感应功能。

最后,我们必须提到EN(使能)引脚,它控制模块内部的 3,3V 稳压器。该引脚通常带有一个 3.3V 上拉电阻,将其拉低即可禁用稳压器,从而有效地复位或关闭 ESP32 的电源。许多应用将此引脚用作全局复位引脚。

GPIO、中断和模拟功能(ADC、DAC、PWM)

一般来说,ESP32 提供多达34 个 GPIO 引脚,可配置为数字输入或输出,并且大多数引脚都可以启用内部上拉或下拉电阻。几乎所有这些引脚都可以配置为中断源,这大大简化了事件响应系统(按钮、传感器、检测器等)的设计。

模拟部分功能相当全面:ESP32 集成了两个 12 位 SAR ADC,可提供多达 18 个输入通道。这些通道分为 ADC1(8 个通道)和 ADC2(10 个通道)。典型的分配如下:ADC1_CH0-GPIO36、ADC1_CH1-GPIO37、ADC1_CH2-GPIO38、ADC1_CH3-GPIO39、ADC1_CH4-GPIO32、ADC1_CH5-GPIO33、ADC1_CH6-GPIO34、ADC1_CH7-GPIO35;以及 ADC2_CH0-GPIO4、ADC2_CH1-GPIO0、ADC2_CH2-GPIO2、ADC2_CH3-GPIO15、ADC2_CH4-GPIO13、ADC2_CH5-GPIO12、ADC2_CH6-GPIO14、ADC2_CH7-GPIO27、ADC2_CH8-GPIO25 和 ADC2_CH9-GPIO26。

如果您正在使用 Wi-Fi 或蓝牙,请注意一个重要细节:当无线电模块在使用时,ADC2 将不可用。在这种情况下,要进行模拟读数,您必须使用 ADC1 通道,使用 ADC1 通道不会影响连接。12 位分辨率可提供 4096 个电平(0-4095),在典型的 0-3,3V 范围内,这相当于约 0,8mV 的步长。

为了生成模拟输出信号,ESP32 内置了两个 8 位 DAC,分别连接到 GPIO25 (DAC1) 和 GPIO26 (DAC2)。这些转换器可以将 0 到 255 之间的数字值转换为 0 到 3,3V 之间的模拟电压,无需外部芯片即可生成简单的波形、电压基准、基本音频或信号调制。

在PWM领域,该电路板配备16个可编程PWM通道,由专用控制器进行管理。任何PWM通道都可以映射到不同的GPIO引脚,并且可以调节频率和占空比。它非常适合控制LED(包括调光)、舵机、直流电机以及任何需要可调PWM信号的负载。

通信接口:UART、I2C、SPI 等

ESP32 的另一大亮点在于其丰富的集成接口。在串行层面,它拥有三个硬件 UART:UART0、UART1 和 UART2,能够以高达 5 Mbps 的速度在异步模式(例如 RS232 和 RS485)甚至 IrDA 模式下运行。在大多数开发板上,UART0 引脚连接到 USB 转串口转换器,用于编程和调试,因此除非您非常熟悉相关流程,否则最好不要在最终项目中重复使用这些引脚。

UART1 通常预留给集成的 SPI 闪存,尤其是在 ESP32-S3 等模块或具有更复杂外部闪存的版本中。因此,许多指南建议,当需要连接其他 UART 设备(例如 GPS 模块、其他微控制器等)时,始终使用 UART2 作为用户串口。

就 I2C 总线而言,ESP32 集成了一个或两个 I2C 控制器(取决于型号),默认情况下,它支持标准的 I2C 总线,SDA 引脚连接到 GPIO21,SCL 引脚连接到 GPIO22。但是,与其他外设一样,您可以使用软件将 SDA 和 SCL 重新映射到其他 GPIO,例如,在 Arduino 中使用 `wire.begin(SDA, SCL)` 函数。只要地址匹配,您就可以将数十个传感器和设备连接到单个 I2C 总线上。

关于SPI,该芯片提供三种SPI总线:SPI、HSPI和VSPI。基本总线通常用于内部板载闪存,因此对于您的项目而言,您主要需要关注的是HSPI和VSPI。许多标准库默认使用VSPI与显示器、SD卡读卡器、外部无线模块等设备通信。

  什么是 Scratch:学习和教授可视化编程的完整指南

内部SPI闪存有一组特别敏感的引脚:GPIO6 (SCK/CLK)、GPIO7 (SDO/SD0)、GPIO8 (SDI/SD1)、GPIO9 (SHD/SD2)、GPIO10 (SWP/SD3) 和 GPIO11 (CSC/CMD)。这些引脚专用于与闪存通信,切勿在电路中使用;将它们连接到任何外部设备通常会导致系统崩溃、启动错误或数据损坏。

除了 UART、I2C 和 SPI 之外,ESP32 还集成了I2S、CAN 2.0、以太网 MAC、SD/SDIO 控制器、TX/RX 红外控制器、脉冲计数器和其他高级外设。这使得它能够胜任多种功能,例如用作网络网关、播放或采集数字音频、与工业总线通信,或者作为更复杂电机和编码器的控制器。

ESP32 系列及型号:WROOM、WROVER、S2、S3、C3、C6 和 ESP32-CAM

当您想购买 ESP32 时,WROOM、WROVER、S2、S3、C3、C6 或 ESP32-CAM等名称会很快出现。尽管它们都属于 ESP32 生态系统,但它们并不相同。一方面,我们有“纯粹的”SoC 芯片;另一方面,我们有集成该芯片及其他组件的模块和开发板。

“ ESP32模块”(例如ESP32-WROOM-32或ESP32-WROVER)是一个矩形金属块,内部包含芯片、闪存、有时还包含PSRAM以及天线。这些模块设计用于直接焊接在定制电路板上。许多制造商随后会在其上安装“开发板”,并添加USB端口、稳压器、可访问引脚和复位/启动按钮,例如DevKitC、NodeMCU-32S、LOLIN32等。

在我们的芯片系列中,主要有以下几种:经典的 ESP32系列(最初的双核,支持 WiFi + 蓝牙,文档非常完善)、ESP32-S2系列(单核,不支持蓝牙,原生支持 USB,非常适合专注于 WiFi 和 USB 的设备)、ESP32-S3系列(双核,拥有更大的 RAM,并改进了对 BLE 5 和摄像头或轻量级 AI 应用的支持)、ESP32-C3系列(RISC-V 内核,低成本,支持 WiFi + BLE 5,旨在取代 ESP8266)以及ESP32-C6系列(支持 WiFi 6、BLE 5,并在某些情况下支持 Thread 等技术,专为家庭自动化和现代网络而设计)。

ESP32-WROOM模块是传统开发板中最常见的模块。它通常配备 4MB 闪存(也有 8MB 或更大容量的版本)、标准内部 RAM 以及集成的 Wi-Fi 和蓝牙功能。它非常适合传感器、自动化和智能家居等通用项目,这些项目不需要摄像头或大量的额外 RAM。

ESP32-WROVER模块增加了外部 PSRAM,使其更适合需要大量内存的项目,例如图像处理、大缓冲区、图形应用程序或嵌入式 AI。它的价格通常也更高一些;如果你的项目用不到这些额外的内存,那么你实际上是在为用不到的东西买单。

ESP32-CAM开发板已成为低成本视频监控项目的经典之选。它集成了 ESP32 芯片、摄像头(通常为 OV2640 传感器)和 microSD 卡槽,非常适合构建家用 IP 摄像头、智能门铃或进行简单的视觉实验。然而,它的可用 GPIO 引脚数量明显较少,而且编程和供电也更为敏感。

如何为您的项目选择合适的 ESP32 型号

选择合适的 ESP32 型号与其说是记住所有名称,不如说是要明确四个关键要求:是否需要摄像头、是否优先考虑低电池功耗、应用程序是否需要大量内存(例如 PSRAM)以及是否需要特定技术(例如 BLE 5 或 WiFi 6)。

如果你是新手,想要一块可以用来学习、安装传感器、尝试 Wi-Fi 和蓝牙功能以及学习大多数教程的开发板,那么最明智的选择通常是带有 WROOM 模块的 ESP32 开发套件。它价格实惠,与示例和库高度兼容,并且拥有丰富的文档。对于许多“普通”的物联网和智能家居项目来说,这个选择绰绰有余。

当您的项目包含集成摄像头时,您有两个主要选择:使用 ESP32-CAM 板(非常经济实惠且紧凑,是简单 WiFi 摄像头的理想选择),或者如果您需要更高的性能、更复杂的算法或带屏幕的用户界面,则可以选择支持摄像头和更大内存的 ESP32-S3。

如果您优先考虑低功耗和电池供电,特别是对于大部分时间处于睡眠模式的传感器节点,ESP32-C3 系列是一个非常不错的选择。它采用 RISC-V 架构,具备先进的 Wi-Fi 和 BLE 功能,功耗极低,并且足以满足传感、数据传输和基本逻辑任务的需求。

对于重视WiFi 6、BLE 5 以及未来对 Thread 或 Matter 等技术支持的“下一代”智能家居项目而言,ESP32-C6 系列芯片尤其具有发展潜力。虽然它比经典的 ESP32 更新一些,普及程度也略逊一筹,但它的设计旨在适应日益复杂的智能家居生态系统。

典型用例及与其他平台的比较

在日常应用中,ESP32 常用于家庭自动化、传感器、可穿戴设备、自动化系统和物联网原型开发。一个典型的例子是控制灯、插座、百叶窗或电机的继电器,并通过 Wi-Fi 与本地服务器或云端通信。另一个常见的应用是温度、湿度、人体感应或空气质量传感器,它们会定期向后端报告数据。

由于集成了蓝牙(包括 BLE),它也被广泛用于与手机通信的便携式设备或可穿戴设备:心率监测器、计步器、小型睡眠监测器等。WiFi 可以用于将数据上传到互联网或提供网络配置界面,而 BLE 则负责与应用程序或其他附近传感器进行通信。

另一个非常常见的应用是将 ESP32 用作系统的网关或核心,通过 UART、SPI 或 I2C 与其他模块(例如,经典的 Arduino、工业传感器、显示器等)通信,并通过 Wi-Fi 提供 API、MQTT 或 Web 界面。它也被用于音频项目,利用 I2S 接口以及实时处理语音和音乐的能力。

  高级内存诊断:检测真正故障的完整指南

与“纯粹的”Arduino Uno相比,ESP32拥有更强大的计算能力、集成的WiFi/蓝牙连接、更大的内存和更丰富的外部设备,同时价格却相近甚至更低。与老款ESP8266相比,ESP32在核心数、内存、GPIO引脚数量和接口种类方面都遥遥领先。

与树莓派 Pico W 相比,两者在性能和功耗方面更为接近,但 ESP32 的物联网和智能家居软件及库生态系统非常成熟。此外,由于所有连接协议栈(包括硬件安全)都集成在同一芯片上,因此无需像树莓派那样搭载完整的操作系统,即可更方便地应用于终端产品中。

开发环境:Arduino IDE、ESP-IDF 和 MicroPython

在对 ESP32 进行编程时,您有多种开发环境可供选择。业余爱好者和创客最常用的是 Arduino 生态系统:既可以使用传统的 Arduino IDE,也可以使用集成到 Visual Studio Code 中的 PlatformIO,后者简化了库和大型项目的管理。

要在 Arduino IDE 中添加 ESP32 支持,请从开发板管理器安装“ESP32 by Espressif”开发板软件包,使用 Espressif 在其 GitHub 上提供的稳定版本链接。安装完成后,您可以选择开发板(例如“ESP32 开发模块”或您开发套件中的特定型号),并使用诸如 pinMode、digitalWrite、analogRead 等函数以及 WiFi、蓝牙、HTTP、MQTT 等专用库,以几乎与 Arduino 完全相同的方式对其进行编程。

Espressif 官方开发环境是ESP-IDF(Espressif IoT 开发框架),这是一个 C/C++ 框架,可对硬件、FreeRTOS 使用、内存管理、功耗、网络协议栈和高级安全功能进行精细控制。它是专业项目或需要最大限度发挥芯片性能的项目的首选。

另一个非常便捷的选择是MicroPython,它是一个轻量级的 Python 实现,专为微控制器而设计。在 ESP32 上,它允许您使用 Python 脚本来操作 WiFi、BLE、GPIO、I2C、SPI 等接口,您可以快速上传和修改这些脚本。它尤其适用于教育、快速原型开发以及那些开发速度比效率更重要的场景。

无论选择哪种环境,都建议参考Espressif 官方文档(数据手册、入门指南、API 参考)以及包含 Arduino-ESP32 和 ESP-IDF 的示例。GitHub 社区、ESP32 专属论坛以及 Reddit 等平台也提供了大量现成的项目,可以根据您的需求进行调整。

高级引脚排列、限制以及与摄像头和 SD 卡的扩展

当你深入了解 ESP32 的使用时,你会遇到一些需要注意的引脚细节。其中之一是 ADC2 与前面提到的 WiFi/蓝牙模块不兼容;另一个是 JTAG 引脚(GPIO12、13、14 和 15)在硬件调试中的作用。如果你不使用 JTAG,可以将它们视为普通的 GPIO,但同时也要注意它们的跳线功能。

仔细规划引脚至关重要,尤其是在需要同时使用多种功能(例如 GPIO、ADC、I2C、SPI、摄像头、SD 卡等)的项目中。一些引脚预留用于电源和关键信号,例如 3.3V、GND 以及连接到 SPI 闪存的引脚。如果稳压器无法承受,则应避免从板上的 3.3V 或 5V 引脚汲取大电流,并且避免在没有适当驱动器的情况下将大负载直接连接到 GPIO 引脚。

一些专为 ESP32 设计的套件和扩展板集成了特定功能,例如OV2640 摄像头模块、microSD 卡读卡器和 18650 电池支持。它们通常提供两排引脚:一排是用于快速原型开发的母座,另一排是用于更永久安装的螺丝端子,例如在“现场”物联网项目或固定安装中。

这些扩展板通常在控制摄像头和microSD卡的引脚上带有上拉/下拉电阻,因此如果您打算将它们用作通用输入或输出,则应查阅扩展板的数据手册。诸如主电源开关、专用电池充电端口和状态指示灯等细节在构建电池供电的独立设备时至关重要。

实际上,ESP32、OV2640 摄像头、microSD 卡和 18650 电池的组合可以让你构建相当完整的远程视觉节点,能够进行流媒体传输、定期捕获图像或运行简单的检测算法,在需要时通过 USB 为电池充电,并将所有组件保持在紧凑的格式中。

在仔细研究了芯片的内部工作原理、引脚排列、产品系列、典型应用案例和开发工具之后,可以清楚地看出,ESP32 以非常实惠的价格提供了大量的集成功能、设计灵活性和低功耗选项,使其成为构建物联网、家庭自动化或结合无线连接、良好处理能力和成熟软件生态系统的自动化项目时,很难找到与之匹敌的平台。