← Back to projects

Embedded Systems · 2025

ESP32-S3 wearable developing

Custom PCB & control system

Custom PCB
From-scratch design
USB-C
Power management
OTA
Firmware updates
BLE + Wi-Fi
Dual wireless

Wearable electronics require extreme miniaturization without sacrificing functionality. Off-the-shelf dev boards are too large, too power-hungry, and lack the I/O configuration needed for custom wearable applications.

Designed a custom ESP32-S3 wearable platform from scratch — schematic, PCB layout, power management, and firmware. The board integrates USB-C charging, multichannel I/O, and wireless connectivity in a form factor small enough to embed in wearable accessories.

How it's wired

ESP32-S3 wearable: power path, RF, I/O, and OTA update flow with A/B partition rollback. Animated arrows show power and data direction.

POWER COMPUTE WIRELESS UPDATE USB-C Charge IC BQ24074 LDO 3.3V Low-noise rail LiPo cell Protection IC ESP32-S3 Dual-core · 240 MHz • Native USB • 2.4 GHz radio • 8 MB PSRAM • A/B partition • Hardware crypto • Watchdog timer Wi-Fi 802.11 OTA channel BLE 5.0 Companion app I/O GPIO breakout Multichannel OTA server Signed firmware Version-pinned to HW A/B + verify-on-boot Rollback path Failed boot detected → Revert to A partition Production-ready wearable Compact form factor · OTA-updatable · USB-C · field-recoverable

Technical decisions

Why this stack, what the trade-offs were.

Why ESP32-S3 instead of nRF52 or RP2040?

Needed Wi-Fi + BLE on a single chip with native USB for serial/programming without an external UART. nRF52 needed an extra Wi-Fi co-processor. RP2040 had no built-in radio. ESP32-S3 integrated everything at the cost of higher idle current — addressed via aggressive sleep modes.

Why A/B partition OTA instead of a simpler in-place update?

In-place updates are one bad flash from a bricked device. A/B partitions let firmware verify itself after boot — if the new image fails to come up cleanly, the bootloader reverts to the last-known-good partition automatically. Critical for a wearable you can't easily reflash in the field.

How is firmware pinned to hardware revisions?

Each board carries a hardware revision string burned into OTP fuses at production. The OTA server cross-references this against the firmware manifest before serving an update — a firmware built for rev B can't deploy to a rev A board even if the chip is identical. Prevents one bug from bricking an entire fleet.

How is the 5mm form factor maintained with USB-C, radio, and a battery?

Component selection: 0402 passives, integrated antenna (no external module), low-profile USB-C receptacle, flex-circuit interconnect so the battery sits adjacent rather than stacked. PCB is 4-layer with controlled impedance on the RF traces.

Edge case handling

What breaks at the edges, and how the system responds.

Limitations

What this system is not today — to be precise about scope.

What breaks first at 10x

Designed for batch manufacturing: test points on every rail, dedicated programming header, panelization-friendly outline, DFM-checked stencil apertures. Firmware build pipeline produces signed binaries that the OTA server pins to a hardware revision string — a firmware bug can't be deployed to the wrong board variant.

What I'd build next

Take the OTA server from static-host to staged rollout: deploy to 1% of devices, watch crash-loop telemetry, gate the broader rollout on that signal. Run the EMC + drop test cycle to clear the way for production runs.

Build details

ESP32-S3 C/C++ PCB Design USB-C BLE/Wi-Fi OTA

Want to dig deeper?

Happy to walk through code, decisions, or design files.

Get in touch →