Table of Contents
- Resound — Hardware Design v0.1 (stackable, battery-powered)
- 1. Architecture & standardized hardware
- 2. Stacking connector & bus (detail: [Stack Connector & Addressing])
- 3. I2C addressing for identical boards
- 4. Power & battery (detail: [Power and Battery])
- 5. Carrier PCB (detail: [Carrier PCB and BOM])
- 6. LED subsystem (future, music-reactive) (detail: [LED and Music Sync])
- 7. BOM summary
- 8. Open items for the EE (verify before tape-out)
Resound — Hardware Design v0.1 (stackable, battery-powered)
Consolidated design package from four research workstreams (power/battery, stack connector & addressing, carrier PCB & BOM, LED). This is a design-for-layout package, not CAD/Gerbers — hand to an EE / a KiCad pass. Figures are researched estimates; open verification items in §8.
1. Architecture & standardized hardware
- SINK (1): iPhone A2DP in -> decodes -> drives the shared I2S bus (master). GPIOs BCK=5, WS=25, DATA=23.
- BROADCASTER (N): reads I2S -> A2DP-streams to one speaker. GPIOs BCK=19, WS=18, DATA=22.
- HUD (1): ESP32-S3-Touch-LCD-1.28 round touch display; controls over I2C (its GPIO15=SDA / GPIO16=SCL).
- Control bus I2C on every audio board: SDA=GPIO32, SCL=GPIO33 (matches firmware).
- All audio/control boards are the SAME module: ESP32-WROOM-32E. One carrier PCB, two assembly variants (SINK vs BROADCASTER). Channels are brand-agnostic (Headset / Speaker 1 / Guest / ...).
Builds & runtime targets: Small = 1 HUD + 1 SINK + 3 BROADCASTERS (>=12 h). Beast = +6 or +12 broadcasters (>=24 h).
2. Stacking connector & bus (detail: [Stack Connector & Addressing])
- 26-pin (2x13) 2.54 mm THT pass-through stacking header, polarized/keyed, ~3 A/pin, 11-12 mm board pitch; vibration-rated; grounds bracket the I2S clock/data.
- Boards self-stack into a vertical bus column; M3 corner standoffs carry the vibration load (not the connector). SINK at bottom, HUD ribbon-attached on top facing the rider.
- Scale to 6/12 broadcasters via a passive backplane with a per-stack buffered I2S star (don't drive one long column past ~4 boards).
Bus pinout (canonical):
| Group | Signals |
|---|---|
| Power | 5V (x2), 3V3, GND (x4-5, interleaved) |
| I2S | BCK, WS, DATA (grounds adjacent) |
| I2C | SDA(GPIO32), SCL(GPIO33) |
| UART (future) | UART_TX, UART_RX (x2 sets) |
| LED (future) | LED_DAT, LED_CLK (APA102 — 2 lines) + GND |
| Addressing | 4 strap lines and/or ADDR_CHAIN in/out |
| Spare | 2-4 GPIO |
3. I2C addressing for identical boards
Problem: identical boards/firmware need unique addresses (SINK 0x08; broadcasters 0x10..0x1B for up to 12).
- v1 (recommended): 4-bit solder/jumper straps on safe GPIOs 13/14/27/26, read at boot -> address = 0x10 | nibble. Simple, vibration-proof, supports 16. (I2C already owns 32/33, so the connector-agent's chain-on-32/33 idea is NOT usable as-is.)
- Scale-up option: GPIO daisy-chain auto-enumeration (zero-config; address = stack position) using 2 spare GPIOs — adopt when going to many identical broadcasters.
4. Power & battery (detail: [Power and Battery])
Per-board avg @5V: SINK ~120 mA, BROADCASTER ~130 mA (bursty BT TX, peaks ~160 mA), HUD ~70 mA.
| Config | Boards | Avg @5V | Power | Battery (18650, 2S) | Energy |
|---|---|---|---|---|---|
| Small | HUD+SINK+3 | ~580 mA | 2.9 W | 2S3P | ~75 Wh (>=12 h) |
| Beast-6 | HUD+SINK+6 | ~970 mA | 4.85 W | 2S8P | ~200 Wh (>=24 h) |
| Beast-12 | HUD+SINK+12 | ~1.75 A | 8.75 W | 2S14P | ~350 Wh (>=24 h) |
- 18650 Li-ion (vibration/heat tolerant) over LiPo pouch; 2S topology (always-buck, scales). Derate to ~61% usable (efficiency x aging x 20% reserve).
- Charger: Small = TI BQ25887 (2S, I2C, balancing, ~2 A); Beast = BQ25756 + USB-PD sink (TPS25750) for 3-5 A charge (plain 5V/3A USB-C can't charge the beast packs in reasonable time).
- Regulation: buck to 5 V (Small: TPS563201 3 A; Beast-6: TPS54560 5 A; Beast-12: TPS546B24A ~10 A). Feed 5 V on Small; feed 3V3 directly on Beast to recover ~13% LDO loss. Heavy bulk decoupling (>=470 uF bus + 100 uF/0.1 uF per board) to absorb BT TX bursts.
- Flags: Beast-12 = 28 cells, ~1.3 kg, >100 Wh (air-travel restricted) — consider modular hot-swap 2S packs. NTC/JEITA charge profiling mandatory (hot bike). Reverse-polarity + TVS + fuse on input; spot-welded packs (not spring clips) for vibration.
5. Carrier PCB (detail: [Carrier PCB and BOM])
- One 4-layer PCB, ~45x45 mm, hosts an ESP32-WROOM-32E; two assembly variants.
- "One PCB, two roles" trick: a 0R jumper field routes the bus I2S to either SINK GPIOs (5/25/23) or BROADCASTER GPIOs (19/18/22).
- I2C pull-ups (4.7k, single pair) populated on ONE board only (the SINK). EN-RC reset + IO0 boot button + 6-pin USB-UART programming header (auto-reset 2-transistor circuit).
- ANTENNA KEEP-OUT is the #1 risk: WROOM antenna must overhang the board edge / 15 mm copper keep-out all layers. Three WROOM 2.4 GHz antennas stacked in ~45 mm will couple -> mitigate by antenna-edge overhang + rotating each board's orientation, or use ESP32-WROOM-32UE (external IPEX antenna) for inner boards.
- Cost ~$7 assembled/carrier (module ~60%); a 3-board stack + HUD ~ $36 in parts (excl. power/battery/speakers).
6. LED subsystem (future, music-reactive) (detail: [LED and Music Sync])
- APA102/SK9822 (clocked SPI), NOT WS2812 — WS2812's tight timing is documented to be corrupted by the BT stack (and its ISR can starve the audio). APA102 over SPI/DMA is glitch-immune.
- Drive from the SINK on a low-priority Core-1 task (simple envelope/beat detect), or a dedicated ESP32-C3 for FFT/guaranteed isolation. Never from a busy broadcaster.
- Cap brightness ~25% + switchable LED rail. 16 LEDs (small) / 30 (beast); 60 max. Uncapped full-white at 60 LEDs (~3.6 A) would dwarf the audio draw and wreck runtime.
7. BOM summary
Per carrier ($7 assembled): ESP32-WROOM-32E, 26-pin stacking pair, prog header, SH1.0 HUD header (top board), buttons, decoupling/pull-ups, 0R jumpers, strap resistors. Power (per build): 18650 cells (6/16/28), 2S BMS, charger IC (+PD on beast), buck reg, USB-C, fuse/TVS/switch ($80/$180/$300). LED option: APA102 strip, load switch, series R, bulk cap. Full line-items on the detail pages.
8. Open items for the EE (verify before tape-out)
- 2.4 GHz antenna coupling in the WROOM stack — overhang + rotate, or WROOM-32UE external antennas inner boards. (Highest risk.)
- I2S integrity: buffer + 22-33 R series term per line at SINK; star fan-out per stack (never drive 12 inputs off one GPIO).
- I2C: run 100 kHz, single 2.2-4.7k pull-up pair; add a PCA9548A mux / P82B96 buffer per stack for the 12-broadcaster bus.
- Beast-12 24 h battery is the binding constraint (heavy, air-restricted) — consider modular packs / relax target.
- Confirm HUD SH1.0 pin order from the Waveshare schematic; GPIO12 must stay low at boot; reconcile connector footprint between PCB & connector specs (use the 26-pin).
Sources and full detail in the linked workstream pages. Generated by a 4-agent research/design pass.