这个网站上几乎每一个项目,买 30 针的 ESP-32(CH340)就对了 —— 教程里写「ESP32 DevKit V1」的时候,指的就是这块板,而在我们的目录里,它正是 USB Type-C 的那一款。想要更多排针位置就拿 38 针的 WROOM-32E,要做摄像头或 AI 才上 S3,板子必须够小的时候才选 C3 Super Mini。
这里的四款用的是同一颗双核 ESP32 芯片,差别只在 USB 芯片、接口形状和排针长度;S3 和 C3 换掉的则是芯片本身。还在几个芯片家族之间犹豫?我们那篇 ESP32、ESP8266、Arduino Uno 对比回答的是那个问题;下面的内容,都默认你已经确定要用 ESP32 了。
ESP32 型号该买哪一款?
下面每一块板子,跑普通的 Wi-Fi、GPIO 和传感器代码时,用的都是同一份 Arduino 程序。差别只在三个时刻咬人:插上数据线的时候、在 IDE 里选开发板的时候,以及引脚或者内存不够用的时候。
| 开发板 | 排针位置 | USB 接口与芯片 | 里面的芯片 | 什么时候买它 |
|---|---|---|---|---|
| ESP-32 (CH340) | 30 | Type-C,CH340 | 双核 ESP32 | 默认选择 —— 这里每一篇教程都合用 |
| ESP-32 (CP2102) | 30 | Micro-USB,CP2102 | 双核 ESP32 | 你手上已经有 CP210x 驱动和 micro-USB 线 |
| ESP-WROOM-32E | 38 | Micro-USB,CH340 | 双核 ESP32 | 你要更长的排针、GPIO0,以及多一个 GND |
| ESP-32S | 38 | Micro-USB,CH340 | 双核 ESP32 | 同上,另外屏蔽罩旁边多一段裸露的镀金 PCB 天线 |
| ESP32-S3 WROOM CAM | 40(2 × 20)+ 摄像头座 | 两个 Type-C(UART + 原生 USB) | 双核 S3,16 MB flash,8 MB PSRAM | 摄像头、音频,或者大缓冲区 |
| ESP32-C3 Super Mini | 16 个焊盘(13 个 GPIO) | Type-C,原生 USB | 单核 RISC-V C3 | 18 × 22.5 mm 比引脚数量更要紧 |
六块板对比 —— 只挑一块,它们是彼此的替代方案
你可能还会需要
扩展板上的排母是 30 位的,所以只坐得下两款 30 针的 ESP-32;更长的 38 针 WROOM-32E 和 ESP-32S 插不进去。数据线要照着自己板子上的接口挑:CH340 版 ESP-32、S3 CAM 和 C3 Super Mini 用 Type-C,CP2102 版、WROOM-32E 和 ESP-32S 用 micro-USB。而且必须是数据线;只能充电的那种线可以把板子点亮,却永远变不出一个 COM 口。
六款里有两款的排针是散装在袋子里的 —— ESP32-S3 WROOM CAM 和 ESP32-C3 Super Mini —— 所以要预留十分钟拿烙铁,跟着我们那篇排针焊接教程走;另外四款到手就已经焊好针了。S3 CAM 的 OV5640 摄像头和它的排线是随盒附带的。
CH340 还是 CP2102 —— 到底差在哪?
CH340 和 CP2102 都是 USB 转串口(UART)的桥接芯片,两者没有谁更好这一说。经典 ESP32 自己没有 USB 硬件 —— 它对外说的是 3.3 V 电平的普通串口,而笔记本上并没有这种插座 —— 所以在接口和模块之间要坐一颗桥接芯片做翻译。这个选择决定两件事。
驱动。两颗桥接芯片在电脑眼里是两种不同的 USB 设备,所以要先装上对应厂商的驱动,COM 口(或者 /dev/tty…)才会出现 —— CH340 的驱动来自 WCH,CP210x 的来自 Silicon Labs。较新的 macOS 和 Linux 内核两颗都自带;Windows 通常要手动装 CH340 那一个。一台电脑装一次就够,不是一块板装一次。
数据线。在我们的产品线里,CH340 版 ESP-32 用的是 USB Type-C 插座,而 CP2102 版、WROOM-32E 和 ESP-32S 用的是 micro-USB。无论哪一种,线里都必须有数据线芯:只能充电的线只接了电源,桥接芯片根本枚举不出来,于是板子的电源灯亮着,端口列表却始终是空的。
其他就没有区别了。两块板都用同样的双三极管电路,把桥接芯片的 DTR 和 RTS 接到 EN 和 IO0 上,所以两块板都会自己进入下载模式,也都以 IDE 默认挑的 921600 波特率上传。要是端口压根就没出现过,我们那篇 ESP32 无法识别指南会按顺序把它排查完。装驱动大概是这个样子:

在 Arduino IDE 里该选哪个开发板名字?
开发板这一项不是个标签 —— 它选定的是编译目标、flash 分区布局和引脚映射,所以选错了芯片家族,编出来的固件那颗芯片根本跑不起来。在四块经典板之间,选哪个几乎无所谓(同一颗芯片、同样 4 MB flash);跨代之间,则是完全不一样的事。
首先这个列表得先存在。Arduino 并不自带 ESP32 的开发板条目:打开 工具 > 开发板 > 开发板管理器,搜 esp32,装上 esp32 by Espressif Systems。要是什么都搜不到,把 https://espressif.github.io/arduino-esp32/package_esp32_index.json 粘进 文件 > 首选项 > 附加开发板管理器网址,再搜一次。这一个包就覆盖了本文里的每一块板。
| 你买的板 | 工具 > 开发板 > ESP32 Arduino 里的条目 | 要改的设置 |
|---|---|---|
| ESP-32 (CH340),30 针 | ESP32 Dev Module (或 DOIT ESP32 DEVKIT V1) | 不用改 |
| ESP-32 (CP2102),30 针 | ESP32 Dev Module (或 DOIT ESP32 DEVKIT V1) | 不用改 |
| ESP-WROOM-32E,38 针 | ESP32 Dev Module | 不用改 |
| ESP-32S,38 针 | ESP32 Dev Module | 不用改 |
| ESP32-S3 WROOM CAM | ESP32S3 Dev Module | Flash Size 选 16MB,PSRAM 选 OPI PSRAM |
| ESP32-C3 Super Mini | ESP32C3 Dev Module | USB CDC On Boot 选 Enabled |
ESP32-S3 CAM 那两项设置,直接来自它模块上的丝印 N16R8 —— 16 MB 的 flash 加 8 MB 的 PSRAM,走的是八条线的 octal 总线。把 Flash Size 留在 4MB,分区表就是照着一颗只有实际容量四分之一的芯片排的;把 PSRAM 留在 QSPI,内核会去探错总线,psramFound() 返回 false,摄像头程序就会在申请帧缓冲区的那一刻挂掉。
C3 多出来的那一项,才是最容易把人绊住的。那块板上根本没有桥接芯片 —— C3 是在自己的硅片里生出 USB 接口的 —— 所以 USB CDC On Boot 关着的时候,内核会把 Serial 接到硬件 UART 引脚上,你的输出就从 GPIO20/21 跑进空气里去了。把它打开,同一份程序就正常打印了。
我们也卖 ESP32-C2(ESP8684),不过它得另起一句话来说:它是买来做 ESP-IDF 开发的,不是给 Arduino IDE 用的。Arduino ESP32 内核把 C2 的条目藏了起来,也没有附带任何 C2 的编译库 —— 要求开放它的那个请求已经以 won’t-fix 结案 —— 所以工具菜单里不会出现任何 ESP32-C2 开发板,硬塞一个进去也编不过。
下面这段程序,一次上传就能替你确认选对没有。它是直接问芯片自己是什么,而不是听谁的说法,所以 flash 容量选错、PSRAM 设置漏了,都会当场露馅。
// WhichESP32 - 直接问这块板,它自己到底是什么。
// 上传后打开串口监视器,波特率选 115200,再按一下 RST/EN 键。
void setup() {
Serial.begin(115200);
delay(2000); // 留点时间给原生 USB 的板子重新枚举,再开始打印
Serial.println();
Serial.println(F("--- what this board actually is ---"));
// 下面这些数字都是直接从芯片里读出来的,不是从任何规格表上抄的。
Serial.print(F("Chip model : "));
Serial.println(ESP.getChipModel());
Serial.print(F("CPU cores : "));
Serial.println(ESP.getChipCores());
Serial.print(F("Silicon rev : "));
Serial.println(ESP.getChipRevision());
Serial.print(F("CPU clock : "));
Serial.print(getCpuFrequencyMhz());
Serial.println(F(" MHz"));
// 引导程序被告知可以使用的 flash 容量,取整到 MB。
Serial.print(F("Flash : "));
Serial.print(ESP.getFlashChipSize() / (1024 * 1024));
Serial.println(F(" MB"));
// PSRAM 是外挂内存。只有多带一颗内存裸片的板子才报得出数字。
Serial.print(F("PSRAM : "));
if (psramFound()) {
Serial.print(ESP.getPsramSize() / (1024 * 1024));
Serial.println(F(" MB"));
} else {
Serial.println(F("none"));
}
// 程序和 Wi-Fi 协议栈都加载完之后,内部 SRAM 还剩下多少。
Serial.print(F("Free heap : "));
Serial.print(ESP.getFreeHeap() / 1024);
Serial.println(F(" KB"));
}
void loop() {
// 没有需要重复的动作 - 想再看一次报告,按 RST 就好。
}
经典板报出来的是一个封装型号 —— 现在的模块是 ESP32-D0WD-V3,早一点的是 ESP32-D0WDQ6,绝不会是光秃秃的「ESP32」四个字符 —— 加上 2 核、4 MB flash、PSRAM 为 none。S3 CAM 报的是 ESP32-S3、16 MB、PSRAM 8 MB。C3 Super Mini 报的是 ESP32-C3、1 核。
30 针还是 38 针 —— 多出来的到底有几个能用?
38 针的板子多引出八个排针位置,而这八个是什么,值得先弄明白。其中六个是 GPIO6 到 GPIO11,在模块内部接到它自己的 SPI flash 芯片上 —— 也就是你的程序住的那块内存。去驱动其中任何一个,芯片会在半条指令中间丢掉自己的代码然后重启,所以它们是引出来了,却不能用。真正新增的位置是 GPIO0 —— 启动模式选择脚,30 针的布局只把它留在 BOOT 按键上 —— 以及第三个 GND。5 V 那条电源两块板都有;30 针那块只是把它标成 VIN 而已。
所以当客户来问我们要「banyak pin」的板子时,老实的答案是:多一个能用的 GPIO,多一个 GND。GPIO0 在板子跑起来之后就是一个普通输出脚,只要复位那一刻没有东西把它拉低就行 —— 芯片读的正是那一刻的电平,用来决定是启动你的程序,还是停在下载模式里等着。要 38 针的 ESP-WROOM-32E,是为了更长的排针和更宽松的布局,不是因为上面有八个新信号在等你。
板子长度决定配件。30 针扩展板上是两条 15 位的排母,丝印依次是 EN、VP、VN、D34 一直到 D13 和 GND —— 正好就是 30 针的引脚排列。更长的 38 针板坐不进去,所以这块扩展板只该配 ESP-32(CH340)或 ESP-32(CP2102)一起买。

经典款、S3 还是 C3 —— 换新一代能换来什么?
经典 ESP32 是双核 Xtensa LX6,主频最高 240 MHz,内部 520 KB SRAM,带 Wi-Fi、蓝牙 Classic 和 BLE,而且在 WROOM-32E 的默认 N4 版本上是 4 MB flash。四款经典型号里装的都是这颗芯片,金天线的 ESP-32S 也包括在内:LX7 内核是从 S3 那一代才开始的,而 ESP-32S 模块自己印出来的功能列表,就是经典那一套。
ESP32-S3 WROOM CAM 换成了两颗 Xtensa LX7 内核,只带 Wi-Fi 和蓝牙 5 LE —— 没有蓝牙 Classic,所以它配对不了音频设备。它的模块上印着 N16R8:这是 Espressif 的简写,意思是 16 MB flash 加 8 MB PSRAM。这块板存在的理由,就是 PSRAM。
PSRAM 是模块里的第二颗内存裸片,通过一条专用总线映射进芯片的地址空间。你会需要它,是因为那 520 KB 内部 SRAM 得同时装下 Wi-Fi 协议栈、你的变量和任何缓冲区,而一帧 640×480 的 RGB565 图像就是 640 × 480 × 2 = 614,400 字节 —— 在 Wi-Fi 还没来分走一份之前,就已经比全部内部 SRAM 还多了。有了 PSRAM,这一帧是从几个 MB 里划出来的,代价是访问速度慢一些。没有 PSRAM,就没有摄像头缓冲区。
它那两个 Type-C 插座并不通用:左边那个走 UART 桥接芯片,供电和上传都用它;右边那个是 S3 自己的原生 USB,能提供内建的 JTAG 调试,也能让板子把自己扮成 USB 键盘或者 U 盘。两个都能供电。
ESP32-C3 Super Mini 走的是另一个方向:单核 RISC-V,160 MHz,400 KB SRAM,带 Wi-Fi 和 BLE 5,4 MB flash 直接封在芯片封装里。最后这一点,正是这块板能做小的原因:没有独立的 flash 裸片,也就不需要带屏蔽罩的模块 —— 只剩一颗裸 QFN 加一小片陶瓷天线 —— 而 C3 自带的 USB 外设,又把桥接芯片也一起省掉了。18 × 22.5 mm 的板上有十三个 GPIO 引到半孔焊盘,但它们的编号是 GPIO0–10 和 20/21,所以照着经典板 D21/D22 标号写的程序,得先把引脚改过来才跑得起来。另外还有两条支线:Uno 外形的 ESP32,可以沿用 Uno 的扩展板;以及 S2 Mini,它有原生 USB,但完全没有蓝牙。
想看好几块 ESP32 开发板摆在一起跑分对比的话:

ESP32 能不能上 5 V?
供电和信号要分开回答。喂 5 V 是对的:USB 本来就是 5 V,VIN 或者 5V 脚进的是板载 AMS1117 稳压器,由它降到模块要用的 3.3 V。C3 Super Mini 和 S3 CAM 的 5V 焊盘也是同样的用法。
信号则完全相反。每一个 GPIO 都是 3.3 V 的脚,ESP32 规格书把高电平输入的上限定在 VDD + 0.3 V —— 大约 3.6 V。5 V 传感器的输出直接接上 GPIO,远远超过这个数,所以要用电阻分压或者电平转换器。供电这一块,我们那篇 ESP32 供电方案讲得比较全。
我们从真实客户身上看到的常见错误
“Esp wroom 32e tu ch340 atau cp2102?” —— CH340,接口是 micro-USB。我们产品线里 Type-C 的那一块,是 30 针的 ESP-32(CH340),另外一个商品,所以下单买线之前,先照着图片确认插座形状。
“for this esp32 (ch340) what is the board name in arduino ide” —— ESP32 Dev Module。CH340 是 USB 桥接芯片,不是主控芯片,所以它根本不会出现在开发板列表里。
“ini ada 2 usb type C…. blh terang sikit fungsi 2 usb type c ni” —— 在 S3 CAM 上,左边是 UART 桥接口,供电和上传用;右边是原生 USB,做 JTAG 和 USB 设备用。先从左边那个开始。
“esp32 sy beli tu sesuai ke guna expansion ni” —— 只有 30 针的板子才行。数一数单边的针数:十五个坐得进扩展板,十九个坐不进去。
常见问题
学校项目该买哪一款 ESP32?
30 针的 ESP-32(CH340)。每一篇 ESP32 教程都是照着它的引脚标号写的,它到手就已经焊好排针,而 30 针扩展板也正是为它做的。
ESP32 DevKit V1 和 ESP-32(CH340)是同一块板吗?
是。「DevKit V1」说的是 30 针那种布局,单边十五针,我们两款 30 针商品用的都是它。两块在 IDE 里都选 ESP32 Dev Module 或者 DOIT ESP32 DEVKIT V1。
CH340 和 CP2102 —— 哪个更好?
都不更好。两颗都是 USB 转串口的桥接芯片,上传速度一样。这个选择真正决定的,是你要装哪一家的驱动(装一次),以及在我们产品线里插座是 Type-C(CH340)还是 micro-USB(CP2102)。
ESP32 开发板有多少 flash?
经典款是 4 MB,也就是 WROOM-32 和 WROOM-32E 模块的默认版本,其中 IDE 默认的分区方案分给你程序的是 1,310,720 字节,大约 1.25 MB。S3 CAM 是 16 MB,C3 Super Mini 的 4 MB 则封在芯片封装里面。
5 V 传感器能不能接到 ESP32 上?
不能直接接到 GPIO 上。引脚是 3.3 V 的,规格书写的高电平输入上限大约是 3.6 V,所以要用电阻分压或者电平转换器。从 USB 或者 VIN 用 5 V 给板子供电,则完全没问题。
最后更新:2026 年 8 月。有问题?WhatsApp 联系我们。



NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32 (CH340)
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32(CP2102)
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-WROOM-32E
NodeMCU ESP32 Wi-Fi + Bluetooth Development Board CH340/CP2012 - For IOT Project - ESP-32S
ESP32-S3 WROOM CAM DEVELOPMENT BOARD OV5640 CAMERA MODULE WIFI BLUETOOTH DUAL USB-C IOT AI
ESP32 Super Mini Ultra Small Size ESP32-C3 RISC-V Low Power Consumption - ESP32-C3 SUPER MIN
ESP32 Expansion Board 30P Expansion Board ESP32 Shield GPIO Expansion Development Kit
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - TYPE-A TO TYPE-C CABLE (1.0M)
Data Cable Type-A Type-C MicroUSB Type-B 0.5m 1m 30cm 0.3m 100cm Data Transfer Upload Code - MicroUSB CABLE (1.0M)