跳转至

ESP32

ESP32 是乐鑫(Espressif)推出的高性能低成本 WiFi + 蓝牙 SoC,凭借==双核处理器、丰富的外设和无线连接能力==,已成为 IoT 和嵌入式开发的首选芯片之一。


一、ESP32 是什么?

ESP32 是一款集成 ==WiFi + 蓝牙==的微控制器 SoC(System on Chip),由国产半导体公司乐鑫信息科技开发。

graph TB
    A[ESP32 SoC] --> B[处理器]
    A --> C[无线通信]
    A --> D[外设接口]
    A --> E[安全特性]

    B --> B1[双核 Xtensa LX6<br>最高 240MHz]
    B --> B2[ULP 超低功耗协处理器]

    C --> C1[WiFi 802.11 b/g/n<br>2.4GHz]
    C --> C2[Bluetooth 4.2<br>经典 + BLE]

    D --> D1[34 个 GPIO]
    D --> D2[12 位 ADC / 8 位 DAC]
    D --> D3[SPI / I2C / UART / I2S]
    D --> D4[10 个触摸传感器]
    D --> D5[LEDC PWM / MCPWM]

    E --> E1[Flash 加密]
    E --> E2[安全启动]

二、芯片型号对比

型号 CPU 主频 WiFi 蓝牙 GPIO Flash SRAM 特点
ESP32 双核 Xtensa LX6 240MHz BT 4.2 + BLE 34 外置 4~16MB 520KB 最经典,资料最多
ESP32-S2 单核 Xtensa LX7 240MHz 43 外置 320KB USB OTG,去掉蓝牙
ESP32-S3 双核 Xtensa LX7 240MHz BLE 5.0 45 外置 512KB AI 加速(SIMD),USB OTG
ESP32-C3 单核 RISC-V 160MHz BLE 5.0 22 外置 400KB 低成本 RISC-V,替代 ESP8266
ESP32-C6 单核 RISC-V 160MHz ✅ WiFi 6 BLE 5.0 + 802.15.4 30 外置 512KB WiFi 6 + Thread/Zigbee
ESP32-H2 单核 RISC-V 96MHz BLE 5.0 + 802.15.4 22 外置 320KB Thread/Zigbee/Matter

选型建议

  • 通用 IoT 项目(WiFi + BLE):ESP32 或 ESP32-S3
  • AI / 边缘计算(TensorFlow Lite):ESP32-S3(有向量指令加速)
  • 低成本替代 ESP8266:ESP32-C3
  • Matter / Thread 智能家居:ESP32-C6 或 ESP32-H2
  • USB 设备开发(HID、CDC):ESP32-S2 或 ESP32-S3

三、常见开发板

开发板 芯片 Flash 特点 参考价
ESP32-DevKitC V4 ESP32-WROOM-32E 4MB 官方开发板,30 引脚 ~15 元
ESP32-S3-DevKitC-1 ESP32-S3-WROOM-1 8~16MB 双 USB-C,AI 推理 ~30 元
NodeMCU-32S ESP32-WROOM-32 4MB 窄体设计,适合面包板 ~12 元
ESP32-C3-DevKitM-1 ESP32-C3-MINI-1 4MB 小巧,RISC-V ~10 元
ESP32-CAM ESP32-S 4MB + PSRAM OV2640 摄像头 ~20 元

四、核心架构(ESP32)

graph TB
    subgraph "ESP32 内部架构"
        CPU0[PRO_CPU<br>Xtensa LX6<br>240MHz]
        CPU1[APP_CPU<br>Xtensa LX6<br>240MHz]
        ULP[ULP 协处理器<br>超低功耗]

        BUS[总线矩阵]

        SRAM[SRAM 520KB]
        ROM[ROM 448KB]
        RTC_M[RTC 内存 16KB]

        WIFI[WiFi MAC/BB<br>802.11 b/g/n]
        BT[蓝牙 4.2<br>BR/EDR + BLE]

        GPIO_M[GPIO 矩阵<br>34 个 GPIO]
        ADC_M[ADC 18CH<br>12 位 SAR]
        DAC_M[DAC 2CH<br>8 位]
        TOUCH_M[触摸传感器<br>10 通道]
        LEDC[LEDC PWM<br>16 通道]
        SPI_M[SPI × 3]
        I2C_M[I2C × 2]
        UART_M[UART × 3]
    end

    CPU0 --> BUS
    CPU1 --> BUS
    ULP --> RTC_M

    BUS --> SRAM
    BUS --> ROM
    BUS --> WIFI
    BUS --> BT
    BUS --> GPIO_M
    BUS --> ADC_M
    BUS --> DAC_M
    BUS --> TOUCH_M

双核说明

  • PRO_CPU(CPU 0):默认运行 WiFi/BLE 协议栈
  • APP_CPU(CPU 1):默认运行用户的 setup()loop()
  • 使用 FreeRTOS 可以在两个核上自由分配任务
  • Arduino 框架下,用户代码默认运行在 CPU 1

五、开发框架对比

使用熟悉的 Arduino API,上手最快:

#include <WiFi.h>

void setup() {
    Serial.begin(115200);
    WiFi.begin("SSID", "password");
    while (WiFi.status() != WL_CONNECTED) {
        delay(500);
        Serial.print(".");
    }
    Serial.println("\nWiFi 连接成功!");
    Serial.println(WiFi.localIP());
}

void loop() {
    // ...
}

优点

  • 与 Arduino UNO 代码高度兼容
  • 大量 Arduino 库可直接使用
  • 社区资源丰富

缺点

  • 无法完全发挥 ESP32 所有特性
  • 部分底层功能需要直接调用 ESP-IDF API

乐鑫官方的 C 语言开发框架,功能最完整:

#include <stdio.h>
#include "esp_wifi.h"
#include "esp_event.h"
#include "nvs_flash.h"

void app_main(void) {
    // NVS 初始化
    esp_err_t ret = nvs_flash_init();

    // WiFi 初始化
    esp_netif_init();
    esp_event_loop_create_default();
    esp_netif_create_default_wifi_sta();

    wifi_init_config_t cfg = WIFI_INIT_CONFIG_DEFAULT();
    esp_wifi_init(&cfg);
    // ...
}

优点

  • 完整访问所有硬件特性
  • 更精细的内存和性能控制
  • 官方长期支持,文档完善

缺点

  • 学习曲线陡峭
  • 代码量大,API 较复杂

用 Python 语言开发,快速原型验证:

import network
import time

wlan = network.WLAN(network.STA_IF)
wlan.active(True)
wlan.connect('SSID', 'password')

while not wlan.isconnected():
    time.sleep(0.5)

print('WiFi 连接成功:', wlan.ifconfig())

优点

  • Python 语法,开发速度快
  • 交互式 REPL 调试

缺点

  • 执行速度比 C 慢 10~100 倍
  • 占用更多内存
  • 库支持不如 Arduino 丰富

六、开发环境搭建

  1. 打开 Arduino IDE → File → Preferences
  2. 在 Additional Boards Manager URLs 中添加:
    https://espressif.github.io/arduino-esp32/package_esp32_index.json
    
  3. Tools → Board → Boards Manager → 搜索 "esp32" → 安装
  4. 选择板型:Tools → Board → ESP32 Arduino → ESP32 Dev Module
  5. 选择端口 → Upload

国内镜像加速

如果下载缓慢,可以使用国内镜像:

https://arduino.me/packages/esp32.json

; platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200

; 指定 ESP32-S3
[env:esp32s3]
platform = espressif32
board = esp32-s3-devkitc-1
framework = arduino
# Windows: 下载 ESP-IDF Installer
# https://dl.espressif.com/dl/esp-idf/

# 或使用 VS Code + ESP-IDF 扩展
# 1. 安装 "Espressif IDF" 扩展
# 2. Ctrl+Shift+P → "ESP-IDF: Configure ESP-IDF Extension"
# 3. 选择版本 → 自动下载安装

七、ESP32 与 Arduino 的关键差异

特性 Arduino UNO ESP32
工作电压 5V 3.3V
GPIO 电压 5V 容忍 3.3V(不能接 5V!
ADC 10 位,6 通道 12 位,18 通道(非线性)
PWM 硬件 Timer,6 引脚 LEDC 16 通道,任意 GPIO
中断 2 个外部中断 所有 GPIO 支持中断
串口 1 个 3 个硬件 UART
WiFi ✅ 802.11 b/g/n
蓝牙 ✅ Classic + BLE
多核 单核 8 位 双核 32 位
FreeRTOS 需要额外库 内置
Flash 32KB 4~16MB(外置)

ESP32 GPIO 注意事项

  • 不可用引脚:GPIO 6~11 连接内部 Flash,不能使用
  • 仅输入引脚:GPIO 34、35、36、39 只能作为输入(无内部上拉)
  • 启动时状态:GPIO 0、2、5、12、15 影响启动模式,使用时注意
  • ADC2 限制:WiFi 开启时 ADC2 不可用(GPIO 0、2、4、1215、2527)

八、内容导航

章节 核心内容 学习要点
GPIO 与模拟外设 数字 IO、LEDC PWM、ADC、DAC、触摸传感器 引脚约束、PWM 任意映射、ADC 校准、触摸唤醒
WiFi 网络 STA/AP 模式、HTTP 服务器/客户端、OTA 升级 连接管理、WebServer、远程更新
蓝牙通信 经典蓝牙 SPP、BLE GATT 串口透传、BLE 服务与特征值、手机通信
通信协议 UART、SPI、I2C 在 ESP32 上的使用 引脚映射、多 UART、硬件 SPI
多核与任务管理 FreeRTOS 任务、双核分配、同步机制 任务创建、核心绑定、队列、互斥量
低功耗模式 Deep Sleep、Light Sleep、唤醒源 功耗优化、定时唤醒、触摸唤醒、GPIO 唤醒

ESP32 和 STM32 怎么选?

  • 需要 WiFi / 蓝牙ESP32(内置无线,成本低)
  • 工业级可靠性、丰富 ADC/DAC → STM32
  • 实时性要求极高(电机控制、确定性响应) → STM32
  • IoT / 智能家居 → ESP32
  • 学习嵌入式底层原理 → STM32(资料更系统、更底层)
  • 快速原型、Maker 项目 → ESP32 + Arduino 框架