DIY Wi-Fi Internet Radio
Build a DIY ESP32-S3 Internet Radio with Wi-Fi streaming, OLED display, rotary encoder controls, and MAX98357 I2S audio. Features a custom PCB, 3D-printed enclosure, and Arduino firmware.
Shebin Jose Jacob

Traditional FM radios are limited by broadcast coverage, meaning the stations you can receive depend on your location and signal strength. Reception can also be affected by distance, buildings, terrain, and electromagnetic interference, often resulting in poor audio quality or limited station availability. Today, with reliable Wi-Fi available in most homes, offices, and public spaces, internet radio provides a far more flexible alternative. Instead of being restricted to local broadcasts, users can access thousands of radio stations from around the world, offering a virtually unlimited selection of music, news, sports, podcasts, and live programmes with consistent digital audio quality.
This project demonstrates how to build your own Internet Radio using the ESP32-S3. Throughout this guide, you'll learn how the hardware is designed, how the software is configured, and how everything comes together to create a compact desktop Internet Radio.
Hardware Design

The ESP32-S3 serves as the main controller, handling the Wi-Fi connection, internet radio streaming, user interface, and communication with all peripherals. For the best performance, we recommend using the ESP32-S3 N16R8 variant, which features 16 MB of Flash and 8 MB of PSRAM. The additional Flash and PSRAM provide more memory for audio buffering, firmware storage, and future feature expansion, resulting in smoother and more reliable operation compared to the N8R8 variant.
Audio is transmitted digitally over the I2S interface to the MAX98357 amplifier, which directly drives the 4Ω speaker. This approach eliminates analog noise while providing clear and efficient audio playback.
The OLED display communicates through I2C and presents useful information such as the selected radio station and connection status. A rotary encoder offers a simple and intuitive way to navigate between saved stations while also controlling the playback volume.
PCB Design


After verifying the circuit, I designed a dedicated PCB in EasyEDA to eliminate unnecessary wiring and create a more compact layout. The PCB was designed around the ESP32-S3 development board while leaving enough space for the amplifier, display connector, encoder, and power input.

Once the design was finalized, I exported the Gerber files and had the boards manufactured by JLCPCB. The fabricated PCBs required minimal preparation and made the final assembly significantly cleaner compared to a hand-wired prototype.
To simplify assembly , header connectors were used for the ESP32-S3, MAX98357 I2S amplifier, OLED display, and rotary encoder. A 5V screw terminal was also included for the power input.



Enclosure Design

The enclosure was designed in Fusion 360 with a clean desktop aesthetic inspired by classic tabletop radios. A white and yellow colour combination gives the project a modern yet timeless appearance that blends well with most workspaces.
The front panel features a large speaker grille, an opening for the OLED display, and a custom rotary control knob. Inside the enclosure, dedicated mounting points securely hold the PCB, speaker, and display while keeping the internal wiring neat and organised.
All enclosure parts were 3D printed using PLA and assembled using standard M3 hardware.

Software

The firmware was developed using the Arduino framework for the ESP32-S3. When powered on, the radio automatically connects to the configured Wi-Fi network and starts streaming one of the predefined internet radio stations. The list of stations is stored directly in the source code, allowing you to easily replace or add your own favourite radio streams.
Final Assembly
After programming and testing the PCB, the final assembly could begin. First, the OLED display, rotary encoder, and DC barrel jack were mounted into the 3D-printed enclosure using M3 screws. Next, the assembled PCB was secured inside the enclosure using the provided M3 mounting points. Finally, all the components were connected to the PCB using female-to-female jumper wires, making the assembly neat, modular, and easy to maintain. The grill is printed as the separate part , they are also glued together.








Once the assembly is complete, simply connect a 5V power supply to the DC barrel jack. Within a few seconds, the ESP32-S3 connects to the configured Wi-Fi network and begins streaming the selected internet radio station. The OLED display shows the current station information, while the rotary encoder allows you to adjust the volume and switch between saved stations with simple and intuitive controls.
