

Nts player
Standalone web-radio player
- Size
- 120 × 100 mm
- Copper layers
- 4
- Thickness
- 1.62 mm
- Parts
- 99
- Nets
- 94
- Pads
- 347
- Tracks, vias
- 614, 365
- Pours
- 5
- Routed
- Yes
- KiCad
- KiCad 10.0 (file 20260206)
- Created
- 12 Oct 2026
- Updated
- 7 Nov 2026
Overview
Nts player is an open-source printed circuit board by beeb, from the beeb/nts-player repository on GitHub, published under the Apache-2.0 licence. It is a 4-layer board of 120 × 100 mm with 99 parts on 94 nets, routed with 614 tracks and 365 vias.
It is built around the SN74AHCT1G125DBVR(UMW), TPS7A2033PDBVR-TP and CC0603KRX7R9BB104, with the WS2812B-2020-V6, CL31A106KBHNNNE and 0603B103K500NT among its other parts. Its parts include 45 capacitors, 19 resistors, 19 diodes, 6 ICs and 2 connectors. It belongs with the radio and wireless boards and the ESP32 boards of this library.
Main components
12SN74AHCT1G125DBVR(UMW)
SOT-23-5-40℃~+125℃ 1 1 10uA 12ns@5V,50pF 2V 3.8V、4.4V 4.5V~5.5V 440mV 74AHCT 800mV 8mA 8mA SOT-23-5 Logic Gates ROHSUMWLogic GatesTPS7A2033PDBVR-TP
SOT-23-5-40℃~+85℃ 1 180uV@(300mA) 2uA 3.3V 300mA 5.5V 75dB@(1kHz) Fixed Over Current Protection、Enable、Thermal Shutdown Positive SOT-23-5 Voltage Regulators - Linear, Low Drop Out (LDO) Regulators ROHSTECH PUBLICUncategorisedCC0603KRX7R9BB104
0603100nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSYAGEOMultilayer Ceramic Capacitors MLCC - SMD/SMTWS2812B-2020-V6
SMD2020-4P-40℃~+85℃ 0.84mm 120us 160mcd 1uA 200mcd 2kHz 2mm 2mm 3.3V~5.3V 300ns 465nm~470nm 515nm~520nm 520mcd 620nm~625nm 800Kbit/s Built-in power-on reset circuit、Built-in power-on reset circuit、Integrated intelligent reverse connection protection function SMD2020-4P RGB LEDs(Built-in IC) ROHSWorldsemiUncategorisedCL31A106KBHNNNE
120610uF 50V X5R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSSamsung Electro-MechanicsMultilayer Ceramic Capacitors MLCC - SMD/SMT0603B103K500NT
060310nF 50V X7R ±10% 0603 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSGuangdong Fenghua Advanced Tech (FH)Multilayer Ceramic Capacitors MLCC - SMD/SMTCL21C222JBFNNNE
08052.2nF 50V C0G ±5% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSSamsung Electro-MechanicsMultilayer Ceramic Capacitors MLCC - SMD/SMTCL31B225KBHNNNE
12062.2uF 50V X7R ±10% 1206 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSSamsung Electro-MechanicsMultilayer Ceramic Capacitors MLCC - SMD/SMTGZ1608D601TF
0603-55℃~+125℃ 1 200mA 450mΩ 600Ω@100MHz ±25% 0603 Ferrite Beads ROHSSunlordFerrite Beads0805B471K500NT
0805470pF 50V X7R ±10% 0805 Multilayer Ceramic Capacitors MLCC - SMD/SMT ROHSGuangdong Fenghua Advanced Tech (FH)Multilayer Ceramic Capacitors MLCC - SMD/SMTKH-TYPE-C-16P
SMD-40℃~+85℃ 1 10,000 cycles 16P 30V 3A 7.81mm Female Surface Mount, Right Angle Type-C SMD USB Connectors ROHSkinghelmUSB ConnectorsPEC11R-4120F-S0018
插件-30℃~+70℃ 10mA 18/18 5V Incremental Straight Two-phase output 插件 Rotary Encoders ROHSBournsRotary Encoders
README
README.mdNTS Web Radio Player
This is a standalone Wi-Fi connected web-radio player based on ESP-32. It was designed for the NTS.live radio which has 18 live stations (2 main channels + 16 infinite mixtapes).
It's built around the ESP32-S3 and a PCM5122 DAC, with firmware written in Rust and a 3D-printed enclosure. The design is made to be very simple to interact with: a single encoder with a large knob to select the station and change the volume.
A ring of LEDs show which station is selected and the current volume level. The click action of the encoder switches between the modes and allows to put the device to sleep.
Note: this device is not affiliated with NTS or Atonemo which have created a standalone player for NTS. Support your favorite radio by becoming a supporter or buying from the shop.
Features
- Streams MP3 web radio over HTTPS (e.g. NTS: 256 kbps, 44.1 kHz stereo)
- 18 stations on one detented encoder, one click per station
- 18-LED ring around the knob shows the current station (and volume in volume mode)
- Push the knob to toggle station / volume mode, long-press to sleep, press to wake
- Hold the devkit boot button for 5 s to erase all settings (Wi-Fi included) and restart
- Line out at up to about 1.5 Vrms on 3.5 mm and RCA, wired in parallel
- This is meant as line out, not as headphones output, it expects a load of 1 kOhm or more.
- The DAC can reach 2.1 Vrms, but the firmware limits the top volume step to -3 dB.
- Low sleep current (about 0.6 mA at 5 V): LED ring and DAC are power-switched in deep sleep
- Home Assistant "off" is a standby that keeps Wi-Fi on and breathes the station LED dimly, press the knob or turn it on in HA to wake
- Powered over USB-C (5 V)
- Wi-Fi setup through a portal on the
nts-playeraccess point - Home Assistant control (power, station, volume) through the built-in ESPHome integration
Repository Layout
firmware/ Rust firmware (ESP-IDF, std)
kicad/ KiCad schematic and PCB for the carrier board
enclosure/ 3d-printable enclosure parts
docs/ Datasheet links and devkit pinoutPin Map
| Function | GPIO |
|---|---|
| DAC XSMT (soft mute, 10k pull-down) | 4 |
| I2S BCK / DIN / LRCK | 5 / 6 / 7 |
| I2C SDA / SCL (4.7k pull-ups to always-on 3V3) | 8 / 9 |
| Encoder A / B | 10 / 11 |
| Encoder push (wake pin, 10k pull-up to always-on 3V3) | 12 |
| LED ring power enable (10k pull-down) | 13 |
| DAC LDO enable (10k pull-down) | 14 |
| LED data (via level shifter) | 21 |
Avoided: strapping pins 0, 3, 45, 46; GPIO35–37 (octal PSRAM); GPIO19/20 (USB); GPIO38 (onboard RGB LED); GPIO43/44 (UART0).
Building and Flashing
This is a std (ESP-IDF based) Rust project. The ESP-IDF C SDK is downloaded and built automatically by the
esp-idf-sys build script. Run all commands from the repository root.
Prerequisites with Nix
The flake provides a dev shell (x86_64 Linux only) with the Xtensa Rust toolchain from esp-rs (pinned in
nix/esp-rust.nix), ldproxy, espflash and the tools needed by the ESP-IDF build:
nix developPrerequisites without Nix
Espressif's Rust on ESP book is the reference for the toolchain setup. TL;DR:
-
Install the ESP-IDF host dependencies
-
Install Rust with
rustup. -
Install
espupand the Xtensa toolchain:sh cargo install espup --locked espup install -
Activate the environment from
espup. This has to be done in every new shell:sh . $HOME/export-esp.sh -
Install the linker wrapper and the flashing tool:
sh cargo install ldproxy --locked cargo install espflash --lockedldproxyis required by.cargo/config.tomlto useespflashas the cargorunner.
ESP-IDF
The version is pinned in .cargo/config.toml:
[env]
ESP_IDF_VERSION = "v5.5.5"On the first cargo build, the esp-idf-sys build script clones that tag into .embuild/ and downloads the matching
ESP-IDF toolchains. This will take a few GBs of space and take a while the first time.
Build
cargo build --releaseFlash and Monitor
Connect the board over USB, then:
cargo run --releaseThe runner configured in .cargo/config.toml invokes espflash flash --monitor, which
flashes the firmware and then opens the serial monitor. To flash without the monitor, or from a script, give the port
explicitly:
espflash flash --port /dev/ttyACM0 target/xtensa-esp32s3-espidf/release/nts-playerWSL
Pass the board through to WSL with usbipd-win. In PowerShell:
usbipd list # find the board's bus ID
usbipd bind --busid <BUSID> # once, as administrator
usbipd attach --wsl --busid <BUSID> --auto-attach # each sessionYour WSL user must be in the dialout group to open /dev/ttyACM0.
License
- Hardware (
kicad/) and enclosure (enclosure/): CC BY-NC-SA 4.0 - Firmware (
firmware/): dual-licensed under MIT or Apache-2.0, at your option
Parts
99| Qty | Value | Footprint | References |
|---|---|---|---|
| 27 | 0.1uF | lcsc:C0603 | C10, C11, C12, C15, C16, C17, C18, C20, C21, C22, C23, C27, C28, C29, C30, C33 +11 |
| 18 | WS2812B-2020-V6 | lcsc:WS2815B-2020-V6 | LED1, LED2, LED3, LED4, LED5, LED6, LED7, LED10, LED11, LED12, LED13, LED14, LED15, LED16, LED17, LED18 +2 |
| 8 | 10k | lcsc:R0603 | R2, R4, R5, R6, R7, R8, R14, R15 |
| 7 | 10uF | lcsc:C1206 | C14, C24, C26, C31, C32, C42, C46 |
| 3 | 10nF | lcsc:C0603 | C1, C2, C3 |
| 3 | 33 | lcsc:R0603 | R9, R10, R11 |
| 3 | MountingHole_3.2mm_M3_Pad | MountingHole:MountingHole_3.2mm_M3_Pad | H2, H3, H4 |
| 2 | 2.2nF | lcsc:C0805 | C44, C45 |
| 2 | 2.2uF | lcsc:C1206 | C19, C43 |
| 2 | 4.7k | lcsc:R0603 | R1, R3 |
| 2 | 4.7uF | lcsc:C0603 | C7, C8 |
| 2 | 470 | lcsc:R0805 | R18, R19 |
| 2 | 5.1k | lcsc:R0603 | R12, R13 |
| 2 | GZ1608D601TF | lcsc:L0603 | FB1, FB2 |
| 1 | 1uF | lcsc:C0603 | C13 |
| 1 | 2.2 | lcsc:R0603 | R16 |
| 1 | 300 | lcsc:R0603 | R17 |
| 1 | 470pF | lcsc:C0805 | C25 |
| 1 | ESP32-S3-DEV-KIT-N16R8 | waveshare:ESP32-S3-DEV-KIT-NXR8 | U1 |
| 1 | KH-TYPE-C-16P | lcsc:USB-C-SMD_KH-TYPE-C-16P | USB2 |
| 1 | LM66100DCKR | lcsc:SC-70-6_L2.0-W1.3-P0.65-LS2.1-BL | U2 |
| 1 | MountingHole_3.2mm_M3 | MountingHole:MountingHole_3.2mm_M3 | H1 |
| 1 | PCM5122PWR | lcsc:TSSOP-28_L9.8-W6.6-P0.65-BL | U6 |
| 1 | PEC11R-4120F-S0018 | lcsc:SW-TH_PEC11R-4XXXF-SXXXX | SW1 |
| 1 | PTVS5V0S1UR,115 | lcsc:SOD-123_L2.8-W1.8-LS3.7-RD | D1 |
| 1 | RCJ-2123 | lcsc:CONN-TH_RCJ-2123 | J2 |
| 1 | SJ1-3523N | lcsc:AUDIO-TH_SJ1-3523N | J1 |
| 1 | SN74AHCT1G125DBVR | lcsc:SOT-23-5_L3.0-W1.7-P0.95-LS2.8-BR | U5 |
| 1 | TPS22918DBVR | lcsc:SOT-23-6_L2.9-W1.6-P0.95-LS2.8-BR | U4 |
| 1 | TPS7A2033PDBVR | Package_TO_SOT_SMD:SOT-23-5 | U3 |
Questions
How big is the Nts player PCB?
It measures 120 × 100 mm and has 4 copper layers, 1.62 mm thick.
What parts does the Nts player use?
99 parts, built around the SN74AHCT1G125DBVR(UMW), TPS7A2033PDBVR-TP, CC0603KRX7R9BB104 and WS2812B-2020-V6. The full list of its parts is on this page, with links to each part's symbol and footprint where PCBKit's library has them.
Where can I download the Nts player KiCad files?
From the beeb/nts-player repository on GitHub, at the commit this page was made from: the board is kicad/nts_player/nts_player.kicad_pcb and its schematic kicad/nts_player/nts_player.kicad_sch. PCBKit opens the board in the browser, with nothing to install.
Can I use the Nts player design in my own project?
Its repository publishes it under the Apache-2.0 licence: you may reuse it on that licence's terms (keep the author's notice, and for a copyleft licence share your changes alike).
Similar boards
- 4 layers76 × 100 mm

- 4 layers70 × 50 mm

PD Smart Supply
JaphD/USB-C-PD-Smart-Power-Supply
A compact STM32-controlled USB-C Power Delivery supply providing selectable 5 V, 9 V, 12 V, and 20 V outputs up to 3 A.
73 parts - 4 layers94.5 × 39.7 mm

STM32L4Q5CGT AudioSpectrumAnalyzer
OscarBazylewich/STM32_Audio_Spectrum_Analyzer_CustomPCB
This repository contains a 4-layer KiCad board for the STM32 Audio Spectrum Analyzer. The board has an STM32L4Q5CGT6 MCU and an I2S MEMS microphone (ICS-43434).
39 partsGPL-3.0 - 2 layers170 × 120 mm

Motor pid
gallicchio/motor-pid
The motor-position feedback loop of Learning the Art of Electronics (Hayes & Horowitz), Lab 10L, as a 170 x 120 mm printed circuit board whose silkscreen is the schematic.
110 parts - 2 layers86 × 62 mm

Tester12v
PetterGustafsson/power-supply-tester
Rev D2 twelve-input DC power supply tester: I15 CAD, live ESP32-S3 firmware, display artwork, assembly poster, and build records
113 parts - 4 layers81 × 85 mm

- 4 layers152 × 61.5 mm

- 4 layers59.9 × 19.9 mm
