ESP32 怎么供电?USB、电池、3.3V/5V 与常见供电坑
- 搞清 ESP32 的几种供电方式和电压关系
- 看懂并避开"一上电就重启""带不动外设"等供电坑
- 知道电池供电怎么配
代码编译过了,烧录也成功了,串口监视器一打开却看到板子在不停地打印开机日志——刚连上 WiFi 就重启,循环往复。或者程序跑得好好的,一让舵机转起来,整块板子瞬间黑掉重来。你翻遍了代码逻辑,断点打了一轮又一轮,什么都对。
十有八九,问题不在代码,在供电。
ESP32 的"玄学故障"里,供电相关的占了一大半。它不会报编译错误,不会有明确的异常堆栈,表现出来就是莫名其妙的重启、间歇性死机、外设带不动、电池撑不过半天。这篇把 ESP32 的供电从头讲清楚,让这类问题从"玄学"变成"能查能修"。
ESP32 到底吃几伏
先记住一个核心事实:ESP32 芯片本体工作在 3.3V。不是 5V,是 3.3V。
但你手里的开发板(ESP32 DevKitC、NodeMCU-32S 这类)通常通过 USB 的 5V 供电。这中间靠的是板载的一颗 LDO 稳压芯片(常见的是 AMS1117-3.3 或 ME6211),它把 5V 降到 3.3V 喂给芯片。关于稳压芯片怎么把一个电压稳稳地变成另一个电压,电源与稳压那篇讲了原理。
所以一块开发板上你能找到三个供电入口:
- USB 口:插上电脑或充电头,5V 进来,经板载 LDO 降到 3.3V。最省事,新手默认用这个。
- 5V / VIN 引脚:外部给 5V(比如 5V 电源适配器、移动电源),同样走板载 LDO。注意这个脚一般没有反接保护,正负接反可能烧板。
- 3.3V 引脚:外部直接给 3.3V,绕过板载 LDO,直接喂芯片。这个脚很娇气——给高了(比如灌 5V)芯片当场报废,所以只在你确实有一路干净稳定的 3.3V 时才用它。
记住这条铁律:USB 口和 5V 脚能接 5V,3.3V 脚只能接 3.3V,三者别混。
GPIO 也是 3.3V 逻辑,别灌 5V
既然芯片是 3.3V 的,它的 GPIO 引脚输出的高电平就是 3.3V,能识别的输入高电平也是按 3.3V 来的。
这带来一个新手最容易踩的坑:拿一个 5V 的传感器或模块直接接到 ESP32 的 GPIO 上。模块输出 5V 高电平,灌进 ESP32 的输入脚——轻则读数异常,重则把那个引脚烧掉。ESP32 的 GPIO 不是 5V 容忍(5V tolerant)的。
正确做法是中间加一个电平转换。3.3V 和 5V 设备怎么安全对接,看电平转换那篇,里面讲了分压电阻、专用电平转换芯片几种方案该怎么选。
顺带说一句电压和电流的基本关系——为什么 3.3V 和 5V 不能随便混、为什么电流不够会出问题,电压与电流那篇是底层基础,建议补一下。
WiFi 一发射,电流就飙上去
电压搞清楚了,接下来是更隐蔽的一项:电流。
ESP32 平时待机或单纯跑计算,电流不大,几十 mA。但它一旦启动 WiFi 发射,瞬时峰值电流能冲到 240mA ~ 500mA(看具体型号和发射功率)。这是个脉冲式的峰值,持续时间很短,但来得很猛。
问题就出在这个峰值上。如果你的供电跟不上这一下子的电流冲击,芯片的供电电压会瞬间被拉低,低到一定程度,ESP32 内部的 Brownout 检测电路(欠压检测)就会判定"电压不够了,不安全",强制复位。
表现就是:程序跑到连 WiFi 那一步就重启。你以为是 WiFi 代码有 bug,其实是这条供电链撑不住 WiFi 发射的电流峰值。
一上电/一连 WiFi 就重启 = Brownout
把上面这条单独拎出来强调,因为它是 ESP32 重启故障里出现频率最高的一个。
如果你在串口里看到类似这样的复位原因:
Brownout detector was triggered
或者复位原因显示 rst:0x... (BROWNOUT_RST),那就实锤了——是欠压复位,供电不足。
常见的几个根子:
- 用了电脑前面板的 USB 口:很多台式机前置 USB 供电能力弱,给不动 ESP32 的峰值电流。换到机箱后面主板直出的 USB 口,或者用带独立供电的 USB Hub。
- 用了劣质 / 太细 / 太长的 USB 线:很多便宜线只能传数据,电源线芯细,压降大。一根线就能让能跑的板子变成不停重启。换一根粗一点、短一点的好线,常常立刻解决。
- 板载 LDO 本身电流上限不够:AMS1117 标称能给 1A,但发热严重、压降大,质量参差。带的东西一多就吃紧。
- 滤波电容不够:在 3.3V 脚和 GND 之间并一个较大的电解电容(比如 470μF ~ 1000μF),能给峰值电流"垫一下",吸收瞬时冲击,很多时候能压住 Brownout。
最稳的解法:别从 USB 取电跑正经项目,用一路独立、能扛得住峰值的外部电源直接供 5V 脚或 3.3V 脚。
带电机、舵机这类大电流外设
如果说 WiFi 是几百 mA 的脉冲,那电机、舵机就是持续的大电流胃口。一个普通的 SG90 舵机堵转能拉几百 mA,一个直流减速电机轻松上 1A,多个电机一起更是奔着几安培去。
新手最常犯的错:把电机/舵机的电源直接接到开发板的 3.3V 或 5V 引脚上取电。板载 LDO 那点电流根本喂不饱,结果就是电机一动板子就垮,或者电机有气无力转不动。
正确做法是:
- 电机用独立电源:单独一路电池或电源给电机驱动模块供电,不要从 ESP32 板子上分电。
- 必须共地:电机电源的 GND 要和 ESP32 的 GND 连在一起,不然信号没有共同参考,控制全乱。这一步新手最容易漏。
- ESP32 只出控制信号:它的 GPIO 只负责给电机驱动芯片发指令(PWM、方向),大电流让驱动模块去扛。
这套电机供电 + 共地 + 驱动模块的接法,机器人电机驱动那篇讲得更细,做小车、机械臂的时候照着接。
电池供电怎么配
想让 ESP32 离开数据线、靠电池独立工作,这是绕不开的一关。
主流方案是 3.7V 锂电池(18650 或锂聚合物软包)。锂电满电 4.2V、用到 3.0V 左右,标称 3.7V。怎么接,看你给哪个脚:
- 接 5V/VIN 脚:3.7V 直接接 VIN 一般偏低(板载 LDO 要 3.3V 输出,需要一点压差余量,3.7V 勉强够但裕量小,电量一掉就不稳)。更稳的做法是中间加一个升压模块把 3.7V 升到 5V,再喂 VIN。
- 接 3.3V 脚:3.7V 比 3.3V 高,不能直接接 3.3V 脚,要么降压到 3.3V,要么还是走 VIN + 板载 LDO 这条路。
充电管理用 TP4056 模块最常见:一块几毛钱的小板,带 USB 充电口,能给单节锂电安全充电(恒流恒压、充满自停),有的型号还带过放保护。整套典型连法是:TP4056 管充电 + 锂电 + 升压模块到 5V + ESP32。
要让电池撑得久,光选大容量电池不够,关键是降功耗。ESP32 有 **Deep Sleep(深度睡眠)**模式,睡下去整机电流能从几十 mA 降到几十 μA 级别。一个定时上报传感器数据的项目,平时睡着、到点醒来发一次数据再睡,电池续航能从几天拉长到几个月。深度睡眠那篇讲了怎么进睡眠、怎么定时唤醒。
锂电池是这套方案里唯一真有危险的环节。绝对不要短路电池正负极(瞬间大电流会发烫、起火);不要用没有保护的电路过充(过充会鼓包甚至爆燃);不要用劣质来路不明的电芯。务必用 TP4056 这类带保护的充电管理模块,别拿万能充或随便一个电源硬怼。锂电的安全边界和保护电路怎么做,锂电安全那篇必须看完再动手。
供电方式对比表
| 供电方式 | 接入电压 | 经过板载 LDO | 适合场景 | 注意 |
|---|---|---|---|---|
| USB 口 | 5V | 是 | 开发、调试 | 受电脑 USB / 线材限制,跑大项目易欠压 |
| 5V / VIN 脚 | 5V | 是 | 适配器、移动电源、升压后的电池 | 一般无反接保护,正负别接反 |
| 3.3V 脚 | 3.3V | 否(直供芯片) | 已有干净 3.3V 电源 | 灌高电压当场烧芯片,最娇气 |
| 锂电 + 升压到 VIN | 3.7V→5V | 是 | 便携、独立运行 | 配 TP4056 充电、注意锂电安全 |
供电故障速查表
| 现象 | 多半是 | 怎么修 |
|---|---|---|
| 一连 WiFi 就重启 | Brownout 欠压(峰值电流供不上) | 换好 USB 口/好线、加 470μF 电容、换独立电源 |
| 一上电就循环重启 | 供电严重不足或线材太差 | 换粗短数据线、换供电能力强的电源 |
| 电机/舵机一转板子就死 | 大电流从板子取电,LDO 扛不住 | 电机用独立电源 + 共地,板子只出信号 |
| 5V 模块接 GPIO 后读数乱 / 引脚坏 | GPIO 被 5V 灌坏(非 5V 容忍) | 加电平转换 |
| 电池供电活不过半天 | 没做低功耗 | 用 Deep Sleep,平时睡、到点醒 |
| 接 3.3V 脚后芯片不工作/发烫 | 给 3.3V 脚灌了过高电压 | 确认只给 3.3V,超了基本已损坏 |
学会用万用表量一下
排查供电,最有用的工具是一个几十块的万用表。别凭感觉猜,量出来。
把万用表打到直流电压档(DC 20V 档),黑表笔接 ESP32 的 GND 脚,红表笔接 3.3V 脚:
- 量到稳稳的 3.2V ~ 3.4V:供电正常。
- 量到只有 2.x V 或者数字在跳:板载 LDO 没正常工作,或者供电不足,这就是重启的根源。
- 顺手再量一下 5V/VIN 脚是不是真有 5V,能定位到底是输入就不足,还是 LDO 这一级掉链子。
进阶一点,如果你有示波器,可以在 WiFi 发射的瞬间看 3.3V 脚的电压有没有"塌一下"——那个瞬间的电压凹陷,就是 Brownout 的直接证据。没有示波器,万用表也够用了。
动手挑战:给你的电池项目设计供电方案
假设你要做一个靠电池供电、定时用 WiFi 上报温度的小盒子,自己把供电方案设计出来,至少回答这几个问题:
- 用什么电池?容量大概多少?为什么。
- 电池电压怎么对到 ESP32 能吃的电压?需不需要升压模块?接哪个脚?
- 充电怎么管理?用什么模块?锂电安全你做了哪些保护?
- WiFi 发射的峰值电流这条供电链扛得住吗?要不要加电容?
- 怎么让电池撑得久?Deep Sleep 怎么用,平时多久醒一次。
- 上电后,你打算用万用表量哪几个点来确认供电没问题?
把这六问答完,你的供电认知就从"能跑就行"升级到"我知道为什么能跑"了。
小结
ESP32 的供电,记住几个关键数字和原则就够用:芯片本体 3.3V、GPIO 也是 3.3V 逻辑别灌 5V、WiFi 峰值电流可达 几百 mA、一连 WiFi 就重启基本是 Brownout 欠压、电机大电流要 独立电源 + 共地、电池供电配 TP4056 + 升压 + Deep Sleep。
供电不是玄学,是有原理、能测量、能修的工程问题。两篇原理文章是这一切的地基:电源与稳压讲清楚电压是怎么稳出来的,锂电安全讲清楚电池这一环的边界在哪——动手做带电池的项目前,这两篇请务必看完。