1. 选型之前先想清楚:你到底需要哪块板子
1.1 两块板子的定位差异
ESP32-S3 Mini 和 ESP32-C3 Mini 这两块小板子,价格差得不算多,但用起来完全是两个方向。我前后买过十几块,踩过一些坑,也帮朋友配过不少单子,这里把采购逻辑完整梳理一遍。
先说结论性的判断: ESP32-C3 Mini 适合“单频 WiFi + 蓝牙 LE + 够用的 GPIO”这类轻量联网场景 ,比如传感器节点、简单的 MQTT 上报设备、小型的 BLE 外设。它是 RISC-V 单核架构,160MHz 主频,没有 PSRAM 选项,SRAM 400KB 左右,跑个 AT 固件或者轻量 Arduino 程序很舒服。
ESP32-S3 Mini 则是给“要跑摄像头、要接屏幕、要做语音、要跑 LVGL 或 TinyML”这类吃内存和算力的场景准备的 。它双核 Xtensa LX7,最高 240MHz,支持更大的 PSRAM 配置,还带原生 USB OTG(这点后面会重点讲)。如果你打算做带屏的桌面小设备、USB 摄像头、语音唤醒盒子,S3 Mini 是更稳的选择。
所以采购第一步不是看价格,而是先回答三个问题: 要不要 PSRAM?要不要原生 USB?要不要双核? 这三个问题基本就把选型锁死了。
1.2 一张表看清关键参数
| 参数项 | ESP32-S3 Mini | ESP32-C3 Mini |
|---|---|---|
| 核心架构 | 双核 Xtensa LX7 | 单核 RISC-V |
| 最高主频 | 240 MHz | 160 MHz |
| SRAM | 512 KB | 400 KB |
| PSRAM 支持 | 支持(2MB/8MB 常见) | 不支持 |
| 原生 USB | USB OTG 1.1 全速 | 无(仅 USB Serial/JTAG) |
| WiFi | 2.4G b/g/n | 2.4G b/g/n |
| 蓝牙 | BLE 5.0 | BLE 5.0 |
| GPIO 数量 | 约 30+(视封装) | 约 20+(视封装) |
| 典型价格区间 | 略高 | 略低 |
这张表里最容易被忽略的是 USB 那一行 。C3 的 USB 只是 USB Serial/JTAG 控制器,用来下载和调试,不能当 USB 设备用;S3 的 USB OTG 可以让你把板子做成一个 USB 键盘、USB 麦克风、USB 摄像头,甚至 USB MSC 设备。这个差别直接决定了你能不能做“插上电脑就识别”的产品。
1.3 采购前必须确认的三件事
第一, 确认你要的封装和引脚数 。Mini 系列常见的有不同引脚版本,买之前一定看清楚是几 Pin 的,别买回来发现排针孔位对不上你的底板。
第二, 确认 PSRAM 容量 。S3 Mini 有带 PSRAM 和不带的版本,价格差几块钱,但跑摄像头或 LVGL 时差别巨大。买的时候商品标题里通常会写“N8R8”“N16R8”这种,N 后面是 Flash,R 后面是 PSRAM,比如 N8R8 就是 8MB Flash + 8MB PSRAM。
第三, 确认天线形式 。有的是板载陶瓷天线,有的是 IPEX 外接天线座。如果你要做金属外壳或者信号环境复杂,优先选带 IPEX 座的版本,后面可以换高增益天线。
提示:不要只看商品主图,一定要翻到详情页确认 Flash/PSRAM 组合和天线类型,很多店铺主图是通用图,实际发货版本不一样。
2. PSRAM 到底怎么选:容量、类型和实际影响
2.1 PSRAM 是什么,为什么它这么关键
PSRAM 全称 Pseudo Static RAM,可以理解成“给单片机用的廉价大内存”。ESP32-S3 内部 SRAM 只有 512KB,跑个 WiFi 协议栈、蓝牙协议栈、再加上你的应用程序,很快就见底了。一旦你要开摄像头帧缓冲、LVGL 屏幕缓冲、或者跑个稍微大点的神经网络模型,内部 SRAM 根本不够。
这时候 PSRAM 就派上用场了。它通过 SPI 或 QSPI 接口挂在芯片外面,容量可以做到 2MB、8MB 甚至 16MB。代价是访问速度比内部 SRAM 慢一些,但对于帧缓冲、图像数据、音频缓冲这类“大块但不需要极速随机访问”的数据,完全够用。
我实测过:用 S3 Mini 不带 PSRAM 跑一个 240x240 的 LVGL 界面,刷新时明显卡顿,因为缓冲放不下;换成带 8MB PSRAM 的版本,同样的界面流畅很多。摄像头场景更明显,OV2640 出一帧 JPEG 动辄几十 KB,没有 PSRAM 基本没法做连续采集。
2.2 容量怎么算:一个简单的估算方法
很多人不知道买多大 PSRAM,这里给一个粗略的估算思路:
- LVGL 屏幕缓冲 :宽度 × 高度 × 每像素字节数 × 缓冲系数。比如 320×240 的 RGB565 屏幕,一帧就是 320×240×2 = 150KB,双缓冲就是 300KB。如果做全屏缓冲,8MB PSRAM 绰绰有余。
- 摄像头帧缓冲 :OV2640 的 JPEG 输出,一帧大概 20KB 到 60KB,双缓冲加队列,预留 1MB 比较稳。
- 音频缓冲 :16kHz 16bit 单声道,一秒就是 32KB,做几秒的环形缓冲,几百 KB 够了。
- 神经网络模型 :TinyML 模型通常几百 KB 到几 MB,看模型大小。
综合下来, 如果你只是做联网控制类项目,2MB PSRAM 够用;如果要做屏幕、摄像头、语音,建议直接上 8MB 。差价通常只有几块钱,没必要省。
2.3 PSRAM 类型和兼容性坑
S3 支持的 PSRAM 有几种类型,常见的是 Quad SPI PSRAM 和 Octal SPI PSRAM。Octal 的带宽更高,适合高分辨率摄像头和高刷新率屏幕。但要注意, 不是所有 S3 模组都支持 Octal PSRAM ,买之前要确认模组型号。
另一个坑是 PSRAM 和 Flash 的引脚复用 。有些模组为了节省引脚,把 PSRAM 和 Flash 挂在同一组 SPI 上,这时候如果 Flash 容量选得太大,可能会影响 PSRAM 的可用引脚。一般买正规模组不会遇到这个问题,但如果你买的是那种特别便宜的“白牌”板子,建议先查一下模组规格书。
注意:如果你用的是 Arduino 环境,需要在开发板选项里手动开启 PSRAM,否则默认是不启用的。ESP-IDF 里则需要在 menuconfig 里配置。
2.4 采购单上 PSRAM 这一项怎么写
我自己的采购单里,PSRAM 这一项会写成这样:
- 型号:ESP32-S3-MINI-1-N8R8(8MB Flash + 8MB PSRAM,Octal PSRAM)
- 备选:ESP32-S3-MINI-1-N4R2(4MB Flash + 2MB PSRAM,Quad PSRAM,预算紧张时用)
- 数量:先买 2 块,一块做开发,一块做备份
这样写的好处是,下单时不会因为商品标题模糊而买错。很多店铺会把“S3 Mini”当成一个通用词,实际发货的模组型号可能不一样,写清楚模组型号最保险。
3. USB 这块最容易买错:OTG、串口和下载方式
3.1 S3 的 USB OTG 和 C3 的 USB Serial/JTAG 不是一回事
这是采购时最容易混淆的地方。ESP32-S3 有一个 USB OTG 1.1 全速控制器 ,可以配置成 USB Device(比如键盘、麦克风、MSC)或者 USB Host。同时它还有一个 USB Serial/JTAG 控制器 ,用来做下载和调试。
ESP32-C3 只有 USB Serial/JTAG 控制器 ,没有 OTG。也就是说,C3 的 USB 口只能用来下载程序和看串口日志,不能把板子模拟成一个 USB 设备。
这个差别在实际项目里影响很大。比如你想做一个“插上电脑就识别为 USB 麦克风”的设备,C3 做不到,必须用 S3。你想做一个“USB 摄像头”,也必须用 S3。你想做一个“USB 键盘宏”,还是 S3。
但如果你只是做 WiFi 联网的传感器,USB 只用来供电和下载,那 C3 完全够用,还便宜。
3.2 板载 USB 口和外部 USB 转串口芯片的区别
很多开发板会板载一个 USB 转串口芯片,比如 CH340、CP2102、FT231X 等。这种板子的 USB 口是接到转换芯片上,再接到 ESP32 的 UART 引脚。你看到的是一个“USB 串口设备”,而不是 ESP32 本身的 USB。
而 S3 和 C3 都支持 原生 USB 下载 ,也就是直接把 USB 口接到芯片的 USB 引脚上,不需要转换芯片。这种板子通常有两个 USB 口,一个标“USB”或“OTG”,一个标“UART”或“COM”。
采购时要看清楚: 你要的是原生 USB 口,还是转换芯片的口? 如果你要做 USB 设备,必须买原生 USB 口引出的板子。如果你只是下载和调试,两者都行,但原生 USB 口通常下载更快,而且少一个转换芯片,成本更低。
3.3 下载电路和自动下载
ESP32 系列下载程序需要控制 EN 和 GPIO0 两个引脚。常见的设计有两种:
- 手动下载 :按住 BOOT 键,按一下 RESET 键,再松开 BOOT 键,进入下载模式。麻烦但简单。
- 自动下载 :用转换芯片的 DTR 和 RTS 信号控制 EN 和 GPIO0,实现一键下载。CH340、CP2102 都支持。
原生 USB 下载的板子,通常也支持自动下载,因为 USB Serial/JTAG 控制器可以模拟这个时序。但有些便宜板子为了省成本,省略了自动下载电路,只能手动按键。买之前看评论里有没有人抱怨“每次下载都要按两个键”,如果有,说明是手动下载。
提示:如果你经常烧录,建议买带自动下载电路的版本,省很多事。手动下载按久了真的烦。
3.4 USB 线材和接口的坑
USB 线材也是采购单上不能忽略的一项。很多“只能供电不能传数据”的 USB 线,插上板子后电脑识别不到设备。这种线通常是充电线,内部只有电源线,没有数据线。
买线的时候注意:
- Type-C 转 USB-A :最常见的线,用于连接电脑。要确认支持数据传输,不是纯充电线。
- Type-C 转 Type-C :如果你的电脑只有 Type-C 口,需要这种线。注意有些线是 USB 2.0 的,有些是 USB 3.0 的,对 ESP32 来说 USB 2.0 够用。
- OTG 线 :Type-C 转 USB 母口,用于让 S3 当 USB Host,接键盘、鼠标、U 盘等。这个只有 S3 用得上。
我自己的经验是, 买板子的时候顺便买两根靠谱的数据线 ,别用家里随便翻出来的旧线。旧线接触不良或者只供电不传数据,排查起来很浪费时间。
4. 一张可核对的采购单:从模组到配件
4.1 采购单模板
下面是我自己用的采购单模板,每次买板子都按这个核对一遍,基本不会漏东西。
| 项目 | 规格 | 数量 | 备注 |
|---|---|---|---|
| 主控模组 | ESP32-S3-MINI-1-N8R8 | 2 | 带 8MB PSRAM,Octal |
| 备选主控 | ESP32-C3-MINI-1 | 2 | 轻量项目用 |
| 开发板 | S3 Mini 核心板(原生 USB) | 2 | 确认带自动下载 |
| 开发板 | C3 Mini 核心板 | 2 | 确认 USB 口类型 |
| USB 线 | Type-C 转 USB-A,支持数据 | 3 | 多买一根备用 |
| USB 线 | Type-C 转 Type-C,支持数据 | 1 | 笔记本用 |
| OTG 线 | Type-C 转 USB 母口 | 1 | S3 Host 测试用 |
| 排针 | 2.54mm 单排 | 若干 | 根据板子引脚数买 |
| 面包板 | 400 孔 | 1 | 快速验证用 |
| 杜邦线 | 公对母、母对母 | 各 20 | 接线用 |
这张表看起来简单,但每一项都有讲究。比如排针,有些板子出厂不带排针,需要自己焊;有些带排针但没焊。买之前看清楚,不然板子到了没法接线。
4.2 模组型号怎么读
ESP32-S3-MINI-1-N8R8 这个型号,拆开看:
- ESP32-S3 :芯片系列
- MINI-1 :模组封装类型
- N8 :8MB Flash
- R8 :8MB PSRAM
类似的还有 N4R2、N16R8 等。C3 的模组通常是 ESP32-C3-MINI-1,后面跟 Flash 容量,比如 N4 就是 4MB Flash,没有 PSRAM 选项。
买的时候直接搜完整型号,比搜“S3 Mini”准确得多。很多店铺会把“S3 Mini”作为关键词,但实际发货的模组可能是不同厂家、不同配置的。
4.3 开发板还是裸模组
这个问题取决于你的动手能力。 裸模组 便宜,但需要自己画底板、焊引脚、加电源电路和 USB 电路,适合有 PCB 设计经验的人。 开发板 贵一点,但开箱即用,适合快速验证和初学者。
我自己的做法是: 先用开发板验证方案,方案确定后再画底板用裸模组量产 。这样前期开发快,后期成本低。
买开发板时注意看:
- 是否引出所有 GPIO
- 是否有原生 USB 口
- 是否带自动下载电路
- 是否有电源指示灯和用户 LED
- 尺寸和孔位是否适合你的项目
4.4 电源和供电的考虑
ESP32-S3 和 C3 的供电范围通常是 3.0V 到 3.6V,开发板上一般有 LDO 稳压到 3.3V。USB 供电是 5V,经过 LDO 后给芯片。
如果你要用电池供电,注意:
- 锂电池 :标称 3.7V,满电 4.2V,需要降压到 3.3V。可以用 LDO 或 DC-DC。
- 干电池 :两节 AA 是 3V,可以直接供,但电压会随电量下降。
- USB 供电 :最方便,但要注意 USB 口的电流限制,一般 500mA。
S3 跑 WiFi 时峰值电流可以到 300mA 以上,如果同时跑摄像头或屏幕,可能超过 500mA。这时候建议用独立电源,或者用带外部供电的 USB Hub。
注意:不要用电脑的前置 USB 口给大负载的板子供电,前置口通常电流能力弱,容易导致板子重启或下载失败。
5. 开发环境准备:ESP-IDF、Arduino 和 AT 固件
5.1 ESP-IDF 的安装和版本选择
ESP-IDF 是官方开发框架,功能最全,但安装稍微麻烦。我推荐用 ESP-IDF Tools Installer ,Windows 和 macOS 都有,一键安装工具链和 Python 环境。
版本选择上, 建议用稳定版,不要用 master 分支 。稳定版比如 v5.x 系列,bug 少,文档全。安装时注意:
- 安装路径不要有中文和空格
- 确保 Python 版本符合要求(通常是 3.8 以上)
-
安装完成后运行
idf.py --version确认
如果你要用 S3 的 USB OTG 功能,确认 IDF 版本支持对应的 USB 驱动。较新的版本对 USB Host 和 Device 的支持更完善。
5.2 Arduino 环境的配置
Arduino 环境适合快速原型开发。配置步骤:
- 安装 Arduino IDE
- 在首选项里添加开发板管理器网址
- 在开发板管理器里搜索 esp32,安装 Espressif 的包
- 选择对应的开发板型号
注意: Arduino 的 ESP32 包版本要和你的芯片匹配 。S3 和 C3 需要较新的版本,老版本可能不支持。安装后在开发板列表里选“ESP32S3 Dev Module”或“ESP32C3 Dev Module”。
如果你要用 PSRAM,需要在开发板选项里手动开启。Arduino IDE 里有一个“PSRAM”选项,选“OPI PSRAM”或“QSPI PSRAM”,取决于你的模组类型。
5.3 AT 固件的下载和烧录
AT 固件是乐鑫提供的预编译固件,可以通过串口发送 AT 指令控制 WiFi 和蓝牙。适合不想写代码、只想快速联网的场景。
下载 AT 固件时注意:
- 确认固件版本和芯片匹配(S3 和 C3 的 AT 固件不同)
- 确认固件支持的 Flash 和 PSRAM 配置
- 烧录时选择正确的起始地址
烧录工具可以用官方的 Flash Download Tool,也可以用 esptool.py。烧录前先擦除 Flash,避免旧固件残留导致启动异常。
提示:AT 固件的波特率通常是 115200,但有些版本默认是 921600。如果串口没反应,先检查波特率。
5.4 串口驱动的安装
如果你用的是带转换芯片的开发板,需要安装对应的驱动:
- CH340:搜“CH340 驱动”
- CP2102:搜“CP2102 驱动”
- FT231X:搜“FT231X 驱动”
原生 USB 口通常不需要额外驱动,系统自带 CDC 驱动。但 Windows 上可能需要安装 WinUSB 驱动,用 Zadig 工具可以替换。
装完驱动后,在设备管理器里看有没有“USB 串口设备”或“COM 口”。如果没有,换一根线或者换一个 USB 口试试。
6. 常见问题与排查技巧实录
6.1 板子插上电脑没反应
这是最常见的问题。排查顺序:
- 换线 :先用一根确认能传数据的线。
- 换口 :换电脑上的另一个 USB 口,优先用后置口。
- 看设备管理器 :有没有新设备出现,有没有黄色感叹号。
- 装驱动 :如果是转换芯片的板子,装对应驱动。
- 按下载键 :有些板子需要手动进入下载模式才能被识别。
如果以上都不行,可能是板子坏了,或者 USB 口虚焊。用万用表量一下 USB 口的 VBUS 和 GND 有没有 5V。
6.2 下载失败,报错“Failed to connect”
这个报错通常是下载时序不对。解决方法:
- 手动进入下载模式:按住 BOOT,按一下 RESET,松开 BOOT。
- 降低下载波特率:从 921600 降到 115200。
- 检查串口是否被其他程序占用:关闭串口监视器和其他串口工具。
- 检查 EN 和 GPIO0 引脚是否被外部电路拉高或拉低。
如果用的是原生 USB 口,确认 USB 线接的是正确的口(有些板子有两个 Type-C 口,一个 OTG 一个 UART)。
6.3 PSRAM 识别不到
如果你买了带 PSRAM 的板子,但程序里检测不到,检查:
- 开发板选项里是否开启了 PSRAM
- 模组型号是否真的带 PSRAM(有些店铺发错货)
- IDF 版本是否支持该 PSRAM 类型
- 启动日志里有没有 PSRAM 初始化失败的报错
启动时看串口日志,正常会打印 PSRAM 容量和类型。如果没有,说明初始化失败。
6.4 USB 设备模式不识别
用 S3 做 USB 设备时,电脑识别不到,检查:
- USB 线是否支持数据
- 固件是否正确配置了 USB Device
- 描述符是否正确(VID、PID、设备类型)
- 是否需要安装 WinUSB 驱动
可以用 USB 抓包工具看一下枚举过程,确认设备有没有发出描述符。如果枚举失败,通常是描述符配置有问题。
6.5 常见问题速查表
| 现象 | 可能原因 | 解决方法 |
|---|---|---|
| 插上没反应 | 线只供电、驱动没装、口坏 | 换线、装驱动、换口 |
| 下载失败 | 时序不对、波特率太高 | 手动下载、降波特率 |
| PSRAM 识别不到 | 没开启、型号不对 | 开选项、核对型号 |
| USB 设备不识别 | 线不对、描述符错 | 换线、检查描述符 |
| WiFi 连不上 | 天线没接、信号弱 | 接天线、靠近路由器 |
| 板子重启 | 供电不足 | 换电源、加电容 |
6.6 几个我踩过的坑
第一个坑: 买了两块“S3 Mini”,结果一块带 PSRAM 一块不带 。商品标题都写“S3 Mini”,但详情页里配置不一样。后来我学乖了,直接搜完整模组型号。
第二个坑: USB 线只供电不传数据 。这个坑最隐蔽,因为线插上板子电源灯亮,但电脑就是识别不到。后来我专门买了几根确认能传数据的线,贴上标签,避免混用。
第三个坑: AT 固件波特率不对 。烧录完 AT 固件后,串口没反应,折腾了半天才发现默认波特率是 921600,不是 115200。
第四个坑: PSRAM 没开 。Arduino 里默认不开 PSRAM,程序跑起来内存不够,一直重启。后来在开发板选项里开了 OPI PSRAM 才正常。
7. 从采购到点灯:一个最小验证流程
7.1 收到板子后的第一件事
板子到手后,先别急着写代码。按这个顺序做一遍:
- 目视检查 :看有没有虚焊、短路、元件缺失。
- 量电源 :用万用表量 3.3V 和 5V 对地有没有短路。
- 插 USB :看电源灯亮不亮,设备管理器有没有识别。
- 读芯片信息 :用 esptool.py 读一下芯片型号和 Flash 大小。
- 烧录测试固件 :烧一个点灯程序,确认下载和运行都正常。
这一步花不了多少时间,但能提前发现大部分硬件问题。
7.2 点灯程序验证
点灯程序是最简单的验证,但能确认很多东西:
- 下载电路正常
- 芯片能启动
- GPIO 能输出
- 串口能打印
用 Arduino 写一个最简单的:
void setup() {
pinMode(LED_BUILTIN, OUTPUT);
Serial.begin(115200);
Serial.println("Boot OK");
}
void loop() {
digitalWrite(LED_BUILTIN, HIGH);
delay(500);
digitalWrite(LED_BUILTIN, LOW);
delay(500);
}
如果 LED 闪烁,串口有输出,说明板子基本没问题。
7.3 读芯片信息
用 esptool.py 读芯片信息:
esptool.py --port COM3 chip_id
esptool.py --port COM3 flash_id
输出里会显示芯片型号、Flash 大小、MAC 地址等。确认和你的采购单一致。
7.4 验证 PSRAM
在 Arduino 里跑一段 PSRAM 测试:
void setup() {
Serial.begin(115200);
if (psramFound()) {
Serial.printf("PSRAM: %d bytes\n", ESP.getPsramSize());
} else {
Serial.println("No PSRAM");
}
}
如果输出 PSRAM 容量,说明 PSRAM 正常工作。如果输出“No PSRAM”,检查开发板选项。
7.5 验证 USB 设备模式
用 S3 做一个最简单的 USB 键盘:
#include "USB.h"
#include "USBHIDKeyboard.h"
USBHIDKeyboard Keyboard;
void setup() {
Keyboard.begin();
USB.begin();
}
void loop() {
Keyboard.print("Hello");
delay(1000);
}
烧录后,电脑应该识别为一个键盘,并且每秒输入一次“Hello”。如果识别不到,检查 USB 线和描述符配置。
8. 采购单核对清单和最后几条经验
8.1 下单前的核对清单
- [ ] 模组型号写清楚(S3-MINI-1-N8R8 或 C3-MINI-1)
- [ ] PSRAM 容量确认(2MB 还是 8MB)
- [ ] USB 口类型确认(原生还是转换芯片)
- [ ] 天线形式确认(板载还是 IPEX)
- [ ] 排针是否焊好
- [ ] 数据线是否支持数据传输
- [ ] 驱动是否准备好
- [ ] 开发环境是否装好
8.2 最后几条经验
第一,别贪便宜买白牌板子。 有些板子便宜几块钱,但模组是翻新的,或者 PSRAM 是假的,跑起来各种问题。正规渠道买,省心。
第二,多买一块备用。 调试过程中烧坏或者焊坏的概率不低,多一块备用能省很多等待时间。
第三,线材和驱动提前准备好。 板子到了才发现线不对、驱动没装,很影响心情。
第四,先验证再量产。 用开发板把方案跑通,再画底板用裸模组,风险小很多。
第五,记录每一块板子的配置。 我习惯在板子背面贴个标签,写上模组型号、PSRAM 容量、购买日期。时间久了,不看标签真的记不住。
这套采购和验证流程我用了很久,从 S3 到 C3,从开发板到裸模组,基本没再买错过。希望这份采购单能帮你少走点弯路。
252



被折叠的 条评论
为什么被折叠?



