WiFi Webradio with ESP8266 and VS1053

A wifi web radio player with only low costs boards.
Ka-Radio, listen the world.

Similar projects worth following
Control with any browsers (ie edge, chrome mozilla etc...).
or with an external hardware panel or with the uart interface.
Memory for 255 stations
OTA upgrade
Read direct mp3 or ogg streams or playlist .pls .m3u and .xspf
Read up to a 320 kb/s stream,
Embedded wifi configuration via the web or uart interface
Metadata displayed (ie Title of the current song if given in the stream),
All settings saved (sound setting, stations, wifi)
Server multi clients with automatic refresh for all (websocket),
The stations can be downloaded and uploaded within the web site,
Stations sort management by drag drop.
very quick responsive web by caching local information in the browser and websocket.
additional hardware: a led indicates the state of the equipment (gpo2->resistor->led->3.3volt). Speed blink: init, 90%in 10%out: connection in progress, 10% in 90%out: Equipment ready.
Optional: control switches, lcd display., additional ram for buffering.

See for the description of the minimal prototype.

See Github for sources

See the lcd +IR software's on the Setting panel of the webradio

For more informations or questions, you can enter to the Karadio facebook group

Release 1.1.5

New features:

- Modification of the list of uart command. See uart and html interfaces
- New IR and LCD software
- Autoplay corrected
- Many bugs removed thanks to users feedback's.

Older releases:

- Now 2 AP's can be set. The second one will be tested if the first is not detected.
- The Mac address of the radio is displayed
- An offset volume can be set for each station in Station editor.
- Added: a reset button for the equalizer
- Pb on Autostart not correctly checked: corrected
- New html command: instant="http://your url"
- The path of a station can now include some & parameters.
-- Uart command list now can take a parameter: the number of the station to display.
.If no parameter, the complete list is sent.
- New wake and sleep features. Two modes: Time mode: "hh:mm" to wake or sleep at a given hour, or the delay mode "mm".
- Many minors html adjustments.
- The user agent for http request can be set for some special streams.Example:
which need a user agent= pcradio.
This pcradio user agent is already implemented automatically in the code when a pcradio station is encountered.
- Drag an drop on the stations list: rearrange the list by dragging a line to another one. Save the change when asked.
- Themes toggle between light blue and dark marron theme with a click on the logo.
- Sleep mode to stop the play after a delay.
- Functions on the web page are optimized.
- Many minor improvements on the code and the web page.
- New uart interface command: cli.uart("x")
With x the uart baudrate at the next reset and permanently.
List of valid baudrate: 1200, 2400, 4800, 9600, 14400, 19200, 28800, 38400, 57600, 76880, 115200, 230400
The command will reply with
##CLI.UART= 115200# on the next reset.
- New Station selection with number
- Stations management in one page
- abort button on station edition.
- New html interface. Can receive basic commands (play, stop, volume from wget or browser)
- New I2S external DAC interface on the vs1053. The I2S is enabled by default to 48kHz. To change the speed permanently use the uart interface with the command :
cli.i2s("x") with x =0 for 48kHz, x=1 for 96kHz and x=2 for 192kHz
The i2s interface is available on the alientek vs1053 with i2s_sclk on SCLK (GPIO16), i2s_sdata on SDIN (GPIO07), i2s_mclk on MCLK (GPIO05), i2s_lrout on LRCK (GPIO04).
- New Autostart: If autoplay is checked on the web interface, the current station is started at power on even with no web browser.

Simplest prototype:

- Optional external ram (23LCV1024) support (1:CS/=GPIO16 2:MISO=GPIO12 3:NC 4:GND 5:MOSI=GPIO13 6:SCK=GPIO14 7:GND 8:3.3v)

The optional led is now on GPIO2. The blue led on the ESP8266 is blinking at the same rate.
GPIO16 is now the Chip select for the external ram if any.
The external ram is detected at boot time if present.

To upgrade to this release, please flash at 0x1000 , at 0X81000 and blank.bin at 0x7e000 & 0x3fe000
After that, all next updates are done with the On The Air (OTA) feature.
New binaries are hosted at .

Loading the esp8266First use
  • If the access point of your router is not known, the webradio initializes itself as an AP. Connect your wifi to the ssid "WifiWebRadio",
  • Browse to to display the page, got to "setting" "Wifi" and configure your ssid ap, the password...
Read more »

octet-stream - 372.94 kB - 01/15/2017 at 11:54


octet-stream - 372.94 kB - 01/15/2017 at 11:54



A new one. Don't know what is new.

octet-stream - 3.77 kB - 01/10/2017 at 11:04


octet-stream - 4.00 kB - 07/21/2016 at 15:19



Must be written only one time.

octet-stream - 128.00 bytes - 07/21/2016 at 15:18



The boot. Must be written only one time.

octet-stream - 3.16 kB - 05/24/2016 at 17:16


View all 6 files

View all 10 project logs

  • 1


    From ESP8266_ESP12( 3.3 v) or nodeMCU(5v) to VS1053 (5 v)


    ADC : gound if control panel not used

    CH_PD to 3.3v

    GPIO16 led output

    D5:GPIO14 to VS1053 SCK

    D6:GPIO12 to VS1053 MISO (or so)

    D7:GPIO13 to VS1053 MOSI (or si)

    TXD to CH340G UART rx

    RXD from CH340G UART tx

    D1:GPIO05 to VS1053 XDCS

    D2:GPIO04 to VS1053 DREQ

    D3:GPIO00 to VS1053 XRST


    D8:GPIO15 to VS1053 XCS

  • 2

View all instructions

Enjoy this project?



vis22 wrote 15 minutes ago point

Many thanks!!!

I will try to connect the IR remote from the boom box.

P.S. Dear jp kokatriks, in the current version karadioU8glib.ino on no strings the #define IR and the #ifdef IRLib2 ?

  Are you sure? yes | no

vis22 wrote 3 hours ago point

Спасибо за совет.

Выход модуля питания 5V установлен конденсатор 220 мкФ.

Технический паспорт для vc1053 рекомендует конденсаторы 22 мкФ в силовых цепях.
Установленная на плате модуля С17 и С18 были сомнительными номинальным.
Под руки были только 100 мкФ.
В результате, цель достигнута, отказы прекратились.

Могу ли я узнать ИК-датчик схема проводки и способ настройки командных кодов ИК?

  Are you sure? yes | no

jp cocatrix wrote 3 hours ago point

In u8glibConf.h of the software:

**** Instruction for the IR module *****************************************************************************************
The model used here is from:
or equivalent. Cost less than 1$

- Based on NEC protocol; Built-in 1 x AG10 battery;
- Remote control range: above 8m;
- Wavelength: 940Nm;
- Frequency: crystal oscillator: 455KHz; IR carrier frequency: 38KHz

// IR library
Install the library from
Uncomment the #define IR  and the #ifdef IRLib2 at the beginning of the karadioU8glib.ino file.

The IR receiver pins:
From left to right (pin at bottom, sensor in front of you)
Gnd VCC Signal

The signal must be connected to
For mini #define PIN_IRRECV  2  or 3
For micro #define PIN_IRRECV  2  or 3 or 7

In karadioU8glig.ino:
//  Uncomment the following line to see the code of your remote control and report to the case the value
//        Serial.print("Protocol:");Serial.print(results.decode_type);Serial.print("  value:");Serial.println(results.value,HEX);
If you want to use another remote, you can see the code of the keys and modify the switch case for the needed function.
See IRremote.h  to add the protocol you need for the remote.

The tx of the pro mini must be connected to the rx of the esp12 but
Warning; the esp rx pin is not 5V tolerant, so if your pro mini is a 5v version we need to adapt the level.

The value of the resistors is not critical. Only the ration 1/3 2/3 must be respected 1k and 2k for example)


  Are you sure? yes | no

Sergio wrote a day ago point

Hi JP, 

Autoplay dosn't work correctly, every time I turn the player on, I have to press the play button, to start the radio playing

  Are you sure? yes | no

jp cocatrix wrote 19 hours ago point

update please.

  Are you sure? yes | no

Sergio wrote 10 hours ago point

With the last update, i don't have sound with any stations

  Are you sure? yes | no

jp cocatrix wrote 9 hours ago point

Do another ota update, and enter the command on uart:
And reboot again.

I wonder why your prototype doesn't like the vs1053 patch.
Are you alone in the world? May be some other problem on wire can explain it?

  Are you sure? yes | no

Sergio wrote 7 hours ago point

Till i'm update the player  to the last update works ok, the only problem was that the autoplay doesn´t work ok. No wire problems, i´ll try with the uart command that you said. 

  Are you sure? yes | no

vis22 wrote a day ago point

May be. The power supply used DC-DC step-down module LM2596 powered by the voltage regulator +12 V boom-box.
ESP8266-12 randomly stopped communication with VS1053, assuming a fault ESP8266-12 replaced it ESP8266-7 effect it is not received, the modules behave as well. Only extra capacitors ensure their reliable operation.

  Are you sure? yes | no

jp cocatrix wrote a day ago point

May be a high frequency filter with a few pf, and a 22µf on the 5 volts only?

  Are you sure? yes | no

vis22 wrote 2 days ago point

The recommended VS1053 module has to install additional capacitors 22 microfarads in parallel of C17 and C18 to the supply chains. Without them, the module sometimes freezes.

  Are you sure? yes | no

jp cocatrix wrote 2 days ago point

Never seen on more than 10 prototypes. 

May be a power supply problem on your prototype before these regulators?

  Are you sure? yes | no

archetix wrote 5 days ago point



amp would be activated only during playback
(It prevents clatter at start-up)
the rest suppresses  filter

Please excuse my bad English
(CZech > EN Google translate)  :-)

  Are you sure? yes | no

Thomas wrote 5 days ago point

Great. Pin D4(GPIO2) is already in use for LED on Button Interface.

But we can use Pin Playing 12 on LCD MCU as well.



  Are you sure? yes | no

archetix wrote 4 days ago point

Pin D4 (GPIO2) is already in use for LED on Button Interface ...

I would therefore suggest a new feature firmware for ESP8266
configuration GPIO2

LED out

amp control

thus enabling control amplifier without display

Please excuse my bad English

(CZech > EN Google translate)  :-)

  Are you sure? yes | no

jp cocatrix wrote 4 days ago point

Yes, I can also add a sys command to choose between the blinking default and the playing status on gpio2

  Are you sure? yes | no

archetix wrote 4 days ago point

HI jp cocatrix,

It would be great
Thank you in advance

  Are you sure? yes | no

jp cocatrix wrote 4 days ago point

No problem. in the next release

sys.led("x")  with x=0 default blink, x=1 led On when playing (state saved in eprom)


  Are you sure? yes | no

archetix wrote 4 days ago point

Thank you very much

  Are you sure? yes | no

archetix wrote 5 days ago point

Hello I want to commend this great project.
I have a suggestion for a configuration option GPIO2
such as switch power amplifier
could be a useful function (standby mode)
Thank you...

  Are you sure? yes | no

Thomas wrote 5 days ago point

Hi Archetix, 

i also tried to use  a Pam based amplifier beacause it is very cheap.

But i has very frustrating klicking when loudness is low. i guess your cirquit can eleminate that, right?



  Are you sure? yes | no

jp cocatrix wrote 4 days ago point

Well done for the ground to avoid loop!

  Are you sure? yes | no

vis22 wrote 01/15/2017 at 20:10 point

Thank you for your project, it is allowed to breathe life into my boom-box.

  Are you sure? yes | no

jp cocatrix wrote 01/15/2017 at 20:53 point

You are welcome.

  Are you sure? yes | no

Sergio wrote 01/15/2017 at 14:59 point

The new updates, load into WEb browser more quickly than old versions.

  Are you sure? yes | no

jp cocatrix wrote 01/15/2017 at 15:42 point

Yes, a bug in the websocket corrected.

  Are you sure? yes | no

Richard wrote 01/12/2017 at 15:48 point

I am finding the Nokia 5110 display a little unreliable.  

I've changed the CLI baud rate to 28800 and the display shows the correct station data some of the time, but as you move through the stations, the display will stop updating. 

The CLI data is still being sent as I can monitor it. 

Is it worth trying a slower baud?

  Are you sure? yes | no

jp cocatrix wrote 01/12/2017 at 16:00 point

With karadioNokia5110 or karadioU8glib?

It is not normal, but yes try a slower baud.

If it stop to display any change after stopping, something is wrong in your soft or wiring.

  Are you sure? yes | no

Richard wrote 01/12/2017 at 17:10 point

This was with the older Nokia5110. I just tried the U8glib version, but it's failing to build as Arduino IDE 1.6.5 can't find the U8glib header files...

  Are you sure? yes | no

satbk_2 wrote 01/10/2017 at 16:53 point

Hi all. Please tell me how can I connect the LCD module to this radio? Which module can be connected? Thank you

  Are you sure? yes | no

jp cocatrix wrote 01/12/2017 at 16:06 point

  Are you sure? yes | no

mangup wrote 01/10/2017 at 08:05 point

Thanks for update!

  Are you sure? yes | no

Thomas wrote 01/10/2017 at 05:15 point

Morning JP,

thanks a lot for your work in Karadio and your newest update.

Now my stop button is working again :-)

Have a nice day


  Are you sure? yes | no

polgrv wrote 01/08/2017 at 17:50 point

jp cocatrix,

thank you for what you've shared with us!

One note: both here and on the GitHub you report as setup page on the staring AP mode. For me was, but I've not changed anything in your files. Is it possible the published IP is wrong?

If it could be useful, to upload your files on the ESP working on Linux, I downloaded from GitHub, I added the dependency to get it working, I copied in the esptool folder all the .BIN files and I just executed this shell command after I connected my NodeMcu board to the USB port:

python2.7 --port /dev/ttyUSB0 write_flash -ff 40m -fm qio -fs 32m 0x00000 boot_v1.5.bin 0x01000 0x81000 0x7E000 blank.bin 0x3FE000 blank.bin 0xFC000 esp_init_data_default.bin 0x3FC000 esp_init_data_default.bin

This is my first running implementation (to replace the mono speaker I've already a small amp board and I've just to putt all in a box):


Boards from aliexpress, connection cable from an internal mainboard->front panel USB cable and a strip of female headers.

  Are you sure? yes | no

jp cocatrix wrote 4 days ago point


I haven't see your message befor. Sorry.

Yes a mistale in the README. Corrected thanks.

Thanks for the shell. I add it in the next delivery.

  Are you sure? yes | no

Thomas wrote 01/08/2017 at 08:31 point

Since my first Radio is still not fully build up i did a second one for the father of my Girlfriend.

I buld it up in a small stereo speaker which is used available for approx. 12€ on A...zon.

You can recognize it on the blue light of life :)


  Are you sure? yes | no

jp cocatrix wrote 01/08/2017 at 17:15 point

Well done!

  Are you sure? yes | no

ldv82 wrote 01/06/2017 at 19:17 point

jp cocatrix

I have a suggestion to add a button in the interface to reset the default tone. 

To reset the EQ settings.

  Are you sure? yes | no

jp cocatrix wrote 01/06/2017 at 20:41 point

ok, Easy ;-)

  Are you sure? yes | no

balaji wrote 12/29/2016 at 08:42 point


I liked your project very much. 

I have one question will this method work with Adafruits VS1053 mp3 codec

Thanks in advance


  Are you sure? yes | no

Thomas wrote 12/28/2016 at 08:04 point

Hello together,

has anyone a idea how to play a local playlist, running on a computer in the own network?

I tried\radio\Madonna\Madonna.m3u

Im using Windows 7 and the folder is enabled for anybody



  Are you sure? yes | no

jp cocatrix wrote 12/28/2016 at 09:16 point

M3U is a playlist. Edit it and don't forget to add\ before the real stream mp3 or ogg or other. Or simply call it with the direct mp3 name.

  Are you sure? yes | no

Thomas wrote 12/29/2016 at 07:13 point

Thanks for your hints but i did not catch it.

I have created a folder wit a mp3 in it   D:\1\1.mp3

Folder 1 is enabled as 1. So in my opinion the path should be:\1\1.mp3

If i enter this into a new station he doubles the last entered statoin from above.

Can you tell me what i have to enter exactly for my shown example?



  Are you sure? yes | no

ldv82 wrote 12/28/2016 at 11:58 point
"Stream What You Hear" program sends sound from your computer sound card to the stream, but does not work well with me. Still, you can use VLC player to make the flow of the local network. I liked the other way. Shoutcast-dsp-1-9-0-windows (Winamp plugin) and SHOUTcastGUI (a simple server). All that will be playing in Winamp, will be transferred to the stream network.

  Are you sure? yes | no

Thomas wrote 12/29/2016 at 07:16 point

Hi Idv82, i will try later.

First i will understand the other way



  Are you sure? yes | no

jp cocatrix wrote 01/04/2017 at 15:11 point

No change on adc. The empty value is 1V, (I measured 0.98 on my proto)

The stop is at 0.19 here and play at 0.36

But it is possible to increase the range to 220. Ok

if ((adc >400) && (adc < 580)) // volume +
            vol = VS1053_GetVolume();
            if (vol <244)
//                printf("vol %d   vol1 %d\n",vol,vol1);                    
        else if ((adc >730) && (adc < 830)) // volume -
            vol = VS1053_GetVolume();
            if (vol >10)
//                printf("vol %d   vol1 %d\n",vol,vol1);                    
        if (!inside)
            if (adc < 200) // stop
                inside = true;
            else if ((adc >278) && (adc < 380)) //start
                inside = true;
                playStation    (Vol);
            else if ((adc >830) && (adc < 920)) // station+
                inside = true;
            else if ((adc >590) && (adc < 710)) // station-
                inside = true;

  Are you sure? yes | no

jp cocatrix wrote 12/29/2016 at 10:01 point

KaRadio is a http stream player. It doesn't know about the file system of another computer  nor embed nfs or CIFS or uPnP protocol above tcp/ip. To play a file from a pc you need to convert it to a stream. Vlc can do that or any html server like apache or and many other. Karadio send a get to this server to receive the stream, that's all it can do.

Hope this help

  Are you sure? yes | no

Thomas wrote 01/04/2017 at 15:00 point

Ok, that was not clear to me but it is logical. Setting up a own server is on my todo list for near future, but not now.

Did you changed the ADC Value for STOP in 1.1.3 ?

Stop Button does not work anymore. I measured voltage on ADC Pin when Stop is pressed. It is 0,202V so ADC should be 197. Could the Value be set to 220 in next release?



  Are you sure? yes | no

V-Man wrote 12/27/2016 at 18:38 point

Thanks for this beautiful Thing! 

I encounter something weird with the Alientek mp3 module: when I connect a headphone I get beautiful sound free of noise, but when I connect it to a either a small amplifier or the Aux of my stereo, I get only very bad sound or no sound at all. What could be happening here? Anyone experiencing this as well?

  Are you sure? yes | no

Thomas wrote 12/27/2016 at 20:24 point

Hi V-Man, 

Maybe you are using a Mono cable. Has it two Or three poles?

If two it maybe a Mono one. You need a Stereo one. If it is already Stereo, try a shielded one.

Also ist ist Not good to cascade two class D Amplifiers. 

If you realy need to, usw one with Differential Inputs such as MAX98306.



  Are you sure? yes | no

V-Man wrote 12/28/2016 at 06:57 point

Thanks for your tips, Thomas!

My cable is certainly stereo, I'll have a look into using another amplifier, this might well be the problem......


  Are you sure? yes | no

jp cocatrix wrote 12/28/2016 at 09:18 point

No problem here with alientek on headphone or aux entry of a hifi.

  Are you sure? yes | no

Similar Projects

Does this project spark your interest?

Become a member to follow this project and never miss any updates