Build your own Internet Radio in under 10 minutes for just $32! This project combines an ESP32-S3 microcontroller with a stunning AMOLED display to create a modern, wifi-enabled radio that streams music from your favorite stations worldwide. Unlike traditional radio projects that require external MP3 decoders, this build leverages the dual-core power of the ESP32-S3 to decode MP3 streams directly while delivering crystal-clear audio through a digital I2S interface.
The sleek AMOLED display shows the current station, song information, time, and WiFi signal strength, while simple push buttons provide intuitive control over station selection and volume adjustment.
🎥 Watch the Full Build Tutorial
- Crystal Clear Audio: I2S digital audio output eliminates noise and interference
- Stunning AMOLED Display: Low power consumption with excellent visibility
- Dual-Core MP3 Decoding: No external decoder needed - everything runs on the ESP32-S3
- WiFi Streaming: Connect to internet radio stations worldwide
- Battery Ready: Built-in battery charging circuit for portable operation
- Simple Controls: Four push buttons for station and volume control
- Real-Time Info: Display station name, song title, time, and signal strength
- Ultra-Low Power: Less than 1 Watt power consumption (~150mA at 5V)
- Easy Assembly: Just 5 minutes of wiring with minimal components
Everything you need for this build:
- ESP32-S3 AMOLED Board - Buy Here
- MAX98357A I2S Module - Buy Here
- 3W Speaker - Buy Here
- Push Buttons (4 pieces) - Buy Here
- Breadboard - Buy Here
Total Project Cost: ~$32
Note: The I2S interface outputs stereo, but MAX98357A plays mono. For true stereo, use two MAX98357A modules with two speakers.
-
Install ESP32 Board Support:
- Go to
File > Preferences
- Add this URL to Additional Board Manager URLs:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json
- Open
Tools > Board > Boards Manager
- Search for "ESP32" and install "esp32 by Espressif Systems"
- Go to
-
Required Libraries: Install these libraries via
Tools > Manage Libraries
:- ESP32-audioI2S (for MP3 decoding and I2S output)
- TFT_eSPI (for display control)
-
Board Configuration:
- Board: ESP32S3 Dev Module
- CDC on Boot: Enabled
- Flash Size: 16MB
- Partition Scheme: 16MB Flash (3MB APP)
- PSRAM: OPI PSRAM (crucial for audio streaming)
The project uses object-oriented design for clean, maintainable code:
ESP32_InternetRadio.ino
– Main program with WiFi setup and control logicStreamPlayer.cpp/.h
– Handles MP3 streaming and I2S audio outputDisplayUI.cpp/.h
– Manages AMOLED display rendering and UIRadioStationManager.cpp/.h
– Manages radio station list and navigationrm67162.cpp/.h
– Low-level AMOLED display driverpins_config.h
– Hardware pin definitions
Update your network credentials in the main .ino
file:
const char* ssid = "YourWiFiNetwork";
const char* password = "YourWiFiPassword";
Customize your station list by editing the RadioStation
array:
RadioStation stations[] = {
{"Station Name", "http://stream-url-here"},
{"BBC Radio 1", "http://stream.live.vc.bbcmedia.co.uk/bbc_radio_one"},
// Add your favorite stations here
};
Unlike analog audio outputs that suffer from noise and interference, I2S maintains perfect digital audio quality throughout transmission. The ESP32-S3 sends decoded MP3 data digitally to the MAX98357A amplifier, which converts it to analog audio only at the final stage before the speaker.
The ESP32-S3's dual-core architecture allows real-time MP3 decoding without external hardware. One core handles WiFi and system tasks while the other dedicates to audio processing, ensuring smooth, uninterrupted playback.
- Ultra-low power consumption - only draws current for lit pixels
- Perfect blacks with infinite contrast ratio
- Excellent outdoor visibility with bright, vibrant colors
- Fast response time for smooth UI updates
- Button 1: Next radio station
- Button 2: Previous radio station
- Button 3: Increase volume
- Button 4: Decrease volume
- Active Streaming: ~150mA at 5V (less than 1 Watt)
- AMOLED Display: Minimal power due to efficient OLED technology
- Battery Life: With a 2000mAh battery, expect 10+ hours of continuous playback
- No Audio: Check I2S pin connections and ensure PSRAM is enabled
- WiFi Connection Failed: Verify network credentials and signal strength
- Display Not Working: Confirm SPI connections and display initialization
- Station Won't Play: Check stream URL validity and internet connection
- Use high-quality stream URLs (128kbps or higher)
- Ensure stable WiFi connection to prevent dropouts
- Keep speaker wires short to minimize interference
- Custom Enclosure: 3D-printed case for a professional finish
- Larger Battery: Extended operation time for true portability
- Bluetooth Connectivity: Stream from mobile devices
- Web Interface: Configure stations via browser
- Equalizer: Audio processing and sound customization
- Alarm Function: Wake up to your favorite radio station
- Multiple Speakers: True stereo output with dual MAX98357A modules
- Microcontroller: ESP32-S3 (Dual-core, 240MHz)
- Display: 1.28" AMOLED, 240×240 resolution
- Audio: I2S digital output, 16-bit/44.1kHz
- Connectivity: WiFi 802.11 b/g/n
- Power: USB-C charging, battery ready
- Memory: 8MB PSRAM, 16MB Flash
This project is open source and contributions are welcome! Feel free to:
- Add support for new radio stations
- Improve the user interface
- Optimize power consumption
- Add new features and functionality
🛠 Built by Nick Koumaris
📺 Follow for more projects: YouTube Channel
💬 Community Support: Check the video comments for help and discussions
⚡ Build your own Internet Radio today and enjoy endless streaming possibilities!