1. 先搞清楚你要买的是哪一类板子
1.1 两块板子的定位差异
ESP32-S3 Mini 和 ESP32-C3 Mini 这两块板子,放在一起看名字好像差不多,实际上定位差得挺远。C3 Mini 是单核 RISC-V 架构,主打的是便宜、够用、Wi-Fi 和蓝牙 LE 都有,适合做传感器节点、简单的联网开关、灯控这类活。S3 Mini 是双核 Xtensa LX7,带向量指令,主频能跑到 240MHz,还支持原生 USB OTG,适合跑摄像头、语音、屏幕驱动、边缘推理这类吃算力的场景。
我一般跟人这么解释:C3 是“能联网的单片机”,S3 是“能联网还能干重活的小电脑”。你要是只做温湿度上报、继电器控制,C3 完全够,多花的钱没必要。你要是想接个摄像头做图像识别,或者跑个 LVGL 界面,那 S3 是起步线,C3 会卡到你怀疑人生。
1.2 为什么“Mini”这个后缀值得单独说
Mini 版本和官方 DevKitC 最大的区别在于体积和引脚布局。Mini 板子通常把 USB 接口、天线、按键都压缩到很小的面积里,引脚间距还是 2.54mm,但排布更紧凑。好处是塞进小外壳方便,坏处是有些板子为了省空间,把 PSRAM 的片选或者 USB 的差分线走了很窄的走线,信号完整性会打折扣。
我自己踩过的坑:买过一批便宜的 S3 Mini,跑 Wi-Fi 没问题,但一开 USB CDC 就偶尔掉线,后来发现是板子上 USB 差分线没做阻抗匹配,换了一家贵两块钱的就好了。所以 Mini 板子不是越小越好,得看厂家的布线功底。
1.3 采购前必须先定的三件事
在打开购物网站之前,先把这三个问题回答清楚,不然你会在几十个 SKU 里迷路:
- 要不要 PSRAM:跑摄像头、音频缓冲、LVGL 大图,必须带 PSRAM,通常选 8MB 版本。纯联网控制,2MB 甚至不带都行。
- 要不要原生 USB:S3 支持 USB OTG,可以直接模拟键盘、鼠标、U盘,也能当串口用。C3 只有 USB Serial/JTAG,功能弱一些。如果你要做 HID 设备或者 USB 主机,只有 S3 能满足。
- Flash 多大:4MB 是底线,跑 ESP-IDF 带 Wi-Fi 加文件系统,4MB 会紧张。8MB 是舒服的档位,16MB 适合要存大量资源或者做 OTA 双备份的。
把这三个问题定下来,你的采购范围就从几十款缩到三五款了。
2. PSRAM 这件事,买之前必须弄明白
2.1 PSRAM 到底是什么,为什么它这么关键
PSRAM 全称是 Pseudo Static RAM,你可以把它理解成“给单片机用的廉价内存条”。ESP32 内部自带的 SRAM 只有 512KB 左右,跑个 Wi-Fi 协议栈加 FreeRTOS 就吃掉一大半,剩下给应用的就一两百 KB。你要是想开个 320x240 的摄像头帧缓冲,一帧 RGB565 就是 150KB,内部内存直接爆掉。
PSRAM 通过 SPI 或者 QSPI 接口挂在芯片外面,容量通常 2MB 到 8MB,速度比内部 SRAM 慢,但胜在便宜量大。S3 和 C3 都支持外挂 PSRAM,但注意:C3 的 PSRAM 支持是有限制的,它只有一条 SPI 通道能挂,而且和 Flash 共享总线,实际带宽比 S3 低不少。S3 支持 Octal PSRAM,带宽高得多,跑摄像头才现实。
2.2 怎么从商品页判断是不是真 PSRAM
这里有个很实际的问题:很多卖家标题写“ESP32-S3 Mini 8MB”,你以为是 8MB PSRAM,结果到手发现是 8MB Flash,PSRAM 压根没有。我总结了几个判断方法:
- 看标题有没有单独写“PSRAM”或者“PSRAM 8MB”。只写“8MB”的,八成是 Flash。
- 看参数表里有没有“PSRAM: 2MB/8MB”这一行。正规厂家会分开列。
- 看价格。带 8MB PSRAM 的 S3 Mini,成本比不带的高出不少,如果价格和普通版一样,大概率有猫腻。
- 最靠谱的办法:问客服要芯片型号。S3 的 PSRAM 常见型号是 ESP-PSRAM64,8MB 的。C3 常见的是 2MB 版本。
提示:有些板子用的是“合封”芯片,Flash 和 PSRAM 封装在一起,型号像 ESP32-S3-WROOM-1-N8R8,N8 是 8MB Flash,R8 是 8MB PSRAM。看到 R 开头的后缀,基本就是带 PSRAM 的。
2.3 PSRAM 在代码里怎么用,买回来怎么验证
买回来第一件事不是写业务代码,是先验证 PSRAM 能不能正常读写。用 ESP-IDF 的话,直接跑esp_psram_get_size()看返回值。如果返回 0,要么没焊,要么没使能。
使能 PSRAM 需要在 menuconfig 里配置:
idf.py menuconfig # Component config -> ESP PSRAM -> Support for external, SPI-connected RAM # 然后选择模式:Quad 或 Octal,S3 建议 Octal配置完编译烧录,串口打印里会看到类似Found 8MB PSRAM的日志。如果没看到,检查板子是不是真的带 PSRAM,或者模式选错了。我遇到过一块 S3 Mini,Octal 模式死活起不来,换成 Quad 就好了,后来发现是板子走线只支持 Quad,卖家标称支持 Octal 是虚标。
验证读写速度可以用heap_caps_malloc分配一块 PSRAM,然后跑个 memset 测一下。正常 Octal PSRAM 写速度能到 40MB/s 以上,Quad 大概 20MB/s。如果只有几 MB/s,那可能是走线或者配置有问题。
2.4 不带 PSRAM 的板子什么时候够用
也不是所有场景都要 PSRAM。如果你做的是:
- 纯 Wi-Fi 传感器上报,数据量小
- 简单的继电器控制
- 跑个 Web 服务器返回几个字节的 JSON
- 用 Arduino 框架写点小逻辑
那不带 PSRAM 的版本完全够,还能省几块钱。我手头常备几块不带 PSRAM 的 C3 Mini,做快速验证和烧录测试用,坏了不心疼。但一旦涉及图像、音频、大缓冲,PSRAM 就是刚需,别省这个钱。
3. USB 接口的坑:从供电到协议
3.1 S3 和 C3 的 USB 能力差在哪
这是两块板子最容易被忽略的差异。C3 只有一个 USB Serial/JTAG 控制器,功能是:当串口用、当 JTAG 调试用。它不能当 USB 主机,不能模拟 HID,不能做 MSC。S3 有两个 USB 控制器:一个是 USB Serial/JTAG(和 C3 一样),另一个是完整的 USB OTG,支持主机和设备模式,能模拟键盘鼠标、U盘、MIDI 设备,也能接 USB 摄像头、网卡。
所以如果你的项目是“把板子做成一个 USB 键盘”,只有 S3 能做。如果是“板子通过 USB 线连电脑打印日志”,两块都行。
3.2 板子上的 USB 口是干嘛的,别插错
Mini 板子上通常有两个 USB-C 口,或者一个 USB-C 加一排排针。这里要分清楚:
- USB-UART 口:板上焊了 CH340、CP2102 或者 FT231X 这类 USB 转串口芯片,插上电脑识别为串口,用来烧录和看日志。这个口不经过 ESP32 芯片的 USB 控制器。
- 原生 USB 口:直接连到 ESP32-S3 的 GPIO19/20,识别为什么设备取决于你的固件。烧录时也能用,但需要芯片进入下载模式。
我见过有人把原生 USB 口当串口用,结果电脑识别出一个未知设备,就是因为固件里没使能 USB CDC。S3 用原生 USB 做串口,需要在 menuconfig 里开USB CDC或者用 TinyUSB 栈。
注意:有些超便宜的 S3 Mini 只引出了原生 USB,没焊 USB-UART 芯片。这种板子第一次烧录比较麻烦,需要手动拉 GPIO0 进下载模式,而且电脑上可能没有对应驱动。新手建议买带 USB-UART 芯片的版本,省心。
3.3 USB 转串口芯片怎么选:CH340、CP2102、FT231X
这三种芯片我都用过,说下实际体验:
| 芯片 | 驱动情况 | 稳定性 | 价格 | 备注 |
|---|---|---|---|---|
| CH340 | Win10/11 免驱,macOS 需装驱动 | 一般,高速时偶发丢包 | 最便宜 | 国产,兼容性好 |
| CP2102 | 各平台基本免驱 | 好 | 中等 | 老牌,稳定 |
| FT231X | 需装驱动 | 很好 | 最贵 | 工业级,抗干扰强 |
日常开发 CH340 够用,但如果你的项目要长时间跑高速串口日志,或者环境电磁干扰大,建议选 CP2102 或 FT231X 的版本。我有一块 FT231X 的板子,在电机旁边跑 921600 波特率都不丢数据,CH340 的就会偶尔乱码。
3.4 USB 线材和供电的隐形问题
这个坑很多人踩:板子买回来,插上电脑没反应,换根线就好了。原因是很多 USB 线是“充电线”,只有电源线没有数据线。尤其是那种很细的、赠品线,八成不能传数据。
买线的时候认准“数据线”字样,或者看线径,数据线通常比纯充电线粗一点。Type-C 转 USB-A 的线,注意有些是 USB 2.0 只有 4 根线,有些是 USB 3.0 有更多线,对 ESP32 来说 USB 2.0 足够。
供电方面,S3 跑 Wi-Fi 加 PSRAM 加摄像头,峰值电流能到 500mA 以上。如果电脑 USB 口供电不足,会出现反复重启。这时候要么换 USB 口,要么用带外部供电的 Hub。我习惯用带电源的 USB Hub 给开发板供电,稳定很多。
4. 一张可核对的采购单该怎么列
4.1 采购单的核心字段
很多人买东西就是看标题和价格,结果买回来发现少这个少那个。我建议列一个表格,把关键参数都写进去,下单前逐项核对。字段至少包括:
- 芯片型号(S3 还是 C3)
- Flash 容量
- PSRAM 容量
- USB 接口类型(几个口,有没有 UART 芯片)
- 天线形式(PCB 天线还是外接 IPEX)
- 引脚数(多少 pin 引出)
- 按键(BOOT、RESET 有没有)
- 供电方式(USB 还是排针)
- 价格和店铺
4.2 一个实际的采购单示例
假设我要做一个带摄像头的 S3 项目,采购单大概长这样:
| 项目 | 要求 | 核对结果 |
|---|---|---|
| 芯片 | ESP32-S3 | 是 |
| Flash | 8MB | 是 |
| PSRAM | 8MB Octal | 是,型号 N8R8 |
| USB | 原生 USB + UART 双口 | 是,CH340 |
| 天线 | 外接 IPEX | 是 |
| 引脚 | 全部引出,2.54mm | 是 |
| 按键 | BOOT + RESET | 是 |
| 价格 | 30 元以内 | 28 元 |
这样列出来,下单前对着商品页一项项打勾,基本不会买错。如果某个字段商品页没写,直接问客服,别猜。
4.3 批量采购时的额外考虑
如果你要买十块以上,除了上面的字段,还要考虑:
- 一致性:同一批次的板子,Flash 和 PSRAM 型号要一致,不然固件可能要改配置。
- 焊接质量:便宜板子有时候排针焊歪,或者 USB 口虚焊。批量买之前先买一两块样品测。
- 售后:有些店铺批量买不给退换,先确认好。
- 替代型号:如果某款缺货,有没有 pin 兼容的替代品。S3 Mini 和 S3 DevKitC 引脚不兼容,换板子要改接线。
我一般批量采购前会先买三块不同店铺的样品,跑一遍完整测试,选最稳的那家再下大单。多花几十块样品费,比批量翻车强。
5. 开发环境准备与固件烧录
5.1 ESP-IDF 安装的几种方式
ESP-IDF 是官方框架,功能最全,但安装有点门槛。常见方式:
- 官方安装器:Windows 和 macOS 有图形化安装器,一路下一步,适合新手。
- VS Code 插件:装 Espressif IDF 插件,在插件里配置,体验不错。
- 手动 git clone:适合 Linux 用户和需要多版本共存的人。
我推荐新手用官方安装器,省去配环境变量的麻烦。装完之后在终端跑idf.py --version,能输出版本号就成功了。
提示:ESP-IDF 版本建议选稳定版,比如 v5.1 或 v5.2。太新的版本可能有坑,太老的又不支持 S3 的新特性。
5.2 Arduino 框架的取舍
如果你只是想快速点个灯、连个 Wi-Fi,Arduino 框架上手更快。在 Arduino IDE 里加 ESP32 开发板包,选对应的板子型号就行。但 Arduino 框架对 PSRAM 和 USB OTG 的支持不如 ESP-IDF 完整,做复杂项目还是得回到 IDF。
我的习惯是:验证硬件用 Arduino,正式项目用 IDF。两块板子都装好两套环境,随时切换。
5.3 烧录失败的常见原因
烧录失败是新手最容易卡住的地方,我整理了几个高频原因:
- 驱动没装:CH340 在 Win10 以上免驱,但有些精简版系统没有。去官网下驱动装上。
- 口选错:电脑上可能有多个串口,选错就烧不进去。在设备管理器里看哪个口是板子的。
- 线的问题:前面说过,充电线不能传数据。
- 没进下载模式:有些板子需要按住 BOOT 再按 RESET。带自动下载电路的板子不用手动。
- 波特率太高:默认 460800 有时候不稳,降到 115200 试试。
- Flash 模式不对:S3 一般用 DIO 或 QIO,选错了烧录会失败。
烧录时看终端输出,如果卡在Connecting...就是没进下载模式或者口不对。如果报Failed to connect,先换线换口,再检查驱动。
5.4 验证板子好坏的快速测试
板子到手,别急着写业务代码,先跑个官方例程验证硬件。ESP-IDF 里有hello_world和blink例程,跑通了说明基本功能正常。然后跑console例程测串口,跑wifi例程测 Wi-Fi。如果带 PSRAM,跑himem例程测 PSRAM。
这一套跑下来,板子的 Flash、PSRAM、Wi-Fi、USB 串口都验证过了,后面出问题就能排除硬件因素。
6. 常见问题与排查技巧实录
6.1 板子识别不到串口怎么办
这是最高频的问题。排查顺序:
- 换一根确认能传数据的 USB 线。
- 换电脑上的另一个 USB 口,最好直插主板后面的口。
- 看设备管理器有没有未知设备,有的话装驱动。
- 换一块板子试,排除板子本身问题。
- 如果是原生 USB 口,确认固件里使能了 USB CDC。
我遇到过一块板子,插上电脑完全没反应,换线换口都不行,最后发现是 USB 座子虚焊,补焊一下就好了。所以如果所有软件排查都做了还不行,考虑硬件焊接问题。
6.2 PSRAM 识别不到或者容量不对
先确认 menuconfig 里 PSRAM 使能了,模式选对了。S3 的 Octal PSRAM 需要选Octal Mode,选成 Quad 可能识别不到或者容量减半。如果配置没问题还是识别不到,可能是板子虚标,或者 PSRAM 芯片坏了。
还有一种情况:PSRAM 识别到了,但一用就崩溃。这通常是 PSRAM 走线质量差,高速读写不稳定。解决办法是降低 PSRAM 频率,在 menuconfig 里把SPIRAM_SPEED从 80MHz 降到 40MHz 试试。
6.3 Wi-Fi 连不上或者频繁掉线
Wi-Fi 问题排查:
- 天线有没有接好,PCB 天线的板子注意不要被金属遮挡。
- 供电是否充足,Wi-Fi 发射瞬间电流大,供电不足会重启。
- 路由器是不是 2.4GHz,ESP32 不支持 5GHz。
- 信道是不是太拥挤,换个信道试试。
- 固件里 Wi-Fi 配置有没有问题,SSID 和密码对不对。
我遇到过一次,板子放在金属外壳里,Wi-Fi 信号极差,把天线引出来就好了。所以结构设计也要考虑射频。
6.4 USB 设备模式不识别
S3 做 USB 设备时,电脑识别不到,检查:
- 固件里 TinyUSB 栈有没有初始化。
- 描述符配置对不对,VID/PID 有没有冲突。
- USB 线是不是数据线。
- 电脑端驱动有没有装,有些自定义 HID 设备需要驱动。
调试 USB 可以用 USB 抓包工具看枚举过程,但那个门槛比较高。新手先用官方例程跑通,再改自己的描述符。
6.5 常见问题速查表
| 现象 | 可能原因 | 解决办法 |
|---|---|---|
| 识别不到串口 | 线、驱动、口、焊接 | 换线换口装驱动,补焊 |
| PSRAM 为 0 | 没使能、模式错、虚标 | 改 menuconfig,降频,换板 |
| Wi-Fi 掉线 | 供电、天线、信道 | 加强供电,调整天线,换信道 |
| USB 不识别 | 固件、描述符、线 | 跑官方例程,检查描述符 |
| 烧录失败 | 模式、波特率、Flash 配置 | 手动进下载,降波特率,改 Flash 模式 |
| 反复重启 | 供电不足、固件崩溃 | 换供电,看崩溃日志 |
6.6 几个独家避坑技巧
- 买板子时多买一块备用,坏了不耽误进度。
- 收到板子先跑官方例程,别直接上项目代码。
- 保留购买记录和商品页截图,虚标可以维权。
- 焊接排针时用助焊剂,虚焊是很多玄学问题的根源。
- 固件里加看门狗和崩溃日志,出问题能定位。
7. 从采购到点灯:一个完整的落地流程
7.1 需求确认与选型
先明确项目需求:要不要摄像头、要不要屏幕、要不要 USB HID、要不要低功耗。根据需求定 S3 还是 C3,定 PSRAM 和 Flash 容量。这一步花十分钟,能省后面很多麻烦。
7.2 下单与验收
按采购单下单,收到后先外观检查,再看串口能不能识别,跑官方例程。有问题及时联系卖家退换,别自己硬修。
7.3 环境搭建与固件开发
装 ESP-IDF,配置板子参数,跑通 hello world,然后逐步加功能。每加一个功能就测试一次,别一次性写完再调,那样出问题很难定位。
7.4 量产前的检查
如果要做产品,量产前要检查:固件版本、Flash 分区、PSRAM 配置、Wi-Fi 参数、USB 描述符。最好做一批小批量试产,跑老化测试。
我个人在实际操作中的体会是,ESP32-S3 和 C3 这两块板子,买对了能省很多事,买错了就是无尽的调试。把 PSRAM、USB、Flash 这三个参数核对清楚,基本就不会踩大坑。采购单这个东西,看着麻烦,但真能帮你省下退换货和重新下单的时间。最后再分享一个小技巧:加几个 ESP32 的交流群,买之前问问群友有没有推荐的店铺,比看商品页的刷单评价靠谱得多。