Receive
ESP32-S3Wi-Fi receiver with 16 MB flash and 8 MB PSRAM. AirPlay software and commercial rights still need qualification.
✳ A YOLK HARDWARE EXPERIMENT
A Wi-Fi hi-fi streamer for the speakers you love. Custom electronics inside. A shell you print yourself. Built with care, from the signal to the screws.
DESIGN IN PROGRESS · FIVE JLCPCB PROTOTYPES PLANNED
2Vrms
Stereo line output−105dB
THD+N target120dB(A)
Dynamic range target44.1kHz
Native playback goalElectrical design targets, not measured specifications. Output quoted into ≥10 kΩ; test conditions remain part of prototype qualification.
01 / UNDER THE LID
One custom board. Dedicated power for the sensitive parts. A stereo output designed around real measurements.
Wi-Fi receiver with 16 MB flash and 8 MB PSRAM. AirPlay software and commercial rights still need qualification.
Pin-configured DAC with no control bus. I²S from the ESP32, all clocked from one shared master oscillator: 22.5792 MHz for native 44.1 kHz playback.
Precision analog output, filtering and startup muting. Target: 2 Vrms at full scale into a line input.
THE LISTENING GOAL
Native-rate stereo playback, a dedicated DAC, and careful analog electronics. Here’s what this prototype is designed to deliver.
44.1kHz
The same sample rate as CD audio. Receiver integration and the actual stream’s bit depth still need verification.
24bit
The PCM1794A accepts 16- and 24-bit audio. The source and receiver determine the detail that reaches it.
120dB(A)
Our dynamic-range target at 2 Vrms. Board noise and distortion will be measured on the assembled prototypes.
The candidate AirPlay receiver advertises ALAC (lossless) and AAC (lossy). Which one is negotiated, at what bit depth, and whether samples are altered along the way must be checked on Relay. A lossless source alone does not establish lossless or bit-perfect playback.
TI rates the DAC for 24-bit / 192 kHz, but Relay’s playback goal is the 44.1 kHz family. A second 24.576 MHz oscillator gives the board a clock for the 48 kHz family too, but no rate has been validated on hardware, and 88.2 kHz and above are untested. Higher-rate playback is not an advertised feature of this prototype.
FIG. 01 / THE SOUND INSIDE · THE GUIDED TOUR
Follow the A2 board from the power jack to the RCA outputs. Each stop names the real parts, why they were chosen and what is still unproven. Open “Supporting parts” for the resistors, capacitors and diodes around each chip.
00 / THE WHOLE BOARDPick a stage or follow the signal.
Drag to orbit · scroll the text to move through the tour · tap a part to jump to its stop. Keyboard: arrows orbit, + / − zoom, Home resets.
3D is unavailable in this browser. The drawing highlights each stop; use the numbered controls to explore.
00 / THE WHOLE BOARD
01 / ESP32-S3
The ESP32 receives and decodes the stream, then sends stereo PCM to the DAC over I²S. The goal is native 44.1 kHz playback, with no fixed conversion to 48 kHz.
AirPlay receiver integration, negotiated codec and bit depth still need validation.
02 / PCM1794A DAC
A dedicated Texas Instruments stereo DAC accepts 16- or 24-bit audio data. It turns the digital samples into the analog currents that feed the output stage.
The chip is rated for 24-bit / 192 kHz. That is a component capability, not a validated Relay playback mode.
03 / 3 × OPA1612
Three dual op-amps convert the DAC’s currents into voltages, then form the left and right line outputs. The design aims to keep added noise and distortion low.
Target at 2 Vrms: −105 dB THD+N and 120 dB(A) dynamic range. Both await prototype measurements.
04 / Stereo RCA + mute relay
Left and right RCA outputs feed a powered speaker or amplifier’s line input. The mute relay is designed to hold the outputs quiet during startup and shutdown.
2 Vrms at full scale into ≥10 kΩ is the design target. These are line outputs; passive speakers need an amplifier.
05 / Two oscillators + selector
The selected master clock is shared by the DAC and the ESP32 audio interface, keeping them synchronous. For the 44.1 kHz goal it is a 22.5792 MHz oscillator: 512 times the sample rate. A second 24.576 MHz oscillator covers the 48 kHz family.
The selector is not glitch-free: firmware must mute and reset the DAC before switching. Only 44.1 kHz is a playback goal; clock jitter and network drift handling need verification.
06 / Dedicated quiet supplies
Dedicated regulators supply the DAC, clock and analog stages. The aim is to keep switching noise and radio activity from masking quiet passages in the music.
120 dB(A) is a board-level design target, not a measured result or a claim of 20 effective bits.
01 / POWER IN
Relay runs from an external regulated 12 V adapter. The supply passes a resettable fuse, then a Schottky diode in series, and a TVS diode clamps spikes on the protected rail. USB-C does not power the board, so 12 V is required even for programming.
The fuse holds 1.5 A and is rated for 24 V. The Schottky blocks a reversed plug. The TVS clamps at 24.4 V (at 24.6 A), and everything downstream was chosen to survive that: an earlier buck candidate, the TPS62160, tops out at 17 V and was dropped for that reason.
About 0.45 A from 12 V is a rough estimate, and the 12 V / 1 A adapter is a planning allowance, not a measurement. There is no hardware power-fail supervisor yet: dropping the output relay on input loss relies on firmware reading VIN_SENSE.
C401 100 µF / 25 V electrolytic · C402 10 µF
Sit on the protected 12 V rail after the diode, a local store of charge for the two buck converters that draw from it.
R401 100 kΩ · R402 15 kΩ · C403 10 nF
A divider scales the protected 12 V by 0.130 into an ADC pin on the ESP32 (IO1), 3.2 V even at the TVS clamp, so it stays within range. C403 smooths that sense node. Firmware is meant to use it to release the output relay early when the adapter is pulled.
TP401
Gives the factory fixture a place to measure the protected 12 V rail.
Sources: docs/electrical-design.md (Power) · KiCad netlist
02 / CLEAN RAILS
Two switching regulators turn 12 V into 3.3 V for the ESP32 and an intermediate 5 V. From that 5 V, the TPS65131 makes roughly ±13.6 V. Linear regulators then clean those up into ±12 V for the op-amps and 5 V for the DAC’s analog side. Two small 3.3 V regulators feed the DAC’s digital side and the clock oscillators separately.
Switchers are efficient but noisy; the linear regulators after them are there for the sensitive parts. The TPS54202 runs up to 28 V, above the input clamp. The DAC’s three 5 V pins must agree within ±0.1 V, so they share one regulated rail. A pull-down keeps the ± converter off until firmware raises ANALOG_EN, so the analog rails start in a known order.
Not yet verified: buck loop response with the chosen ceramics, TPS65131 ripple reaching the LDOs, and the thermal rise of U11 and U15 (the DAC regulator drops about 8.6 V, roughly 0.35 W at 40 mA).
R601/R602 100k/22.1k → 3.29 V · R701/R702 100k/13.3k → 5.08 V · R1102/R1103 1M/97.6k → +13.64 V · R1104/R1105 1M/88.7k → −13.68 V · R1201/R1202 90.9k/10k → +11.96 V · R1301/R1302 93.1k/10k → −12.1 V · R1501/R1502 32.4k/10k → 5.02 V
Each regulator compares a fraction of its own output with an internal reference. The ratio of the two resistors decides the output voltage. The negative converter’s divider runs from its VREF pin instead of ground.
C606 56 pF · C706 75 pF · C1104 6.8 pF · C1106 7.5 pF · C1203, C1303, C1503 10 nF
Each sits across the upper resistor of a feedback divider. Values follow TI’s application circuits; they shape how quickly the regulator reacts. Their effect on this board is unmeasured.
L601 10 µH + C604/C605 2 × 22 µF (3.3 V) · L701 15 µH + C704/C705 2 × 22 µF (5 V) · L1101, L1102 4.7 µH + D1101, D1102 B5819W + C1109–C1112 4 × 10 µF
The switching stages store energy in the inductor each cycle; the capacitors smooth the result. In the ± converter, the B5819W Schottky diodes rectify the boost and inverting outputs.
C603, C703 100 nF
Connected between each buck’s BOOT and switch pins; they power the high-side switch driver.
C601/C602, C701/C702 10 µF + 100 nF · C1101, C1102 4.7 µF · C801/C802, C901/C902 1 µF · C1201/C1204, C1301/C1304, C1501/C1504 10 µF
Local charge at each regulator’s input and output, keeping current loops short. A2 constrains their distance to the regulator pins.
C1202, C1302, C1502 10 nF
On each TPS7A49/TPS7A30 NR/SS pin. They filter the regulator’s internal reference and soften its start-up.
R1101 100 Ω + C1103 100 nF · C1105 220 nF · C1107 10 nF, C1108 4.7 nF
R1101 and C1103 form a small filter on the controller’s own supply pin. C1105 decouples its reference output. C1107 and C1108 sit on its CP and CN compensation pins, one per output.
R403 100 kΩ · Q1101 AO3401A
R403 pulls ANALOG_EN (IO12) low, so the ± rails, and with them the op-amp and DAC 5 V rails, stay off until firmware enables them. Q1101 is a P-MOSFET driven by the converter’s BSW pin. It disconnects the boost input so +13.6 V falls to 0 V when disabled instead of following the 5 V rail. (Reverse-polarity protection is D401, not this transistor.)
TP402–TP406
For measuring the 3.3 V, 5 V, ±13.6 V and clock rails at the factory.
Sources: docs/electrical-design.md (Power, sequencing) · KiCad netlist
03 / RECEIVE
The module joins Wi-Fi, is meant to receive and decode the stream into a buffer, and sends stereo samples to the DAC over I²S as the bus master (data IO4, bit clock IO5, frame clock IO6). It also runs the board: DAC reset, mute and zero flag, the output relay, the analog rail enable and the clock selector. USB-C connects to the chip’s native USB pins (GPIO19/20) for programming.
The project asked for the ESP32-S3; the module has an integrated antenna, 16 MB flash and 8 MB octal PSRAM. Two seconds of stereo 44.1 kHz audio in 32-bit containers is 705,600 bytes, so a PSRAM ring buffer is plausible. Native USB means the BOM needs no separate USB-to-serial chip. The candidate receiver project advertises S3 support.
There is no receiver firmware yet, and the candidate receiver’s licence only allows non-commercial use. A review found C101/C102 about 17–18 mm from the module’s supply pin; they should move closer. USB attach, the ROM bootloader and ESD immunity are untested.
C101 22 µF · C102 100 nF
Reservoir and high-frequency bypass on the 3.3 V digital rail. Flagged by the A2 review as placed too far from the module.
R101 10 kΩ + C103 1 µF · R102 10 kΩ · R103 10 kΩ
R101 pulls EN high while C103 delays it, giving the supply time to settle before the chip starts (provisional; a supervisor is still recommended). R102 holds BOOT (GPIO0) high for a normal start; the factory fixture pulls it low to enter download mode. R103 pulls GPIO46 low for download compatibility.
SW101 BOOT (GPIO0) · SW102 RESET (EN) · XUNPU TS-1088-AR02016 4 × 3 mm (C720477)
Each button switches its line to ground; R102 (BOOT) and R101 with C103 (EN) above are the pull-ups and the EN delay. Hold BOOT and tap RESET to force download mode; normal USB-C flashing doesn’t need them.
R109, R110 5.1 kΩ
One pull-down on each CC pin tells the host or cable that Relay is a USB device.
R107, R108 22 Ω · U14
Series resistors on D− and D+ (marked as candidates in the review) and an ESD array that clamps static on the data lines at the connector.
R111 1 kΩ · R112 100 kΩ · Q101 2N7002 · R113 10 kΩ · C104 100 nF
VBUS turns on Q101 through R111 (R112 keeps it off otherwise). Q101 pulls a 3.3 V line, held high by R113, low on GPIO14. The ESP32 learns that USB is plugged in without 5 V ever touching one of its pins. C104 bypasses VBUS.
TP101–TP106
Pads for ground, 3.3 V, EN, BOOT and the UART, the recovery path for programming.
Sources: docs/processor-usb.md · docs/airplay-feasibility.md · reports/kicad-happy-review-2026-10-13.md · KiCad netlist
04 / TIMING
Both oscillators run all the time. The selector passes one of them on as the master clock, which drives the DAC directly and the ESP32’s I²S clock input. The ESP32 divides its bit and frame clocks from that same signal, so the whole digital path stays in step. GPIO15 chooses: low for 22.5792 MHz, high for 24.576 MHz.
22.5792 MHz is 512 × 44.1 kHz; 24.576 MHz is 512 × 48 kHz, so each sample-rate family gets an exact clock. The PCM1794A needs its clock synchronous with the frame clock and has no asynchronous jitter rejection, so the clock quality reaches the output. A1 tied two oscillator outputs together; A2’s break-before-make switch keeps them apart.
The switch is not glitch-free: firmware must mute, disconnect the relay and reset the DAC before changing clocks, and that firmware does not exist yet. The oscillator maker gives no jitter figure, and none has been measured. Network clock drift still needs correction in software.
R206 100 kΩ
Pulls CLK_SEL low, so the 44.1 kHz-family oscillator is selected while the ESP32 is in reset.
R204 10 Ω → DAC · R205 33 Ω → ESP32
Split the selected clock into two branches and damp its edges, following TI’s layout figure for the DAC side.
C210, C211, C212 100 nF
Decouple the shared CLK_3V3 rail; C212 is the selector’s local bypass. The rail comes from its own regulator, U9.
TP207
On the DAC’s clock input, for scoping during bring-up.
Sources: docs/electrical-design.md (Clock — A2) · firmware/INTEGRATION.md (A2 clock selection) · KiCad netlist
05 / CONVERT
The DAC takes 16- or 24-bit I²S samples and produces a pair of opposite-phase output currents per channel. It is set entirely by its pins: four mode pins tied to ground select I²S, stereo and the sharp roll-off filter, so there is no control bus. Of its control pins, the ESP32 drives only reset and soft mute, and reads the zero-data flag.
The first choice, ESS’s ES9038Q2M, was out of stock at JLCPCB and LCSC. The AK4493S had only 53 in stock and a gated datasheet. The PCM1794A had 1,024 in stock on 12 October 2026, a public datasheet, a 28-pin package with no exposed pad, and a published TI circuit for 2 Vrms output.
TI’s typical −108 dB THD+N misses the original −110 dB goal, so Relay’s target became −105 dB; neither is measured. The chip’s 192 kHz rating is not a validated Relay mode. Its 250 °C reflow limit must be confirmed with the factory profile.
C201, C203 100 nF + C202, C204, C205 10 µF (5 V) · C206 100 nF + C207 10 µF (3.3 V)
Placed at the DAC’s analog and digital supply pins as in TI’s recommended circuit.
C208, C209 47 µF tantalum
One from each VCOM pin to the 5 V VCC1 node, positive side on the 5 V node, as TI shows. They decouple the DAC’s internal common-voltage nodes, which are analog decoupling points rather than signals.
R202 10 kΩ, 0.1 %
From IREF to ground. It sets the DAC’s full-scale output current, so its precision feeds straight into the output level.
R201 10 kΩ · R203 10 kΩ
R201 pulls MUTE high, so the DAC starts soft-muted. R203 holds RST low until firmware has the clocks running.
R104, R105, R106 27 Ω
On data, bit clock and frame clock, at the ESP32 (driving) end, following TI’s layout figure.
TP201, TP202
For the DAC’s 5 V and 3.3 V rails.
Sources: docs/electrical-design.md (DAC change, DAC facts) · reports/jlc-footprint-match-2026-10-15.md · KiCad netlist
06 / ANALOG
Each DAC output current goes into an op-amp that converts it to a voltage (an I/V stage). A difference stage then subtracts each channel’s two opposite-phase halves into one line-level signal, removing the part they share, and rolls off content far above the audio band. Four I/V stages and two difference stages fit in three dual op-amps.
This is TI’s published 2 Vrms output topology for the PCM1794A, with the OPA1612 in place of TI’s NE5534/LT1028. The 825 Ω feedback resistor is the smallest standard value that still reaches 2 Vrms in the worst case: 2.04–2.31 Vrms, 2.17 nominal. Each board is to be trimmed to 2.00 Vrms at test. The ±12 V rails leave about 2 V beyond the swing allowance at the I/V stage’s −8.53 V extreme.
I/V loop stability is not simulated. The output is DC-coupled: bipolar-zero error could reach roughly ±0.12 V at the RCA, to be measured before deciding on a servo or capacitor. A review calculated −0.26 dB at 20 kHz from the filter alone, beyond the proposed ±0.10 dB flatness target.
R301, R302, R321, R322 825 Ω 0.1 % ∥ C301, C302, C321, C322 2.2 nF C0G
Each resistor converts the DAC’s current into voltage; the capacitor beside it rolls off high frequencies, a pole near 87.7 kHz. The capacitors also affect stability, which is why changes need simulation first.
R303, R305, R323, R325 560 Ω · R304, R306, R324, R326 270 Ω (0.1 % thin film) · C303, C304, C323, C324 2.7 nF C0G
Matched 560 Ω inputs and 270 Ω feedback/ground legs subtract the two halves and scale the result by 270/560. The 2.7 nF capacitors across the 270 Ω legs add a second pole near 218 kHz. Tight tolerance keeps the arms matched so the shared part cancels.
R307, R327 100 Ω
In series with each channel’s output. The level calculation includes them as a 100 Ω / 10 kΩ divider into the load; behaviour with 0–2 nF of cable is still to be checked.
C305/C306, C325/C326, C341/C342 100 nF
Six 100 nF capacitors on the ±12 V rails at the three op-amps. A2 placed the measured ones about 2 mm from the supply pins; in A1 some were almost 30 mm away.
TP203, TP204 · TP205, TP206
For the ±12 V op-amp rails and each channel’s output before the relay.
Sources: docs/electrical-design.md (Output stage) · reports/kicad-happy-review-2026-10-13.md · reports/a2-corrections-2026-10-13.md · KiCad netlist
07 / MUTE
The relay sits between the analog stage and the RCA jacks. Released, it shorts both outputs to ground; energised, it connects the amplifier outputs. The ESP32 switches it through Q301 (IO11). Start-up is ordered: DAC muted and in reset, rails and clock stable, reset released, silent data running, then relay on, then mute off. Shutdown reverses it.
Grounding is the default: with no power, the ESP32 in reset, or firmware not driving the pin, the coil is off and the outputs are held quiet. One two-pole relay switches both channels at once from the 5 V rail.
Fast release on power loss depends on firmware (VIN_SENSE) because there is no independent hardware fault override yet. Contact behaviour at small signal levels, release time with the coil clamp, and output DC and transients are all unmeasured.
Q301 2N7002 · R341 100 kΩ
Q301 switches the coil’s low side. R341 pulls its gate low, so the relay stays off while the ESP32 is in reset or its pin floats.
D301 1N4148W
Across the coil, from its switched end back to 5 V. When Q301 turns off, the coil’s stored energy flows through the diode instead of spiking the transistor.
TP208
On the relay control signal.
Sources: docs/electrical-design.md (Mute and outputs) · firmware/INTEGRATION.md (Mute state machine) · KiCad netlist
08 / OUTPUT
Right-angle RCA jacks deliver left and right line-level audio to a powered speaker or amplifier input of 10 kΩ or more. The suggested Yamaha HS4 connection uses LINE 1 with RCA-to-mono-TS cables at the full 2 Vrms. Passive speakers need an amplifier.
RCA line outputs fit powered monitors and amplifiers without extra hardware. Each jack has an ESD clamp at the connector, so static from a cable is caught before it reaches the relay and op-amps.
The RCA footprint was corrected on 16 October 2026 after JLC’s preview showed the barrels facing into the board. J4 is now the same black RCJ-011 as J3 (LCSC C4992678), because the red RCJ-012 had no JLC footprint; colour is cosmetic, and the channels are marked L and R on the silkscreen. Clamp distortion at full swing and hot-plug behaviour are unmeasured; the 1 Vrms alternate profile is unimplemented firmware.
D302, D303 PESD5V0S1BA
One from each RCA signal to ground, right at the connector. Whether they add distortion at full swing has to be measured, not assumed.
J3, J4 shell pins
Both jack shells connect to the board ground.
Sources: docs/electrical-design.md (Mute and outputs, RCA protection) · docs/speaker-compatibility.md · reports/jlc-footprint-match-2026-10-15.md · KiCad netlist
Values come from the A2 schematic and exported BOM; roles were traced in the KiCad netlist. Figures marked as targets or datasheet typicals are not Relay measurements. No board has been built or measured, and no firmware exists yet.
This is a concept model: component positions are illustrative, and the routed A2 board differs in detail. View the annotated drawing ↗3D built with Three.js · original drawing made with Anatomy.
A CLOSER LOOK / 52 SECONDS
Follow the music through Relay. A tour of the board, from Wi-Fi to the stereo output.
52 seconds · A silent film with on-screen explanations · Prototype concept
Download the film ↗Meet Relay. A Wi-Fi hi-fi streamer, from the signal to the screws. An open hardware experiment.
Receive. The ESP32 receives and decodes music, then sends PCM over I²S. Native 44.1 kHz playback is the goal; receiver compatibility and source bit depth still need qualification.
Convert. A dedicated stereo DAC turns digital samples into analog currents. Its 24-bit capability does not guarantee the depth delivered by the source and receiver.
Clock. A shared 22.5792 MHz timing reference serves the ESP32 audio interface and DAC: 512 × the 44.1 kHz sample-rate goal. Clock jitter and drift need prototype testing.
Analog. Three dual op-amps form the left and right analog line signals. The −105 dB THD+N target at 2 Vrms is not a measured result.
Power. Separate regulation supplies the DAC, clock and sensitive analog circuits. Dynamic range of 120 dB(A) is a board-level design target, not a measurement.
Output. Connect a powered speaker or amplifier. A relay manages startup muting. The stereo line-output target is 2 Vrms into at least 10 kΩ; this is not a speaker amplifier. Output level and muting need verification.
Still being built. Native-rate playback, a dedicated DAC and a carefully designed analog path. Layout, receiver integration and audio performance are not yet validated.
02 / MADE FOR YOUR DESK
A low, softly squared shell with a green accent seam. A removable top, four mounting points and the connections tucked behind. Imagined for your Bambu Lab P2S.
Concept dimensions allow space around a 100 × 80 mm board. Final connector positions, clearances, RF performance and thermal tests must drive the printable CAD.
Charcoal, stone or forest: use the finish controls above to try the concept. Material and print settings follow thermal validation.
A non-metallic antenna area and clear space around the ESP32 module. No decorative metal over the radio.
A serviceable two-piece shell with four M3 board mounts. Screw lengths, inserts and lid retention remain to be engineered.
YOUR LISTENING SETUP
Use two RCA-to-6.35 mm mono TS cables into the left speaker’s LINE 1 L/R inputs. The left speaker powers its partner. No separate amplifier needed.
Yamaha connection specifications ↗LINE 1 offers more input headroom and lower sensitivity than the HS4 RCA input. Our planned 2 Vrms mode is for LINE 1; knob position still depends on listening level and room.
BEYOND THE STREAMER
Relay is a Wi-Fi and Bluetooth LE processor wired to a stereo DAC with a line-level output. With different firmware, the same board suits other jobs. None of these exist yet and none has been tested. Each one needs firmware that has not been written for this board.
Plays announcements, doorbell sounds and streamed audio to the speakers as a media player in a smart home.
Software An approach: ESPHome media-player components, paired with Home Assistant.
Firmware neededJoins a synchronised multiroom setup fed by a Snapcast server on the home network.
Software An approach: a Snapcast client port for ESP32, or Squeezelite-ESP32 for Lyrion (Logitech Media Server) players. S3 and PCM1794A support would need checking.
Firmware neededStreams radio over Wi-Fi and plays it with no phone or computer involved.
Software An approach: an HTTP stream and MP3/AAC decoder pipeline, for example Espressif’s ESP-ADF. Station choice needs a way to change it from the network.
Firmware neededShows up as a USB sound card and plays the computer’s audio through the RCA outputs.
Software An approach: a USB Audio Class device through the ESP32-S3 USB OTG and TinyUSB. The USB-C port is wired for it, but the board still needs 12 V.
Firmware neededAppears as an AirPlay speaker for Apple devices, the original plan for Relay.
Software A candidate open-source receiver exists for the S3. Its licence is non-commercial only, and Apple’s AirPlay programme has its own rules.
Licence constraintsGenerates sine sweeps, noise and channel checks for setting up speakers or measuring the board itself.
Software An approach: a small tone generator in firmware feeding I²S, with no network needed. Measuring the result takes separate equipment.
Firmware neededPlays stored sounds on a trigger, such as a door chime, a timer or a notification from the network.
Software An approach: short clips in flash, played on an HTTP, MQTT or BLE command. A physical button or sensor would need a spare GPIO and a wire or header.
Needs spare GPIOTurns MIDI notes from a keyboard or app into sound through the DAC.
Software An approach: BLE-MIDI over Bluetooth LE, or USB MIDI through TinyUSB, driving a software synthesiser. Latency and polyphony on the S3 are unmeasured.
Firmware neededWhat it can’t do. There is no Bluetooth A2DP, because the ESP32-S3 has Bluetooth LE only. There is no audio input, so it is not a preamp, recorder or analyser. There is no speaker amplifier: it needs powered speakers or an amplifier. Ideas that need buttons, displays or sensors need spare GPIOs; the board exposes only BOOT/RESET, UART test points and USB.
03 / THE BUILD JOURNAL
ESP32-S3, TI PCM1794A DAC, quiet power and a relay-muted analog output.
Receiver compatibility, clock behavior, noise, distortion and Wi-Fi stress.
Verified parts, routed four-layer board, Gerbers, BOM and placement files.
Fit-check the enclosure, calibrate each board and connect the speakers.
The schematic is complete and passes KiCad's electrical rules check, and every part was in stock at JLCPCB on 12 October 2026. The board is being placed and routed. AirPlay 2 compatibility, commercial permission and audio performance remain unverified. Manufacturing files will follow a checked electrical design. This page is a build journal, not an order-ready product announcement.
Fabrication: reviewed four-layer Gerber ZIP and Excellon drills.
Assembly: sourced BOM, verified footprints, component placement CSV and assembly drawings for five identical boards.
Bring-up: agreed programming service, validated firmware and a factory test procedure. Prototype measurement follows assembly.