ESP8266 web radio player, pt. 2

Napisano dnia 18.06.2016 r. o godzinie 11:28
Autor: Piotr Sperka


When I started the internet radio player project close to a year ago, I didn’t thought it would take a long time. Anyway, I’ve found some time to continue the work, so I invite you to the second part of the article.


The first thing, probably the most important one, is the making of a printed circuit board. It contains all the necessary components to run the device. So there is the ESP8266 module, the VS1053 decoder, as well as space for additional SRAM memory with the SPI interface. It is needed if you want to listen to high bitrate audio streams (eg. 320 kb/s). There is also space on the board for a possible buffer based on an operational amplifier, whose output is symmetrical to ground. To use it, however, you need to provide an additional -5V power supply. In my case, the concept of the device has undergone some modifications (more on that later), so I do not use it. If the second version of the PCB appears, it will probably be removed from it.

As far as the program is concerned, since the last article I have been working on improving the stability, as well as, for example, reading metadata from stream. I have also implemented support for external SRAM memory. Around April this year, the project was forked at Github by karawin and he contributed to improving stability of the program, and also significantly improved the user experience of the web interface. I took advantage of his changes in my code and now I can assume that the functions related to internet radio work correctly.

What’s next?

As I mentioned earlier, during the work I slightly changed the concept of the whole device. First of all, I want to use a display and an encoder to communicate with the user without using a web browser. The first concept assumed that it would be a system based on a microcontroller, which will be superior to ESP8266 (it will control it). Currently, I decided to implement something like a converter that allows the UART to control a 128 × 32 graphic display and read events from the encoder (rotation, pressing). ESP8266 will correspond for handling all events, as well as for displaying stuff on display.

The second issue is the extension of the device’s functionality with the possibility of receiving FM radio stations. As it is supposed to be an additional function, I have found that it is enough to use a simple to use RDA5807M module. Because it is controlled via the I2C bus, and in the ESP8266 module I do not have any more leads, I decided that the converter system used for the display and encoder will also perform I2C to UART conversion.


Currently, when I have free time, I’m working on the additional PCBs. After that, the program will be changed accordingly and the device will be ready. Then I will write the last part of the article with a detailed description of the construction and operation of the device. I plan to write the code in such a way that the device could work also without a “user interface” (display and encoder). The FM radio module will also be optional. If someone is not interested in these functions, the system in its present form is basically ready and fully functional. For more details on the development of the program, as well as full source code and diagrams, check my Github.