Listening to the radio online is convenient, but what if you want to recapture the charm of analog radio—without the wire from your speaker to your phone and the ability to tune into stations from all over the world? WiFi radio receiver solves this problem: it receives streaming broadcasts over a wireless network and plays them on speakers, like a classic FM radio. Moreover, it can be assembled from scrap parts—from an old router to a single-board computer. Raspberry Pi.
In this article you will find 5 proven methods create a WiFi radio receiver - from the simplest one based on ESP8266 to an advanced touchscreen solution. We'll explore:
- 🔧 What components are needed for assembly (with budgets from 500 to 5,000 rubles)
- 📡 How to set up streaming radio stations via WiFi
- 🎵 What software should I use for control and playback?
- ⚡ Common errors and how to avoid them (for example, why the receiver is slow or doesn't connect to the network)
Whether you're looking to revive old audio gear or build a system from scratch, there's a solution for every skill level.
1. Methods for creating a WiFi radio receiver: comparison of options
Before you start assembling, decide on target formatDo you need a compact receiver for the kitchen, a powerful system for the home, or a portable device with a battery? This determines your choice of platform.
| Way | Platform | Complexity | Budget (₽) | Pros | Cons |
|---|---|---|---|---|---|
| Based on a router | OpenWRT (TP-Link, Asus) | Average | 500–2000 | There is no need to buy hardware if you already have a router. | Limited functionality, weak processor |
| Raspberry Pi + speakers | RPi 3/4/5, Volumio/Moode Audio | Low | 3000–8000 | Flexibility, support for all formats, touch screen | Requires Linux skills |
| ESP8266/ESP32 | NodeMCU, Wemos D1 Mini | High | 500–1500 | Compact, low power consumption | Complex firmware, limited memory |
| A ready-made solution with AliExpress | Xiaomi Mi Internet Radio, Teufel Raumfeld | Low | 2000–15000 | No assembly required, guaranteed | Closed software, limited settings |
| PC/laptop + external DAC | Windows/Linux + Foobar2000 | Low | 0–5000 | Maximum sound quality | Not portable, high power consumption |
The ESP32 is the only platform on this list that allows you to create a fully autonomous receiver with a battery and touch-sensitive buttons without the need for additional modules. The remaining options require either constant power from the mains or connection to external speakers.
2. WiFi Radio Receiver from an Old Router: Step-by-Step Instructions
If you have a router with support lying around OpenWRT (For example, TP-Link WR841N, Asus RT-N12), it can be converted into a radio receiver in 30 minutes. The main requirement is a USB port for connecting a sound card.
What you will need:
- 📡 Router with OpenWRT (list of compatible models Here)
- 🎧 USB sound card (e.g. Creative Sound Blaster Play! 2)
- 🔌 Speakers or headphones with a 3.5 mm jack
- 💻 Computer for firmware
Step 1: Install OpenWRT
Download the firmware for your router model from official website. Flash the router via the web interface (section System Tools → Firmware Upgrade). After rebooting, connect to it via SSH (the default login/password will be root without password).
Step 2: Connecting the Sound Card
Insert the USB sound card into the router and run the following commands:
opkg update
opkg install kmod-usb-audio alsa-utils mpg123
Check if the card has been identified:
aplay -l
The output should show a line with the name of your sound card (for example, card 1: Play2 [Sound Blaster Play! 2]).
Step 3: Setting up radio playback
Install the player mpg123 and create a script to launch the radio station. For example, for Radio Mayak (flow http://icecast.vgtrk.cdnvideo.ru/mayakfm):
#!/bin/sh
mpg123 -o alsa -a hw:1,0 http://icecast.vgtrk.cdnvideo.ru/mayakfm
Save the file as /root/radio.sh and make it executable:
chmod +x /root/radio.sh
Is the sound card connected to the router?|Is there an internet connection?|Is the radio station stream specified correctly in the script?|Are the script execution rights granted?-->
Step 4. Autostart at startup
To turn on the radio automatically, add the line to /etc/rc.local before exit 0:
/root/radio.sh &
⚠️ Attention: Some routers (eg. TP-Link TL-WR740N) have a weak processor and may "slow down" when playing streams with a bit rate higher than 128 kbps. In this case, choose radio stations with lower quality or use transcoding via FFmpeg.
3. Assembling a receiver on Raspberry Pi: maximum functionality
Raspberry Pi — the ideal platform for creating a full-fledged WiFi radio receiver with a touchscreen, remote control, and support for all audio formats. We'll consider the option with Volumio — a specialized OS for audio systems.
Necessary components:
- 🖥️ Raspberry Pi 3/4/5 (recommended) RPi 4 for stable operation)
- 🎛️ Sound card (for example, Hifiberry DAC+ or USB DAC)
- 🔊 Speakers or amplifier with speakers
- 📱 Touch screen (optional, e.g. Waveshare 3.5" LCD)
- 📀 MicroSD card (minimum 8 GB, class 10)
Step 1: Install Volumio
Download the image Volumio For Raspberry Pi With official website. Write it to MicroSD using Balena Etcher or Raspberry Pi ImagerInsert the card into RPi and connect the power.
Step 2: Initial setup
After loading:
- Connect to a WiFi network
Volumiowith a passwordvolumio2. - Open in browser
http://volumio.local(or find the router's IP address in the list of connected devices). - Go through the setup wizard: select your language, connect to your WiFi network, and update the software.
Step 3. Connecting the sound card
If you use Hifiberry DAC+ or a similar module, activate it in the settings:
- Go to
Settings → Player → Audio Output. - Select your sound card (for example,
Hifiberry DAC+). - Save the settings and reboot your device.
Step 4: Adding Radio Stations
IN Volumio Radio stations are added as "web radio":
- Go to
Library → Web radio. - Click
Add a new station. - Enter the name (e.g., "Radio Record") and the stream URL (e.g.,
http://air2.radiorecord.ru:805/rr_320). - Save and start playback.
Where can I get URLs for radio station streams?
Many radio stations hide direct links to streams, but they can be found:
1. On sites like Radio Browser (base of 30,000+ stations).
2. Using the code inspector on the radio station's website: open the web player, press F12 → "Network" tab → find the file with the .m3u or .pls extension.
3. In mobile applications of radio stations (for example, Radio Russia) through a traffic analyzer Fiddler or Charles Proxy.
Step 5. Control from your phone
Install the application Volumio For Android or iOSIt allows you to:
- 🎛️ Change radio stations from your phone
- 🔊 Adjust volume and equalizer
- 📱 Use your phone as a remote control
⚠️ Attention: If the sound is choppy or breaks up, check your buffer settings in Settings → Player → BufferingFor unstable WiFi, increase the value to 10–15 seconds. Also, make sure the router isn't throttling the device's speed. Raspberry Pi (check your settings) QoS).
4. Compact ESP32 Receiver: For Advanced Users
If you need portable receiver with a battery and minimal dimensions, ESP32 — the best choice. This platform allows you to create a matchbox-sized device that will receive radio via WiFi and play it on a speaker.
Components:
- 📌 Fee ESP32 (For example, Wemos Lolin32 or NodeMCU-32S)
- 🔊 Audio amplifier module (e.g. PAM8403)
- 🎤 Speaker 3-5 W (impedance 4-8 ohms)
- 🔋 Li-Ion 18650 battery + charging module TP4056
- 📶 WiFi antenna (optional, for better reception)
Step 1. Assembling the circuit
Connect the components according to the diagram:
ESP32 (GND) → PAM8403 (GND)
ESP32 (3.3V) → PAM8403 (VCC)
ESP32 (GPIO25) → PAM8403 (IN+)
ESP32 (GND) → PAM8403 (IN-)
PAM8403 (OUT+) → Speaker (+)
PAM8403 (OUT-) → Speaker (-)
To power the module, connect the battery to the module. TP4056, and the exit TP4056 - To 5V And GND on ESP32.
Step 2. Flashing the ESP32 firmware
We will use firmware ESP32-Radio from EdzelfDownload the latest release and flash the board via Arduino IDE:
- Install the libraries:
ESP8266Audio,WiFi,SPIFFS. - Open the sketch
ESP32-Radio.ino. - In the file
config.hPlease enter your WiFi network details:
const char* ssid = "your_ssid";
const char* password ="your_password";
- Upload the sketch to the board (select the correct model in
Tools → Board).
Step 3. Receiver Control
After flashing:
- 📱 Open the web interface at
http://[IP_ESP32](find IP in router). - 🔍 Add radio stations to the list (format:
Name;Stream_URL). - 🎛️ Control playback via the web or buttons on the board (if connected).
Step 4. Optimizing energy consumption
To increase battery life:
- 🔋 Reduce the backlight brightness (if there is a screen).
- 📡 Disable WiFi in sleep mode (in firmware settings).
- ⚡ Use deep sleep (
esp_deep_sleep) with timer wake-up.
⚠️ Attention: When using a 2000 mAh 18650 battery, the device will last approximately 6-8 hours in active mode. For longer runtime, add a power bank or use higher-capacity batteries (such as 21700).
5. Ready-made solutions: what to buy if you don’t want to assemble
If DIY assembly seems too complicated, you can buy a ready-made WiFi radio receiver. We've selected 5 proven models with good value for money.
| Model | Price (₽) | Peculiarities | Pros | Cons |
|---|---|---|---|---|
| Xiaomi Mi Internet Radio | 2 500–3 500 | Supports 10,000+ stations, controls via phone, and features a built-in 2.5" speaker. | Compact, easy to set up | Xiaomi's closed ecosystem means there's no port for external speakers. |
| Teufel Raumfeld One M | 12 000–15 000 | Multi-room system, Spotify, AirPlay support, high-quality sound | Premium sound, reliability | Expensive, requires connection to the Teufel cloud |
| Sangean WFR-28C | 6 000–8 000 | FM/WiFi/DAB+, color screen, podcast support | Versatility, good FM reception | Complex interface, no Russian-language firmware |
| Grace Digital Mondo+ | 4 000–5 500 | Supports Pandora, iHeartRadio, and a built-in alarm clock. | Simple, good sound for the size | Limited functionality for Russia |
| Denon HEOS 1 | 18 000–22 000 | High-quality sound, HEOS Multi-room support, Bluetooth | Audiophile quality, flexibility | Very expensive, requires linking to a Denon account |
When choosing a ready-made device, pay attention to:
- 📡 Support for Russian radio stations (Some models are aimed at the Western market and may not have popular domestic stations in their database).
- 🔌 Availability of audio outputs (if you plan to connect external speakers).
- 📱 Compatibility with your ecosystem (For example, Teufel Raumfeld works better with Android, A Denon HEOS - With iOS).
⚠️ Attention: Cheap Chinese receivers (for example, brands Mibao or Lemega) often have problems connecting to Russian Wi-Fi networks due to incompatibility with channels 12–14 in the 2.4 GHz band. Before purchasing, check with the seller whether the model supports your region.
6. Typical problems and their solutions
Even after proper assembly, the WiFi radio receiver may not work reliably. We assembled Top 7 problems and ways to eliminate them.
1. The receiver does not connect to WiFi
- 🔌 Check that the password you entered is correct (case-sensitive!).
- 📡 Make sure that your router doesn't hide the SSID (this can cause errors in some firmware versions).
- 🔄 Reboot your router and receiver.
- 🛠️ If used ESP32, update the library
WiFiV Arduino IDE.
2. The sound is interrupted or "breaks"
- 📶 Check your internet speed: streaming radio requires a minimum of 64 kbps per station.
- 🔊 Reduce the stream bitrate (for example, instead of 320 kbps, select 128 kbps).
- 📵 Switch your router to a less congested 2.4 GHz channel (use WiFi Analyzer for ether analysis).
- 🔋 If you are using a battery, check the voltage: drops below 3.3V cause malfunctions ESP32.
3. Some radio stations are not playing
- 🔍 Make sure the stream URL is correct (some stations change links).
- 📌 Formats checked: MP3, AAC, OGG. For example, ESP8266 does not support AAC+ without additional libraries.
- 🌍 Some stations block access from Russia. Use a VPN on your router or in your receiver's firmware.
4. The receiver heats up or turns off
- 🔥 For Raspberry Pi use radiators or active cooling.
- 🔌 Check the power supply: RPi 4 requires 5V/3A, and cheap chargers may not provide a stable voltage.
- 📉 Reduce the load: disable unnecessary services (for example, Bluetooth or AirPlay).
5. Poor sound quality
- 🎧 Check the stream's bitrate: some stations broadcast at 64 kbps, which is noticeably worse than 192–320 kbps.
- 🔊 Use an external DAC instead of the built-in audio output.
- 🎛️ Set up the equalizer in the software (for example, in Volumio there are pre-installed presets).
6. The receiver does not save settings after rebooting
- 💾 For ESP32 make sure it is called in the code
preferences.beginto save data to flash memory. - 📀 For Raspberry Pi check the file system write permissions (
chmod -R 777 /data). - 🔄 Update your firmware: older versions may have had bugs with configuration saving.
7. Phone control doesn't work
- 📱 Make sure your phone and receiver are on the same WiFi network.
- 🔒 Check your router's firewall settings: ports 80, 443, and 3483 should be open for the local network.
- 📲 Reinstall the management application (eg. Volumio or ESP32-Radio WebUI).
7. Advanced Features: How to Make Your Receiver Unique
The basic assembly is just the beginning. With these additional functions Your WiFi radio will become a real "smart" device.
1. Voice control
Connect ESP32 To To Alice or Google Assistant:
- 🎤 Use the module INMP441 (I2S microphone) for command recognition.
- 🤖 Set up integration with Yandex IoT or Home Assistant.
- 🗣️ Example commands: "Alice, turn on Radio Jazz", "Okay Google, make it louder".
2. Touch screen and beautiful interface
For Raspberry Pi or ESP32 You can add a display:
- 📺 For RPi: Official Raspberry Pi Touch Display (7") or Waveshare 3.5" LCD.
- 📱 For ESP32: TTGO T-Display (built-in screen 1.14").
- 🎨 Use libraries
LCD_UIorLovyanGFXfor drawing the interface.
3. Multi-room system
Sync multiple receivers to play radio in all rooms:
- 📡 Use Snapcast (For Raspberry Pi) or SyncPlayer (For ESP32).
- 🔊 Set one receiver as "master" and the rest as "slaves".
- 🎵 The delay between devices will not exceed 50 ms.
4. Alarm clock with radio
Set the radio to turn on automatically at a specified time:
- ⏰ For Volumio: use a plugin Alarm Clock.
- 🕒 For ESP32: add module DS3231 (accurate real time clock) and write the code to turn it on by timer.
- 🌅 Example: alarm at 7:00 with a gradual increase in volume over 10 minutes.