#0011 NTS Radio on an ESP32-S3

ESP32-S3 internet radio device that plays NTS radio, with a button to select Channel 1 or 2.

ESP32-S3 internet radio device that plays NTS radio, with a button to select Channel 1 or 2. The onboard screen shows the current show. Audio is line-level from a PCM5102 into an amp.

Parts

Wiring

ESP32 → PCM5102:

  • 3V → VIN

  • GND → GND

  • A0 (GPIO 18) → BCK

  • A1 (GPIO 17) → WSEL

  • A2 (GPIO 16) → DIN

Button:

  • One side → pin 5 (silkscreen 5, above SCL)

  • Other side → GND

Power:

USB-C on the ESP32. DAC VIN from Feather 3V.

Firmware

PlatformIO, Arduino, board adafruit_feather_esp32s3_tft.

  • ESP32-audioI2S 2.0.6 — stream decode, I2S out

  • ArduinoJson — live metadata

  • Adafruit GFX + ST7789 — display

On boot: connect Wi-Fi (WiFiMulti), start Channel 1, draw channel, title, location.

Every 25 seconds: GET https://www.nts.live/api/v2/live, keep broadcast_title and location_long for the active channel.

Streams:

  • Channel 1: https://stream-relay-geo.ntslive.net/stream?client=direct

  • Channel 2: https://stream-relay-geo.ntslive.net/stream2?client=direct

Firmware volume is 21/21. Use the amp for level.

platformio.ini and main.cpp (Wi-Fi names and passwords replaced with placeholders):

Code (GIST)

Replace YOUR_WIFI_NAME / YOUR_WIFI_PASSWORD in the gist before flashing.

Not an official NTS product. Public live streams only.

On Substack ↳

  1. #0013 3d Print - Open tray for the Disintegrated Cracklebox 3D printed tray for the Rakit Disintegrated Cracklebox
  2. #0012 LED on/off over the internet Pi Pico WH device that switches an LED on and off from a browser, from anywhere online.
  3. #0011 NTS Radio on an ESP32-S3 ESP32-S3 internet radio device that plays NTS radio, with a button to select Channel 1 or 2.
  4. #0010 DIY Disintegrated Cracklebox DIY Disintegrated Cracklebox from RAKIT