Powering an ESP32 over USB-C: CC resistors, regulator limits and brownouts
A USB-C port powers an ESP32 board at 5 V as long as three things hold: the port has a 5.1 kΩ pull-down resistor on each CC pin, otherwise a USB-C charger with a C-to-C cable gives no power at all; the cable and 3.3 V regulator handle Wi-Fi transmit peaks of several hundred milliamps; and servos, motors or LED strips get their own 5 V path instead of sharing the board's regulator. When the supply dips, the ESP32 prints Brownout detector was triggered and resets.
How much current an ESP32 needs
| Chip or board | Figure | Source |
|---|---|---|
| ESP32-WROOM-32E, Wi-Fi transmit (802.11b, 1 Mbps, 19.5 dBm) | 239 mA average, 379 mA peak | Espressif datasheet |
| ESP32-WROOM-32E, external supply | at least 0.5 A at 3.0–3.6 V | Espressif datasheet |
| ESP32-S3, Wi-Fi transmit | 340 mA peak; supply at least 500 mA | Espressif ESP32-S3 datasheet |
| Cheap Yellow Display (original) | about 115 mA at 5 V | Seller specification; no Wi-Fi peak given |
The average is not the problem; the peaks are. A thin cable or a weak supply that is fine at idle can sag for the few milliseconds the radio transmits.
Regulator limits on common boards
- AMS1117-3.3
- Up to 1 A, with a dropout of up to 1.3 V. From 5 V USB that leaves little margin once a diode sits in front of it. Used on many cheap dev boards.
- Cheap Yellow Display
- Two AMS1117-3.3, one for the ESP32 and one for the display; USB 5 V passes a 1N5819 diode first, and VIN on connector P1 passes a P-MOSFET.
- Arduino Nano ESP32
- MP2322GQH buck converter to 3.3 V. USB 4.8–5.5 V, VIN 6–21 V recommended (the cheat sheet says 5–18 V). No 5V pin; VBUS carries 5 V only when the board runs from USB. Arduino does not publish the 3.3 V rail limit we could find.
- ESP32-S3-DevKitC-1
- A 5 V to 3.3 V LDO. Power through USB, the 5V and G pins, or the 3V3 and G pins, never more than one of these at a time. The LDO rating is not given in the user guide.
Espressif's checklist for the ESP32 asks for at least 10 µF plus 0.1 µF at the 3.3 V power entrance, because transmit spikes can otherwise pull the rail down.
USB-C needs two 5.1 kΩ resistors
A USB-C power source only switches on its 5 V once it sees a sink: a 5.1 kΩ pull-down resistor (Rd) on CC1 and on CC2. A USB-A to USB-C cable has this built in, which is why a board without the resistors still works with one. With a USB-C charger and a C-to-C cable, the same board gets nothing.
The dual-USB Cheap Yellow Display (CYD2USB) is a known example: its USB-C port lacks the CC resistors, so power it with a USB-A to USB-C cable. On your own PCB, place one 5.1 kΩ resistor from each CC pin to ground.
"Brownout detector was triggered"
The ESP32's brownout detector is on by default. When the supply drops below its threshold, the chip prints this line and resets:
Brownout detector was triggered
It usually shows up when Wi-Fi starts or a load switches on. Check in this order: a shorter or thicker USB cable, a different power supply, a capacitor near the board's 3.3 V input, and moving any motor, servo or LED strip off the board's supply. Turning the detector off hides the dip without fixing it.
Give motors and LED strips their own 5 V path
Servos, motors and LED strips draw current in bursts. Fed from the board's 3.3 V regulator, they share a regulator that already has to cover Wi-Fi peaks, and each burst can pull the ESP32 into a brownout. A GPIO pin cannot feed them either: the ESP32-WROOM-32E sources 40 mA and sinks 28 mA at most drive strength. Feed such loads from the 5 V supply directly, before the board's regulator, with a common ground and only the signal wire on the GPIO. On a Nano ESP32, which has no 5V pin, take that 5 V from the supply side, not from the board.
Batteries
A battery adds a charger, protection and a second power path. If you want a device that just runs, USB-C at 5 V is simpler. Finish my build builds devices that run on USB at 5 V; if your build runs on a battery today, we make a USB-C version of it.
Let your agent check it
check_project reads your repo or ESPHome file and reports the power envelope of the board and modules it finds, so a servo on the 3.3 V rail shows up before you build it. Connect the Protoship MCP server once:
claude mcp add --transport http protoship https://mcp.protoship.dev codex mcp add protoship --url https://mcp.protoship.dev
An agent without MCP calls GET https://protoship.dev/api/check?url=… with the link to your repo or config file.
Questions
Why does my ESP32 not power on with a USB-C to USB-C cable?
The board's USB-C port is missing the 5.1 kΩ pull-down resistors on CC1 and CC2, so a USB-C source never switches on its 5 V. Use a USB-A to USB-C cable, which has the resistor built in, or add the two resistors on your own PCB.
What does "Brownout detector was triggered" mean?
The supply voltage dipped below the brownout threshold and the ESP32 reset itself. Typical causes are a thin cable, a weak supply, missing capacitance or a motor or LED strip on the board's supply.
Can I power servos from the ESP32's 3.3V pin?
No. The 3.3 V rail comes from the board's regulator, which also has to cover Wi-Fi peaks. Feed servos from the 5 V supply directly with a common ground and connect only the signal wire to a GPIO.
How much current does an ESP32 need?
Espressif gives the ESP32-WROOM-32E 239 mA average and 379 mA peak while transmitting at 802.11b, and asks for an external supply of at least 0.5 A. For the ESP32-S3 it gives a 340 mA transmit peak and at least 500 mA supply.
Finish my build Let your agent check your project
Sources
Read on 4 November 2026.
- Espressif: ESP32-WROOM-32E datasheet v2.1
- Espressif: ESP32-S3 datasheet
- CYD repo: seller specification ESP32-2432S028
- Advanced Monolithic Systems: AMS1117 datasheet
- CYD repo: vendor schematic ESP32-2432S028-MCU
- Arduino Nano ESP32 datasheet (ABX00083)
- Arduino: Nano ESP32 cheat sheet
- Espressif: ESP32-S3-DevKitC-1 v1.1 user guide
- Espressif: ESP32 schematic checklist
- Texas Instruments: USB Type-C connection detection (Rd on CC)
- CYD repo: cyd.md (CYD2USB, colour fix, CC resistors)
- ESP-IDF: fatal errors (brownout)
- Protoship: Finish my build