A wifi web radio player with only two low costs boards.

2017/04/13 New release 1.2: See The hackaday page
For more informations or questions, you can enter to the Karadio facebook group


Control with any browsers (ie edge, chrome mozilla etc...).or with an external hardware panel or with the uart interface.

Memory for 256 stations

OTA upgrade

Read direct mp3 or ogg streams or playlist .pls .m3u and .xspf

Read up to a 320 kb/s stream,

New web page, Fit well on mobile or computer.

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,

Very quick responsive web by caching local information in the browser and websocket.

a led indicates the state of the equipment . Speed blink: init, 90%in 10%out: connection in progress, 10% in 90%out: Equipment ready.

External DAC i2s interface on the vs1053 enabled.

Autostart on power on if the autoplay is checked.

Step 1: Step1: What You Need

Parts required:

A nodeMcu V3 (on aliexpress)

A VS1053 module (aliexpress)

A Fiberglass board epoxy boards (aliexpress)

2.54mm 40 Pin Stright Female Single Row Pin Header Strip PCB Connector (aliexpress)

Some wires and Soldering Iron.

A pc or other with an usb port

and an usb to micro usb cable. (aliexpress)

An external amplifier or earphone.

A prototype can also be made using a breadboard and some jumper wires.

See The hackaday page

Step 2: Step2: Build the Webradio Hardware

Follow the schematic to wire the board.

Be careful, the vs1053 is hard to soldier. Pins are very close each other.
Use a very thin iron.

Check each wire before the next step.
The power comes from the micro usb of the nodeMcu linked to the pc or a 5 volts transformer.

Step 3: Step3: Loading the Software and First Use

Loading the software

You need the ESP flash download tool.

Load it at the Espressif page

The binaries files can be found on Github or hackaday

Follow the image to configure the tool depending of the tool release

To enter the flash mode of the nodeMcu, press and hold the flash button, the press the reset button. You ca release the flash button.
Start the download with the start button of the ESP flash tool.

After a while, the Finish green indication is shown.

Press the reset button of the nodeMcu. If succesful, the nodeMcu les blinks.

First use

If the acces point of your router is not known,

the webradio init itself as an AP. Connect your wifi to the ssid "WifiWebRadio", Browse to to display the web page, got to "setting" "Wifi" and configure your ssid ap, the password if any, the wanted IP or use dhcp if you know how to retrieve the dhcp given ip (terminal or scan of the network).
In the gateway field, enter the ip address of your router.Validate. The equipment restart to the new configuration. Connect your wifi to your AP and browse to the ip given in configuration.
Congratulation, you can edit your own station list.
Dont forget to save your stations list in case of problem or for new equipments.if the AP is already know by the esp8266, the default ip is given by dhcp.
A sample of stations list can be uploaded via the web page and loaded to the webradio.

All future update will be made within the webradio interface via the ota feature.

Step 4: Some Images

The esp8266 is an incredible processor. This project is made with the freertos environment and contains many tasks: a web client to connect to the radio stream, a web server to provide the browser interface 'and a child task for each client), an uart task to display and and send commands to the webradio, a task to manage an external panel command on the adc entry (schematic in the hardware directory on github), a task for each client websocket, etc.
It is a complex project, but the processor is really powerful. The only limit is the lack of ram, which can be removed by adding an external chip on the spi bus. See the hackaday page or github page.

The uart interface can show some debug informations and can send controls to the webradio.
For a command list see the uartinterface.txt file at


<p>I have a small problem with the module vs1003. When switch station, previous station continues playing until ends cache in buffer, then begins to play the current station. Display and the web interface shows the current station, but playing the previous one. Please tell me how can i fix this situation.</p>
I wonder how it is possible. Are you sure that it is the Karadio software?<br>Send a log please.
<p>Hi karawin,</p><p>I finished the wooden radio that told you I was building.</p><p>Thanks again for your work.</p><p><iframe allowfullscreen="" frameborder="0" height="281" src="//www.youtube.com/embed/krWOcHQyDbA" width="500"></iframe></p><p>More information: <a href="https://giltesa.com/?p=18015" rel="nofollow"> https://giltesa.com/?p=18015</a></p><p>Kind regards.</p>
Great demonstration. And Bravo for the quality of the build.<br>The pluggable connector is a very good idea.
<p>Hello karawin,<br><br>I'm creating a web interface with Bootstrap, I have a question, What memory limit is there for interface files?<br><br>My index.html file has a size of 42KB, four times more than the original, and I have not yet finished...<br><br>I attach a link to the test web, I think it's looking good:</p><p><a href="http://test.giltesa.com/karadio1/" rel="nofollow">http://test.giltesa.com/karadio1/</a><br><br>Kind regards.</p>
<p>This file is on flash, so 42KB is not a problem.</p><p>Go on...</p>
<p>Awesome instruction! I got my webradio running on basic configuration. Now I just need to add a display and buttons. <br>Thank you karawin for sharing your work! </p>
You are welcome.
<p>Photo de ma carte arduino pro mini :</p>
<p>Et dans &quot;u8glibconf.h&quot; j'ai opt&eacute; pour cet afficheur, j'ai donc decommenter uniquement cette zone :</p><p>U8GLIB_SSD1306_128X64 u8g(U8G_I2C_OPT_NONE|U8G_I2C_OPT_DEV_0);// I2C / TWI</p>
<p>J'ai bien chang&eacute; dans u8g.h ceci : (UG8_16BIT)</p><p>In .../Arduino\libraries\U8glib\utility/u8g.h</p><p>uncomment the following line</p><p>#define U8G_16BIT 1</p>
<p>Euh, rectificatif sur la couleur de mon fil Gnd entre NodeMcu et mini Pro : bleue</p><p>Vu (NodeMcu) -------------&gt; RAW (mini pro) (couleur vert)</p><p>Pin Gnd (NodeMcu) -------------&gt; Pin Gnd (mini pro) (couleur BLEUE)</p><p>Pin Tx (NodeMcu) -------------&gt; Pin RxI (mini pro) (couleur jaune)</p>
<p>Bonjour Karawin,</p><p>oui aucun pb avec le fichier u8glibconf.h, j'ai bien vu que toutes les info sur le cablage y etait inscrites, mais je dois t'avouer que entre la NodeMcu et la carte arduino pro mini, ce n'est pas evident &agrave; comprendre, je m'explique :</p><p>Entre mini pro et OLED, voici mon branchement :</p><p>Pin A4 (mini pro) --------&gt; Pin SDA (OLED) (couleur brun sur mon montage)</p><p>Pin A5 (mini pro) --------&gt; Pin SCK (OLED) (couleur rouge sur mon montage)</p><p>Pin Gnd (mini pro) ---------&gt; Pin Gnd (OLED) (couleur noir)</p><p>Pin Vcc (mini pro) ---------&gt; Pin Vcc (OLED) (couleur bland)</p><p>OK </p><p>Par contre entre mini pro et NodeMcu, la je ne suis pas sur, voici ce que j'ai fait en m'inspirant du fichier u8glibconf.h :</p><p>Vu (NodeMcu) -------------&gt; RAW (mini pro) (couleur vert)</p><p>Pin Gnd (NodeMcu) -------------&gt; Pin Gnd (mini pro) (couleur vert)</p><p>Pin Tx (NodeMcu) -------------&gt; Pin RxI (mini pro) (couleur jaune)</p><p>Mon soucis, c'est que je comprend bien que l'envoi des donnees entre la NodeMcu et la carte mini pro se fait par la liaison Tx vers Rx, mon fil jaune sur mon montage, que je branche ou pas ce fil, je n'obtient rien sur l'afficheur OLED, du coup, OK, je me suis rendu compte en lisant u8glibconf.h que je n'avais pas chang&eacute; la Baudrate, j'ai eu un peu de mal &agrave; comprendre la liaison UART, mais maintenant grace &agrave; ton aide, c'est bon, je me dis que maintenant, seul une erreur de cablage peut poser probleme. La pin RxI de ma carte arduino pro mini, est-ce que c'est bien celle la (sur le cot&eacute;) ?</p><p>Je ne vois plus que &ccedil;a.</p><p>Merci d'avance pour ton aide</p><p>DOM</p>
<p>Si quelqu'un a plus de precision la dessus :</p><p>Entre l'arduino mini pro et l'ecran OLED, pas de probleme, j'arrive a comprendre :</p><p>Graphic LCD Pinout:</p><p> Mini Pro____ _______ GLCD___</p><p>JP2 A4 LCD SDA .... Pin 3</p><p>P2 A5 LCD SCK .... Pin 4</p><p>// LCD Gnd .... Pin 1</p><p>// LCD Vcc .... Pin 2 5 volts from the minipro VCC</p><p>Par contre, entre la NodeMCU et l'arduino mini pro, j'avoue que c'est pas clair :</p><p>RESET Reset (not used))</p><p>Rx 1 to the tx of the nodeMcu</p><p>Gnd ground</p><p>jp2: A4,A5 I2C lines</p><p>Raw: 5 to 16 VDC Max</p><p>Merci pour votre aide</p>
<p>Tout est dans u8glibconf.h</p><p>Cable wiring between nodeMcu and Mini Pro<br>-----------------------------------------<br>--NodeMcu-- --Mini Pro--<br>Tx Rx<br>Gnd Gnd<br>VU Raw</p>
<p>OK merci pour le changement du &quot;Baud rate&quot; ou taux de transmission en francais, c'est fait grace avec termite. J'ai eu du mal &agrave; comprendre, je voyais bien que vous parliez d'une autre interface, interface UART, mais je n'avais pas tout saisi... l&agrave; &ccedil;a va mieux !</p><p>Par contre, tjrs rien sur mon afficheur, bizarre ? Car pour le coup, les info elles transitent bien par l'interface serie UART / termites.</p><p>Peut etre une erreur dans mes branchements ?</p><p>A bientot</p><p>Merci</p>
<p>Hello, I'm Dom from France. I have a problem with TX signal.</p><p>My OLED no receive specifical signal (station title, etc).</p><p>Can you explain me this :</p><p>You must disconnect the rx tx from the mini or nano when flashing the nodeMcu.<br>Once flashed and started change the baud rate of the karadio with the <br>sys.uart(&quot;28800&quot;) <br>uart command and reset.</p><p>Because I try this :</p><p>My IP ( + /?sys.uart(&quot;28800&quot;), but it does not work...</p><p>Thank you for your help</p><p>DOM</p>
sys.uart(&quot;28800&quot;) est une commande &agrave; faire par l'interface s&eacute;rie.avec termite par exemple.<br>https://www.compuphase.com/software_termite.htm<br>Apres flash du logiciel la vitesse par d&eacute;faut est de 115200, il faut la passer en 28800 avec cette commande.<br>Ensuite rebrancher le oled et reset.<br><br>L'interface web n'est pas pr&eacute;vu pour ca.<br>
<p>I have this error when I try to flash</p>
<p>Wrong com port?</p>
<p>No, because it works with ESPFlashDownloadTool_v3.4.4, the same port. This is my settings who works, but the problem is I haven't signal from Tx pin of NodeMCU and not receive information of station on OLED display. I use Arduino Nano instead of mini. </p>
<p>You must disconnect the rx tx from the mini or nano when flashing the nodeMcu.<br>Once flashed and started change the baud rate of the karadio with the <br>sys.uart(&quot;28800&quot;) <br>uart command and reset.</p>
<p>Thank you, it works</p>
<p>Minimal test, works very well. I used ESPFlashDownloadTool_v3.4.4</p>
Well done<br>
<p>Hi,</p><p>having problems to connect to</p><p>=&gt; extraram state: 0 0xff &yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;<br>data : 0x3ffe8000 ~ 0x3ffe8902, len: 2306<br>rodata: 0x3ffe8910 ~ 0x3ffead44, len: 9268<br>bss : 0x3ffead48 ~ 0x3fff1b90, len: 28232<br>heap : 0x3fff1b90 ~ 0x40000000, len: 58480<br>Heap size: 30696<br>t0 task: 3fff89c8<br>t1 task: 3fff8b60<br>t4 task: 3fff90b8<br>t3 task: 3fff9700<br>t2 task: 3fffa450<br>mode : sta(a0:20:a6:00:f8:bd)<br>add if0<br>UART READY TO READ<br>AP1: , AP2: <br>first use<br> Station Ip:<br>Trying , I: 0 status: 0<br><br>Config not found<br><br>The default AP is WifiWebRadio. Connect your wifi to it.<br>Then connect a webbrowser to and go to Setting<br>Erase the database and set ssid, password and ip's field<br>del if0<br>usl<br>mode : softAP(a2:20:a6:00:f8:bd)<br>dhcp server start:(ip:,mask:,gw:<br>add if1<br>bcn 100<br>autostart: playing:0, currentstation:0<br>add 1<br>aid 1<br>station: 84:38:38:6d:9a:d0 join, AID = 1</p>
<p>i forgot to say the LED is not blinking.</p><p>regards maik</p>
<p>station: 84:38:38:6d:9a:d0 join, AID = 1</p><p>It show that the pc wifi is connected the the esp. </p><p> in the browser didn't start?</p><p>Try to define your ap with the uart interface wifi.con(&quot;your ap&quot;,&quot;your password&quot;) and reset.</p><p>The esp must connect to the ap in dhcp mode.</p>
<p>ok, </p><p>now i'm getting</p><p><br>connected with Rechenknecht, channel 7<br>dhcp client start...<br>ip:,mask:,gw:<br>autostart: playing:0, currentstation:0</p><p>site on still not reachable</p><p>regards maik</p>
<p>then i tried</p><p>sys.erase</p><p>and get</p><p>erase All done</p><p>after reboot i get</p><p>connected with Rechenknecht, channel 7<br>dhcp client start...<br>ip:,mask:,gw:<br>autostart: playing:0, currentstation:0</p><p>still not reachable</p><p>regards maik<br></p>
<p>full terminal output</p><p>=&gt; extraram state: 0 0xff ����������������<br>data : 0x3ffe8000 ~ 0x3ffe8902, len: 2306<br>rodata: 0x3ffe8910 ~ 0x3ffead44, len: 9268<br>bss : 0x3ffead48 ~ 0x3fff1b90, len: 28232<br>heap : 0x3fff1b90 ~ 0x40000000, len: 58480<br>Heap size: 30696<br>t0 task: 3fff89c8<br>t1 task: 3fff8b60<br>t4 task: 3fff90b8<br>t3 task: 3fff9700<br>t2 task: 3fffa450<br>mode : sta(a0:20:a6:00:f8:bd)<br>add if0<br>UART READY TO READ<br>AP1: , AP2: <br>first use<br> Station Ip:<br>scandone<br>Trying Rechenknecht, I: 0 status: 1<br>scandone<br>state: 0 -&gt; 2 (b0)<br>state: 2 -&gt; 3 (0)<br>state: 3 -&gt; 5 (10)<br>add 0<br>aid 6<br>pm open phy_2,type:2 0 0<br>cnt <br><br>connected with Rechenknecht, channel 7<br>dhcp client start...<br>ip:,mask:,gw:<br>autostart: playing:0, currentstation:0</p><p>then tried ping gives about 3 to 4 ms respond</p><p>the led is still not blinking</p><p>do i have to connect any hardware to the NodeMcu</p><p>or set any gpio low or high?</p><p>regards maik</p>
<p>It seems to work.<br>No need of the vs1053 to start the software.</p><p>Check uart commands</p><p>sys.led(&quot;x&quot;) : Change the led indication: <br> 0 = Led is in Play mode (lighted when a station is playing), 1 or up = Led is in Blink mode (default) </p><p>sys.led : Display the led indication status</p>
<p>It seems that you have a problem with the vs1053 connection.</p><p>Check the dreq wire.</p><p>Check without the vs1053 to see if it blinks.</p>
<p>Hi karawin,</p><p>i haven't connect anything yet.</p><p>the NodeMcu is standalone at this time, the vs1053 is not delivered yet.</p><p>so i have to test the firmware on the NodeMcu without any hardware connected. is this a problem?</p><p>the Hardware is use is NodeMcu devkit 0.9 05/12/2014</p><p>i also tested the upload/flashing with &quot;nodemcu firmware programmer&quot;, this also didn't work.</p><p>regards maik</p>
My mini Pro is@28800 and node MCU is@28800 but LCD still shows like this?<br><br>
<p>give your connection between both. It show nothing received.</p>
Hello,<br>Thank you for your reply<br>I have from 8266 to 3.3v Pro.<br>tx -rx<br>Gnd -gnd <br>Vu - raw<br><br>I've tried 5110 and oled, three different pro's and three different nodes.<br><br>I'm missing something, but can't figure what lol.
Seems to be the arduino pro's I have ? strange I see no bad solder etc. But true another and it's world as expected<br>IP address first then scroll playlist etc<br>Thank you for your help.<br><br>
Seems to be the arduino pro's I have ? strange I see no bad solder etc. <br>But tried another and it's works as expected.<br>IP address first then scroll playlist etc<br>Thank you for your help.<br>
<p>realy great job!!</p>
Thanks, enjoy.
<p>I got it running with NodeMCU. Great project!</p><p>Now I want to use a ESP8266 module with external antenna connector. I have a ESP-07 with 4Mbit flash. What is the minimum flash size for this project?</p>
<p>May be this one: </p><p>http://www.ebay.com/itm/WEMOS-D1-Mini-Pro-16M-Bytes-External-Antenna-Connector-ESP8266-WIFI-IoT-Board-/311708369211?hash=item489344413b:g:u8kAAOSwmfhX69zF</p>
<p>This one is perfect for you</p><p>https://www.aliexpress.com/item/D1-mini-Mini-NodeMcu-4M-bytes-Lua-WIFI-Internet-of-Things-development-board-based-ESP8266-by/32699164693.html?spm=2114.01010208.3.349.QqJ8Ky&amp;ws_ab_test=searchweb0_0,searchweb201602_4_10065_10068_10000032_119_10000025_10000029_430_10000028_10060_10062_10056_10055_10000062_10054_10059_10099_10000022_10000012_10103_10000015_10102_10096_10000018_10000019_10000056_10000059_10052_10053_10107_10050_10106_10051_10000053_10000007_10000050_10084_10083_10118_10000047_10080_10082_10081_10110_10111_10112_10113_10114_10115_10037_10033_10000041_10000044_10078_10079_10077_10000038_429_10073_10000035_10121-10050,searchweb201603_10,afswitch_2,single_sort_3_default&amp;btsid=d394f7ef-fd90-4875-b4b4-0b9a84ab2725</p>
This project is done for a 32Mbit (4MBytes).<br>A bin is actually 393216 bytes. Two banks are used for ota.<br>I don't have tried to link for a 4Mbit esp8266 but with all other files, it seems to small. <br>may be with a 8Mbits?<br>
<p>Do I have to compile it new for a 8Mbit device (ESP-100)?</p><p>What adresses I have to put in the flash tool?</p><p>Thanx</p>
<p>I can try to link for a 16Mbits</p>
<p>Is there any special format required for the radio stations list file?</p>
<p>The file is a list of json strings:<br>IE:</p><p>{&quot;Name&quot;:&quot;Europe1&quot;,&quot;URL&quot;:&quot;e1-live-mp3-128.scdn.arkena.com&quot;,&quot;File&quot;:&quot;/europe1.mp3&quot;,&quot;Port&quot;:&quot;80&quot;,&quot;ovol&quot;:&quot;14&quot;}</p><p>The file is generated when you do a Setting &quot;Save Stations fron WebRadio&quot; button.<br>It is not recommended to do this file with an editor. Simply fill the list in the interface with Edit , rearrange the sort by drag/drop if needed, then save it to your computer.<br>To reload it do a &quot;Restore Stations to WebRadio&quot;</p>
<p>One more question!</p><p>ESP8266 is not connecting to my hub. It did connect once, but now it's always in AP mode. </p><p>In boot up messages it says to &quot;check your static ip&quot;</p><p>Any clue here:</p><p><br>=&gt; extraram state: 0 0xff &yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;&yuml;<br>data : 0x3ffe8000 ~ 0x3ffe88d4, len: 2260<br>rodata: 0x3ffe88e0 ~ 0x3ffeac8c, len: 9132<br>bss : 0x3ffeac90 ~ 0x3fff1ad0, len: 28224<br>heap : 0x3fff1ad0 ~ 0x40000000, len: 58672<br>Heap size: 30888<br>t0 task: 3fff8908<br>t1 task: 3fff8aa0<br>t4 task: 3fff8ff8<br>t3 task: 3fff9618<br>t2 task: 3fffa368<br>mode : sta(5c:cf:7f:04:e9:78)<br>add if0<br>UART READY TO READ<br>AP1: BTHub5-NFGF, AP2:<br> Station Ip:<br>Trying BTHub5-NFGF, I: 0 status: 1<br>SCI_Mode (0x4800) = 0x4802<br>SCI_Status (0x48) = 0x4C<br>VS Version (VS1053 is 4) = 4<br>SCI_ClockF = 0xB800<br>I2S Speed: 0<br>plugin size 18ce 2 c67<br>plugin start: 7 1 8050 6<br>scandone<br>state: 0 -&gt; 2 (b0)<br>Trying BTHub5-NFGF, I: 1 status: 1<br>state: 2 -&gt; 3 (0)<br>state: 3 -&gt; 5 (10)<br>add 0<br>aid 4<br>pm open phy_2,type:2 0 0<br>cnt<br><br>connected with BTHub5-NFGF, channel 10<br>check your static ip!<br>Trying BTHub5-NFGF, I: 2 status: 1<br>Trying BTHub5-NFGF, I: 3 status: 1<br>Trying BTHub5-NFGF, I: 4 status: 1<br>Trying BTHub5-NFGF, I: 5 status: 1<br><br>state: 5 -&gt; 0 (0)<br>rm 0<br>pm close 7 0 0/20001334<br>Config not found<br><br>The default AP is WifiWebRadio. Connect your wifi to it.<br>Then connect a webbrowser to and go to Setting<br>Erase the database and set ssid, password and ip's field<br>del if0<br>usl<br>mode : softAP(5e:cf:7f:04:e9:78)<br>dhcp server start:(ip:,mask:,gw:<br>add if1<br>bcn 100<br>autostart: playing:1, currentstation:0<br>I2S Speed: 0<br>##CLI.STOPPED# from playStationInt<br>##CLI.NAMESET#: 0<br>##CLI.URLSET#:<br>##CLI.PATHSET#:<br>##CLI.PORTSET#: 0<br>##CLI.OVOLSET#: 0<br>##CLI.STOPPED# from clientConnect<br>##CLI.VOL#: 120<br>##CLI.STOPPED# from Adc Stop<br>##CLI.VOL#: 130<br>##CLI.VOL#: 140</p>

About This Instructable



Bio: Old retired engineer
More by karawin:Wifi Webradio With ESP8266 and VS1053 (KaraDio) 
Add instructable to: