ESP32 EPS32简介
简介
ESP32是一系列低成本,低功耗的单片机微控制器,集成了Wi-Fi和双模蓝牙。 ESP32系列采用Tensilica Xtensa LX6微处理器,包括双核心和单核版本,内置天线开关,RF射频模块,功率放大器,低噪声接收放大器,滤波器和电源管理模块。
ESP32由总部位于上海的中国公司乐鑫信息科技创建和开发,由台积电采用40纳米工艺制造,具有超高的射频性能、稳定性、通用性和可靠性,以及超低的功耗,满足不同的功耗需求,适用于各种应用场景。它是ESP8266微控制器的后继产品。
目前 ESP32 系列的产品型号包括 ESP32 S2(单核+2.4G wifi)、ESP32 S3(双核+2.4G wifi+蓝牙5)、ESP32 C2(单核+2.4G wifi+蓝牙5)、ESP32 C3(单核+2.4G wifi+蓝牙5)和传统的ESP32模块。
特性
性能稳定
ESP32 性能稳定,工作温度范围达到 –40°C 到 +125°C。集成的自校准电路实现了动态电压调整,可以消除外部电路的缺陷并适应外部条件的变化。
超低功耗
ESP32 专为移动设备、可穿戴电子产品和物联网 (IoT) 应用而设计。作为业内领先的低功耗芯片,ESP32 具有精细的时钟门控、省电模式和动态电压调整等特性。 例如,在低功耗 IoT 传感器 Hub 应用场景中,ESP32 只有在特定条件下才会被周期性地唤醒。低占空比可以极大降低 ESP32 芯片的能耗。射频功率放大器的输出功率也可调节,以实现通信距离、数据率和功耗之间的最佳平衡。
高集成度
ESP32 是业内领先的高度集成的 Wi-Fi+ 蓝牙解决方案,外部元器件只需大约 20 个。ESP32 集成了天线开关、射频 Balun、功率放大器、低噪声放大器、滤波器以及电源管理模块,极大减少了印刷电路板 (PCB) 的面积。 ESP32 采用 CMOS 工艺实现单芯片集成射频和基带,还集成了先进的自校准电路,实现了动态自动调整,可以消除外部电路的缺陷,更好地适应外部环境的变化。因此,ESP32 的批量生产可以不需要昂贵的专用 Wi-Fi测试设备。
Wi-Fi 和 蓝牙解决方案
ESP32 可作为独立系统运行应用程序或是主机 MCU 的从设备,通过 SPI / SDIO 或 I2C / UART 接口提供 Wi-Fi 和蓝牙功能。
不同系列的比较
我们先来看看不同模组的描述,
ESP32-S2 系列
32-bit MCU & 2.4 GHz Wi-Fi

-
集成 ESP32-S2 芯片,Xtensa® 32-bit LX7 单核处理器,时钟频率高达 240 MHz
-
支持多种低功耗工作状态:精细时钟门控、动态电压时钟频率调节
-
安全机制:eFuse 存储、安全启动、Flash 加密、数字签名,支持 AES、SHA 和 RSA 算法
-
外设包括 43 个 GPIO 口,1 个全速 USB OTG 接口,SPI,I2S,UART,I2C,LED PWM,LCD 接口,Camera 接口,ADC,DAC,触摸传感器
-
可对接丰富的网络云平台、拥有通用的产品特性,极大缩短产品构建与上市时间
-
通过 RF 认证以及软件协议认证
ESP32-S3 系列
32-bit MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE)

-
Xtensa® 32 位 LX7 双核处理器,主频高达 240 MHz
-
内置 512 KB SRAM、384 KB ROM 存储空间,并支持多个外部 SPI、Dual SPI、 Quad SPI、Octal SPI、QPI、OPI flash 和片外 RAM
-
额外增加用于加速神经网络计算和信号处理等工作的向量指令 (vector instructions)
-
45 个可编程 GPIO,支持常用外设接口如 SPI、I2S、I2C、PWM、RMT、ADC、DAC、UART、SD/MMC 主机控制器和 TWAITM 控制器等
-
基于 AES-XTS 算法的 Flash 加密和基于 RSA 算法的安全启动,数字签名和 HMAC 模块,“世界控制器 (World Controller)”模块
-
通过 RF 认证以及软件协议认证
-
以下是ESP32S3 系列芯片对比,SiP flash 及 SiP PSRAM 指的是封装在芯片内部的 flash 和 PSRAM。 Octal SPI 比 Quad SPI 多占用 5 个 GPIO,即 GPIO33 ∼ GPIO37。
| 型号 | SiP flash | SiP PSRAM | 环境温度 (°C) | SPI 电压 |
|---|---|---|---|---|
| ESP32-S3 | - | - | –40 ∼ 105 | 3.3 V/1.8 V |
| ESP32-S3FN8 | 8 MB (Quad SPI) | - | –40 ∼ 85 | 3.3 V |
| ESP32-S3R2 | - | 2 MB (Quad SPI) | –40 ∼ 85 | 3.3 V |
| ESP32-S3R8 | - | 8 MB (Octal SPI) | –40 ∼ 85 | 3.3 V |
| ESP32-S3R8V | - | 8 MB (Octal SPI) | –40 ∼ 65 | 1.8 V |
ESP32-C2 系列
**32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE) **

-
RISC-V- 32 位单核处理器,主频高达 120 MHz
-
行业领先的低功耗性能和射频性能
-
内置 272 KB SRAM(其中 16 KB 专用于 cache)、576 KB ROM 存储空间
-
14 个可编程 GPIO,支持常用外设接口如 SPI、UART、I2C、LED PWM 和 DMA
-
通过 RF 认证以及软件协议认证
ESP32-C3 系列
**32-bit RISC-V MCU & 2.4 GHz Wi-Fi & Bluetooth 5 (LE) **

-
集成 ESP32-C3 芯片,RISC-V 32 位单核处理器,时钟频率高达 160 MHz
-
行业领先的低功耗性能和射频性能
-
内置 400 KB SRAM、384 KB ROM 存储空间,并支持多个外部 SPI、Dual SPI、Quad SPI、QPI flash
-
完善的安全机制:基于 RSA-3072 算法的安全启动、基于 AES-128-XTS 算法的 flash 加密、创新的数字签名和 HMAC 模块、支持加密算法的硬件加速器
-
丰富的通信接口及 GPIO 管脚,可支持多种场景及复杂的应用
-
通过 RF 认证以及软件协议认证
ESP32 系列
32-bit MCU & 2.4 GHz Wi-Fi & Bluetooth/Bluetooth LE
-
集成 ESP32 系列芯片,两个或一个可以单独控制的 Xtensa® 32-bit LX6 处理器,时钟频率可调,范围为 80 MHz 到 240 MHz
-
+19.5 dBm 天线端输出功率,确保良好的覆盖范围
-
传统蓝牙支持 L2CAP,SDP,GAP,SMP,AVDTP,AVCTP,A2DP (SNK) 和 AVRCP (CT) 协议
-
低功耗蓝牙 (Bluetooth LE) 支持 L2CAP,GAP,GATT,SMP,和 GATT 之上的 BluFi,SPP-like 协议等
-
低功耗蓝牙连接智能手机,发送低功耗信标,方便检测
-
睡眠电流小于 5 μA,适用于电池供电的可穿戴电子设备
-
外设包括电容式触摸传感器,霍尔传感器,SD 卡接口,以太网,高速 SPI,UART,I2S 和 I2C
-
通过 RF 认证以及软件协议认证
开发板
ESP32-DevKitC
这个是乐鑫公司自己家的开发板产品,价格贵,通常在68到88元之间,但质量有保证。
NodeMCU ESP32
NodeMCU,有些地方也叫(AI-Thinker)是深圳市安信可科技有限公司开发的一系列基于乐鑫ESP32的低功耗UART-WiFi芯片模组开发出来的开发板产品,价格通常二三十元,质量也不错。
技术规格书
ESP32 开发实战
1. Arduino IDE 开发环境
安装步骤:
- 下载并安装Arduino IDE(1.8.x或2.x版本)
- 打开”文件” → “首选项” → “附加开发板管理器网址”
- 添加ESP32开发板URL:
https://dl.espressif.com/dl/package_esp32_index.json - 打开”工具” → “开发板” → “开发板管理器”
- 搜索”ESP32”并安装
基础示例代码:
// LED闪烁示例
#define LED_PIN 2 // ESP32内置LED通常在GPIO2
void setup() {
pinMode(LED_PIN, OUTPUT);
Serial.begin(115200);
Serial.println("ESP32 Started!");
}
void loop() {
digitalWrite(LED_PIN, HIGH);
delay(1000);
digitalWrite(LED_PIN, LOW);
delay(1000);
Serial.println("LED toggled");
}
2. WiFi 连接示例
#include <WiFi.h>
const char* ssid = "your_ssid";
const char* password = "your_password";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
Serial.print("Connecting to WiFi");
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
Serial.println();
Serial.print("Connected! IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
// 您的代码
}
3. 蓝牙 BLE 示例
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
void setup() {
Serial.begin(115200);
Serial.println("Starting BLE work!");
BLEDevice::init("ESP32_BLE");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setValue("Hello World");
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(SERVICE_UUID);
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06);
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
Serial.println("Characteristic defined! Now you can read it in your phone!");
}
void loop() {
delay(2000);
}
4. 传感器读取示例
// DHT11温湿度传感器
#include <DHT.h>
#define DHTPIN 4
#define DHTTYPE DHT11
DHT dht(DHTPIN, DHTTYPE);
void setup() {
Serial.begin(115200);
dht.begin();
}
void loop() {
delay(2000);
float humidity = dht.readHumidity();
float temperature = dht.readTemperature();
if (isnan(humidity) || isnan(temperature)) {
Serial.println("Failed to read from DHT sensor!");
return;
}
Serial.print("Humidity: ");
Serial.print(humidity);
Serial.print(" %\t");
Serial.print("Temperature: ");
Serial.print(temperature);
Serial.println(" *C");
}
5. 低功耗应用
// 深度睡眠模式
#define uS_TO_S_FACTOR 1000000
#define TIME_TO_SLEEP 10 // 睡眠10秒
void setup() {
Serial.begin(115200);
// 配置唤醒源
esp_sleep_enable_timer_wakeup(TIME_TO_SLEEP * uS_TO_S_FACTOR);
Serial.println("Going to sleep now");
Serial.flush();
// 进入深度睡眠
esp_deep_sleep_start();
}
void loop() {
// 这行代码永远不会执行
}
6. OTA 无线更新
#include <WiFi.h>
#include <ArduinoOTA.h>
const char* ssid = "your_ssid";
const char* password = "your_password";
void setup() {
Serial.begin(115200);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
ArduinoOTA.setHostname("esp32-device");
ArduinoOTA.setPassword("admin123");
ArduinoOTA.onStart([]() {
Serial.println("Start updating");
});
ArduinoOTA.onEnd([]() {
Serial.println("\nEnd");
});
ArduinoOTA.onProgress([](unsigned int progress, unsigned int total) {
Serial.printf("Progress: %u%%\r", (progress / (total / 100)));
});
ArduinoOTA.onError([](ota_error_t error) {
Serial.printf("Error[%u]: ", error);
if (error == OTA_AUTH_ERROR) Serial.println("Auth Failed");
else if (error == OTA_BEGIN_ERROR) Serial.println("Begin Failed");
else if (error == OTA_CONNECT_ERROR) Serial.println("Connect Failed");
else if (error == OTA_RECEIVE_ERROR) Serial.println("Receive Failed");
else if (error == OTA_END_ERROR) Serial.println("End Failed");
});
ArduinoOTA.begin();
Serial.println("Ready");
Serial.print("IP address: ");
Serial.println(WiFi.localIP());
}
void loop() {
ArduinoOTA.handle();
}
7. 常见问题解决
问题1:上传失败
- 按住BOOT按钮再按RST按钮
- 检查USB线缆是否支持数据传输
- 安装CP2102或CH340驱动
问题2:WiFi连接不稳定
- 检查天线连接
- 降低WiFi发射功率
- 使用外部天线
问题3:内存不足
- 使用
ESP.getFreeHeap()监控内存 - 避免大数组和字符串
- 使用
String.reserve()预分配内存
问题4:功耗过高
- 使用深度睡眠模式
- 关闭未使用的外设
- 降低CPU频率
8. 性能优化技巧
// 1. 使用DMA提高SPI/I2C速度
#include <driver/spi_master.h>
// 2. 使用中断而非轮询
attachInterrupt(digitalPinToInterrupt(2), myISR, FALLING);
// 3. 使用FreeRTOS多任务
xTaskCreate(task1, "Task1", 10000, NULL, 1, NULL);
xTaskCreate(task2, "Task2", 10000, NULL, 1, NULL);
// 4. 优化ADC采样
analogReadResolution(12); // 12位分辨率
analogSetAttenuation(ADC_11db); // 11dB衰减
9. 项目创意
- 智能家居控制器:WiFi + MQTT + 传感器
- 气象站:温湿度、气压、风速监测
- 植物浇水系统:土壤湿度传感器 + 水泵控制
- 宠物喂食器:定时控制 + 手机APP
- 空气质量监测:PM2.5、CO2、VOC传感器
- 智能门锁:BLE + 指纹识别
- 运动追踪器:加速度计 + BLE + 手机APP
- 环境监测站:LoRa + 太阳能 + 远程传输
10. 学习资源
官方资源:
社区资源:
视频教程:
- Andreas Spiess YouTube频道
- Great Scott! YouTube频道
- Random Nerd Tutorials
希望这篇ESP32入门指南能帮助你快速上手!ESP32是一个功能强大且价格实惠的平台,适合各种物联网和嵌入式项目。开始你的ESP32之旅吧!
相关资源: