PHASE 03SCHEMATIC
Your parts are already chosen and sourced — so the schematic isn't where you make decisions, it's where you write them down. Walk the board one small sub-circuit at a time: name the problem, meet the parts that solve it, then capture it in KiCad. Every refdes below is already on your BOM.
Think of the schematic as six small problems standing between a bare ESP32 module and a board you can plug in and flash. The board needs the right voltage, a steady supply, a defined way to boot, a USB port that negotiates power, something you can see, and a shield from the outside world. Each section below takes one of those problems and shows you the exact parts that solve it. Read them in order — they follow the power as it comes in at the USB connector and works its way to the chip. Every part has a — U1, C5, R3 — the short label that ties its symbol, its BOM line, and its spot on the board together. You'll meet them in the tables under each section, and you can spin the 3D model of the headline parts as you go.
Your ESP32-S3 wants a clean 3.3 V supply, but USB gives you 5 V. Something has to step it down.
That something is **U2**, the RT9080. It's an — short for low-dropout — which is just a voltage regulator that holds its output steady even when the input is only a little above it. Why not a simple voltage divider (two resistors)? Because a divider sags the moment the chip pulls current — and the ESP32's draw jumps every time its radio transmits. A regulator actively holds 3.3 V no matter the load. That's the whole point of a regulator. One thing to remember: the RT9080 needs a capacitor on its input and another on its output to stay stable — that's **C5** and **C6**, 1 µF each. The datasheet promises stability with 1 µF ceramic in and out, which is exactly what we gave it.
| Ref | Part | Role |
|---|---|---|
| U2 | RT9080-33GJ5 | 5 V → 3.3 V LDO, 600 mA |
| C5 C6 | 1 µF X7R | LDO input / output stability caps |
Don't treat C5/C6 as optional. An LDO without its output capacitor can oscillate — turning your clean rail into noise.
In plain terms, why use a regulator (U2) instead of just resistors to drop the voltage? Because a regulator holds 3.3 V steady no matter how much the chip draws — a plain resistor divider would sag the moment the chip gets busy.
▸Deep dive· Why a low-dropout (LDO) part?
Even when USB sags to about 4.6 V under load, the RT9080 only needs about 0.53 V of headroom to keep regulating: 4.6 − 0.53 = 4.07 V, still comfortably above 3.3 V. A cheaper regulator that needs 1–2 V of headroom would drop out right here, and the 3.3 V rail would collapse. That margin is the whole reason we chose a (LDO) part.
A steady rail at the regulator is not the same as a steady rail at the chip a few centimetres away.
When the ESP32 switches its transistors millions of times a second, it grabs tiny gulps of current faster than the regulator across the board can possibly respond. Left unfed, the 3.3 V right at the chip's pins would dip on every gulp — and a microcontroller fed a dipping rail glitches or resets. The fix is a small parked right at each power pin: **C2, C3, and C7** (0.1 µF each). They hold a little reserve of charge and hand it over instantly when the chip asks, then refill between demands. **C1** (10 µF) plays the same game one size up — a for the whole rail, smoothing the larger swings the little caps don't cover. Together they're called bulk plus bypass.
| Ref | Part | Role |
|---|---|---|
| C2 C3 C7 | 0.1 µF X7R | Bypass — one at each module 3V3 pin |
| C1 | 10 µF X5R | Bulk reservoir for the rail |
These only work if they sit right against the module's power pins. A decoupling cap routed the long way round is just decoration — the trace inductance chokes off the fast current it's supposed to deliver. (Carry this into LAYOUT.)
In one line, what do C2/C3/C7 do? They sit right at the chip's power pins and keep its 3.3 V steady when it suddenly pulls current.
▸Deep dive· Why three small caps, not one big one?
A capacitor only helps if it's close — the longer the trace between it and the pin, the more its help fades (trace inductance gets in the way). Three 0.1 µF caps, one hard against each power pin, beat a single 0.3 µF cap sitting a few millimetres away: being close matters more than raw capacitance. The 10 µF (C1) then handles the slower, larger swings the little ones can't.
A digital input wired to nothing doesn't read 0. It floats — it picks up noise and reads randomly.
The ESP32 checks two the instant it wakes up: EN (chip-enable / reset) and GPIO0 (boot select). Both have to be at a definite level at that moment, so each gets a — **R1** and **R2**, 10 kΩ — gently tying it to 3.3 V (logic high). EN high means the chip runs; GPIO0 high at reset means boot normally from flash. The two buttons override that resting level while you hold them. **SW1** pulls EN to ground to reset the chip; holding **SW2** (GPIO0 to ground) through a reset drops the chip into USB download mode so you can flash new firmware. The resistor sets the default; the button wins while it's pressed.
| Ref | Part | Role |
|---|---|---|
| R1 R2 | 10 kΩ | Pull-ups on EN / GPIO0 |
| SW1 SW2 | B3F-1000 | EN (reset) / BOOT (download) |
If R1 weren't there and you pressed nothing, what would the EN pin read? It would float — pick up electrical noise and read randomly, so the chip might reset or never start. The pull-up gives it a steady, known level.
▸Deep dive· Why 10 kΩ, and why 'weak'?
A pull-up only has to set the resting level, not power anything — so it should be 'weak,' meaning a high value. At 3.3 V, a 10 kΩ pull-up leaks just 0.33 mA (3.3 V ÷ 10 kΩ), which is negligible, yet it still firmly holds the pin high. A 100 Ω pull-up would burn 33 mA doing the same job and would fight the button when you press it. Weaker is better here.
A USB-C source won't push 5 V onto VBUS until it's sure something on the other end actually wants power.
Your board announces itself as a consumer — a — by tying each to ground through a 5.1 kΩ resistor, called . The host sees that exact resistance and only then switches on. There are two of them, **R3** and **R4**, because Type-C is reversible: whichever way the plug goes in, one of CC1/CC2 is the live one, so both need their own Rd. These are (to ground) — the mirror image of the boot pull-ups you just met. And 5.1 kΩ isn't arbitrary; it's the value the USB-C spec assigns to a basic sink.
| Ref | Part | Role |
|---|---|---|
| R3 R4 | 5.1 kΩ | CC1 / CC2 sink resistors (Rd) to GND |
What is R3/R4's message to a charger, in plain words? 'I'm a device that wants power.' That's what makes a USB-C charger turn its 5 V on.
▸Deep dive· Why exactly 5.1 kΩ, and why two?
A device advertises itself as a power 'sink' by tying each to ground through a 5.1 kΩ resistor (called ) — that exact value is what the USB-C spec assigns to a basic sink. There are two (R3, R4) because Type-C is reversible: whichever way the plug goes in, one CC pin is the live one, so both need their own Rd. The sneaky failure: with an old USB-A-to-C cable the board would still work (A ports always have 5 V), so it can seem fine on an old cable yet look dead on a new charger.
An LED is a diode, and a diode is a poor judge of its own appetite.
Give an LED more voltage than it wants and it pulls more and more current until it cooks itself. So you never connect one straight across a supply — you put a with it to set the current. The math is just Ohm's law on the leftover voltage. The supply is 3.3 V; the red LED drops about 1.8 V across itself (its ), leaving 1.5 V across **R5**. With 470 Ω that's I = 1.5 V ÷ 470 Ω ≈ 3.2 mA — bright enough to see, easy on the driving it. **R5** and **R6** do this for LED1 (red, power) and LED2 (yellow, user).
| Ref | Part | Role |
|---|---|---|
| LED1 | Red, Vf ≈ 1.8 V | Power indicator |
| LED2 | Yellow, Vf ≈ 2.0 V | User / blink LED |
| R5 R6 | 470 Ω | LED series current-limit |
An LED without its series resistor is a short circuit with extra steps — it flashes once and dies. R5/R6 are not optional.
Why can't you wire an LED straight to 3.3 V with no resistor? An LED doesn't limit its own current — without a resistor it pulls far too much and burns out almost instantly.
▸Deep dive· Sizing the resistor (Ohm's law)
The resistor sets the current from the leftover voltage: I = (Vsupply − Vf) ÷ R. The red LED drops about 1.8 V across itself (its ), so on 3.3 V through 470 Ω: (3.3 − 1.8) ÷ 470 ≈ 3.2 mA — bright enough to see, easy on the GPIO. The yellow LED's Vf is higher (~2.0 V), so the same 470 Ω gives a bit less: (3.3 − 2.0) ÷ 470 ≈ 2.8 mA. That's why swapping LED colours at a fixed resistor quietly changes the brightness.
The USB connector is the one part of your board that touches the outside world, so it's where trouble comes in.
It gets two guardians. **F1** is a (a PTC polyfuse) on : if something downstream pulls too much current, it heats up, its resistance shoots up, and it throttles the current down to a trickle — then, once it cools off, it returns to normal all by itself. **D1** is an -protection array (the USBLC6-2) on the two data lines and VBUS. When a static spike arrives — thousands of volts off a fingertip — it clamps that spike to ground in a nanosecond with a , before it can punch through the ESP32's delicate USB pins. It's deliberately a low-capacitance part, because USB data is fast and a bulky protector would smear the signal.
| Ref | Part | Role |
|---|---|---|
| F1 | 1206L050YR | Resettable PTC — 0.5 A hold / 1 A trip on VBUS |
| D1 | USBLC6-2SC6 | ESD clamp on D+ / D− and VBUS |
What two things does the USB port need protecting from? Too much current (a short or a greedy device) and static-electricity zaps on the data lines.
▸Deep dive· How F1 and D1 actually protect the port
F1 is a (a 'polyfuse'): on overcurrent it heats up, its resistance shoots up to throttle the current, then it heals once it cools — unlike a glass fuse you'd have to desolder and replace. D1 is an array on the data lines; when a static spike arrives — thousands of volts off a fingertip — it clamps that spike to ground in a nanosecond. It's deliberately a low-capacitance part, because USB data is fast and a bulky protector would smear the signal.
You've now reasoned out every part — so now you draw it. Start from the KiCad starter below: it's a ready-made project, with the symbol library plus every BOM part already dropped onto the sheet, spaced out but not yet wired. Your job isn't to find parts, it's to arrange them into a readable layout and wire them into the real circuit. A good schematic isn't just correct, it's readable: someone (including future-you) should be able to follow it at a glance. A few habits and one rules-check get you there.
Arrange the parts the export gave you so the drawing reads the way the circuit works — power in at the top, signal flowing left to right.
Drag each part so the sheet reads left → right: inputs on the left, outputs on the right. Put (3V3, VBUS) at the top pointing up, and grounds at the bottom pointing down. Group parts by sub-circuit, the same way you just learned them — the USB-C front end together, the regulator together, the ESP32 and its caps together. And keep each right next to the pin it feeds, so the schematic mirrors how the part has to sit on the real board.
Connect with names, not a maze of lines. Two wires with the same label are the same connection.
For anything that crosses the sheet — a power rail, a reset line — give the wire a instead of dragging a line all the way across: two wires that share a label are connected, and the drawing stays clean. Use for 3V3 and GND so every part taps the rail by name. And remember that wires which merely cross aren't joined unless there's a junction dot — let KiCad drop those at real T-connections.
▸Deep dive· Why named labels beat long wires
A net is defined by connection, not by a drawn line — so a called 3V3 in one corner of the sheet is the same wire as a 3V3 label in the other corner, with nothing drawn between them. That isn't a shortcut, it's the readable way: a schematic with twenty rails crossing it hides mistakes, while one built from named and short local wires shows each sub-circuit as a tidy island. The electrical meaning is identical; the human meaning is night and day.
A handful of keys do most of the work — hover over a part and press the key. (Live list: Preferences → Hotkeys, or press ? in the editor.)
| Key | What it does |
|---|---|
| A | Add a symbol (place a part) |
| P | Add a power port — 3V3, GND, VBUS |
| W | Draw a wire |
| L | Place a net label |
| R / M / G | Rotate / move / drag (G keeps wires attached) |
| X / Y | Mirror across the X / Y axis |
| E / V / U | Edit properties / value / reference |
| Q | No-connect flag — mark a pin you leave open |
Before you trust the schematic, let KiCad check it: Inspect → Electrical Rules Checker.
reads your whole schematic and flags what's electrically wrong — a pin connected to nothing, two outputs fighting each other, a power rail that nothing drives. Run it, then work the list down to zero. The bar is the same one you'll meet again at DRC: clean, or every remaining flag is an exception you've marked and understood — not one you scrolled past.
| ERC says… | …you do |
|---|---|
| Input power pin not driven | Add a PWR_FLAG to rails that arrive from outside (VBUS from USB) or leave a regulator — it tells ERC the rail really is powered. Fix it, don't ignore it. |
| Pin not connected | Meant to leave it open? Drop a no-connect flag (Q) on it — now it reads as intentional, not an oversight. |
| Unconnected wire / net | A real mistake — join it, or delete the stray end. Don't scroll past this one. |
▸Deep dive· Why a powered rail still trips ERC (and PWR_FLAG fixes it)
ERC checks by pin type: it wants every power-input pin (like the ESP32's 3V3) fed by a power-output pin somewhere. But your 3.3 V comes out of the , whose output KiCad may not mark as a power-output, and your 5 V arrives from a connector that has no 'output' pin at all — so ERC sees a rail nothing officially drives and warns you. A is a tiny symbol whose single pin IS a power-output: drop it on VBUS and on 3V3 and you've told ERC, truthfully, that the rail is driven and you checked. That's the honest way to clear the warning, not a mute button.
A clean, readable schematic is the artifact this stage wants.
- Run ERC until it's clean — or every remaining flag is marked and understood.
- Plot the schematic to PDF (File → Plot) for a readable copy, and keep the .kicad_sch source.
- Attach the schematic as this stage's artifact — that's what the gate below checks.
Quick check — schematic
You've now read every part on the board and why it's there, and captured it as a schematic. Attach the schematic file (the gate below tracks it). Carry one thing forward: U1 has a PCB antenna, so when you reach LAYOUT the keep-out underneath it is a hard constraint, not a suggestion.