Project Overview
This is a custom development board built around the ESP32-S3-MINI-1-N8 — Espressif's compact Wi-Fi and Bluetooth 5.0 module. The goal was straightforward: design something equivalent to a commercial dev board from scratch, understanding every part of it. It breaks out all usable GPIOs, adds an on-board temperature and humidity sensor, an addressable RGB LED, and powers from a single USB-C cable or 5V rail.
The entire design was done in KiCad 9, from schematic capture through to manufacturing-ready Gerber files, targeting JLCPCB's 4-layer process with the JLC04161H-3313 stackup. The USB differential pair was analysed for impedance using IPC-2141 calculations matched to that specific stackup, and all design rules were verified clean before ordering.
This was completed as an independent project during second year Electrical and Electronic Engineering at the University of Western Australia. It was also my first multi-layer PCB — prior hands-on work had been breadboards and single-layer designs, so KiCad, manufacturing tolerances, and impedance-controlled routing were all learned from scratch alongside the design.
⚠ Note: The 3V3 header pin is a regulated output only — do not apply external voltage to it. The TLV75801 LDO has no back-drive protection; powering through 3V3 with USB disconnected will damage the IC. Power the board via USB-C only. See Rev 2 for a planned fix.
GPIO Pinout Reference
A complete pinout reference for both headers is available below. Every pin is listed with its GPIO number and all alternate functions — ADC, touch, RTC, UART, SPI, JTAG, and I²C — verified against the ESP32-S3-MINI-1 Datasheet v1.2. Strapping pins (GPIO45, GPIO46) are clearly flagged since they affect boot behaviour and should be treated with care in your own designs.
Full interactive pinout reference with color-coded function tags and connector lines to each pin pad.
📌 Open Full Pinout Reference →Bill of Materials
| Reference | Part Number | Description | Qty | Notes |
|---|---|---|---|---|
| Microcontroller | ||||
| U4 | ESP32-S3-MINI-1-N8 | Main MCU — Wi-Fi / BT5.0 / 8MB Flash | 1 | GPIO19/20 USB D±, not broken out to headers. |
| Power | ||||
| U2 | TLV75801PDRVR | 800mA LDO Regulator — 5V → 3.3V | 1 | WSON-6. RθJA = 80.3°C/W. Thermal pad to GND. |
| R3, R4 | 1MΩ / 200kΩ | LDO Output Voltage Setting | 2 | Feedback divider — sets TLV75801 output to 3.3V. |
| USB & Protection | ||||
| J1 | USB4105-GF-A | USB-C Receptacle — 16P Top Mount | 1 | CC1/CC2 pulled to GND via 5.1kΩ — signals USB device mode to host. |
| U1 | D3V3XA4B10LP | 4-line USB TVS ESD protection | 1 | UDFN-10. Protects VBUS, D+, D−. |
| R1, R2 | RC0603FR-075K1L | 5.1kΩ USB-C CC Resistors | 2 | Signals UFP (device) mode to USB host. |
| Sensors & Indicators | ||||
| U3 | ENS210-LQFM | Temperature & Humidity Sensor — I²C | 1 | QFN-4. SCL→GPIO17, SDA→GPIO18. |
| D1 | WS2812B | Addressable RGB LED — PLCC4 | 1 | GPIO48 data line. 3.3V powered — below WS2812B min. VDD (3.5V), see Rev 2. |
| D2 | 150060RS75000 | Red Status LED — 0603 | 1 | Power-on indicator. Current limited by R5. |
| R5 | RC0603FR-07680RL | 680Ω LED Current Limiter | 1 | Series resistor for D2 status LED — ~1.9mA at 3.3V. |
| Passives | ||||
| C2, C4, C5, C6 | CC0603KRX7R7BB104 | 100nF Decoupling Capacitor — 0603 | 4 | Placed adjacent to each IC power pin. |
| C1, C3, C7 | CL10A106MQ8NNNC | 10µF Bulk Capacitor — 0603 | 3 | LDO input, LDO output, and 3V3 rail. |
| R6, R7, R8 | RC0603FR-0710KL | 10kΩ Pull-up Resistors | 3 | EN (R7), I²C SCL (R6), I²C SDA (R8). |
| Connectors & Buttons | ||||
| J2, J3 | 61302211121 | 1×22 Pin Header — 2.54mm vertical | 2 | Full GPIO breakout, 2.54mm pitch. |
| BOOT1, RESET1 | PTS810 SJG 250 | SMD Tactile Button — SPST | 2 | BOOT→GPIO0, RESET→EN. |
Design Specifications
Design Process





Key Engineering Decisions
GPIO19 (D−) and GPIO20 (D+) instead of a CP2102N bridge. One fewer IC, lower BOM cost — serial and JTAG still work natively.0.15 mm, slightly above the 0.142 mm target, giving ~88 Ω — well inside the USB 2.0 Full Speed tolerance of 90 Ω ±15%. Full calculation walkthrough is in the Design Process section.GPIO0 is reserved for the BOOT button, EN for the RESET button, and GPIO19 (D−) / GPIO20 (D+) are routed directly to the USB-C connector — none of these are safe or useful to expose on a general-purpose header. The four positions freed up are replaced with additional power and ground pins: each header provides 3V3 and GND at the top (pins 1–2) and a second GND and 5V VBUS at the bottom (pins 21–22). This gives two ground references per header, which is practical for breadboard use and reduces the chance of floating grounds when connecting peripherals.RθJA = 80.3°C/W vs 176.9°C/W. At 300mA load (P = 0.51W), WSON-6 gives only +41°C junction rise vs +90°C for SOT-23. Thermal pad soldered to GND copper pour.Design Verification
(1 warning excluded)
Assembly & Bring-Up
Assembly. JLCPCB made the bare 4-layer board; I placed the SMD parts by hand and reflowed them on a hotplate.
Bring-up tests. Two small test sketches checked the board one block at a time:
1. Sensor and LED: reads the ENS210 temperature/humidity sensor over I²C (GPIO17/18, address 0x43, with the datasheet's CRC check on every reading) and cycles the WS2812B LED on GPIO48.
2. Solder-joint check: drives every header GPIO high then low so each pin can be probed with a multimeter, then turns on the internal pull-up and pull-down on each pin and reads it back. A pin stuck high or low points to a short to 3V3 or GND.
Result. The board flashes over its own USB-C port (no USB-serial chip) and is now the main controller in my Bip biped robot, running its servos, IMU and WiFi updates.
The WS2812B and the red LED (D2) both worked. The ENS210 answered on the I²C scan, but I have not yet checked its readings against a thermometer.
Future Improvements — Rev 2
100kΩ / 20kΩ, maintaining the same output voltage while lowering source impedance and improving noise rejection.