For a long time I was thinking about designing my own "radio" capable of receiving on-line audio streams rather than standard radio waves. Idea of designing and building such device felt a little bit reminiscent of "simpler times" when I was a kid building simple radio receivers to listen local stations on them. Also, when it comes to customer electronics I prefer devices designed to do one particular thing. Sure - universality of modern PC, smartphones and tablets is great. But I prefer to use TV to watch movies, console is my device of choice when it comes to playing video games and I like to listen to music on stereo system.
Unfortunately before Chromecast Audio listening to internet audio streams on stereo wasn't easy. Yes - theoretically you could connect a phone or computer to AUX input, but it contradicted the idea of one device doing one thing well and conveniently. Of course for some time there were stereo systems (or even simple radio receivers) capable playing streams from the Internet. Unfortunately after doing some research I discovered many of them share significant drawback - relying on dedicated server to work. If manufacturer ever decides to shut down the server, functionality will no longer be available. Common problem of modern times of products being secretly just a services.
I decided to design and build such a device. First approach was rather straightforward - I decided to use a Raspberry Pi and MPD to play files and streams. That's how eMPeDocles project was born. At this point it was just for fun, as Chromecasts Audio and other similar devices were widely available. Basing device on Linux computer opened some interesting possibilities, but also had it's own set of drawbacks, like long boot time and relatively high power consumption for what was just a music player.
I decided to try yet another approach. Few years ago I began designing prototype board with PIC24FJ265DA210 microcontroller, VS1053 decoder chip and ENC28J60 Ethernet controller. When board was completed, to my dismay I discovered that despite MCU I used has plenty of RAM, most of it is not directly mapped to the address space and requires using special commands to access large part of it. This would force me to modify some libraries I was using.
Additionally microcontroller turned out to be a little bit too slow for playing audio streams from the internet. Main clock running at 32 MHz allowed me to set up max SPI frequency of 16 MHz, at which ENC28J60 was struggling to pass all of the data of some audio streams in time. Low quality radio streams - no problem, but trying to play better ones resulted in choppy audio. It became clear that upgrade was necessary..
I decided to upgrade MCU witch much better and more powerful PIC32MX795F512. Initially new version of a board was still using ENC28J60 as its gateway to the world. I knew new MCU has integrated Fast Ethernet MAC. I was curious if I will be able to use it with external PHY, on my homemade PCB. So I began redesigning board once again. It turned out that integrated Ethernet works fine.
With final hardware revision complete and mounted inside metal enclosure, I was finally able to focus on writing software. This is still ongoing project, but for now device does the most important thing - it plays local audio files and streams from the internet. Still much remains to be done: I need to write proper user interface + some webUI and remove some bugs.