ESP8266 based web radio using esp-open-rtos/libmad
This project aims to build a webradio based on the ESP8266. The goal is to make
it controllable via touchscreen.
This respository and the entire project is very much work-in-progress…
The incoming encoded audio stream is buffered in an external SPI RAM. The ESP8266
has two hardware SPI controllers: SPI0 (aka SPI) and SPI1 (aka HSPI). The ESP-12F
module that is used here uses SPI0 for accessing the SPI flash memory that holds
the program data. Here, HSPI is used for accessing the SPI RAM. Since the pins
that are regularly used for HSPI will be used for talking I2S to the audio DAC,
SPI0 and HSPI are configured in overlap mode. That means, that they share the same
pins (except for the CS line). There is an arbiter that selects which SPI controller
gets to access the pins. The SPI RAM device here is a 23LC1024 which has a capacity
of 1 Mbit. Both the ESP8266 and the 23LC1024 support Quad SPI where all data lines
(SIO0..3) are bidirectional, so 4 bits are transferred in every clock cycle.
The audio DAC that is used here is the WM8731. The audio data is transferred using
I2S via the I2S controller that is built into the ESP8266. The configuration of
the DAC is performed via I2C. Even though the ESP8266 contains an I2C controller,
it is not used here, because the pins were not available. Since the WM8731 comes
with a microphone interface, it is included together with the reverse I2S direction.
The display that is used here, is a MI0283QT 240x320 color LCD. Infos about the
adapter board that molds a touchscreen controller as well, can be found
here. Both the LCD controller and
the touchscreen controller are also sharing the same SPI pins as the SPI flash and
the SPI RAM. Both are controlled by the HSPI controller. The LCD uses a hardware
CS, but for the touchscreen controller, there was no more hardware CS available
that is not used for anything else. Hence, GPIO16 is used as the CS line for the
touchscreen controller.
To build the software, follow the instructions in the
open-esp-webradio repository to
install the required toolchain. Then simply run make
or make flash
,
respectively, to compile or flash the image. The WiFi credentials should be
supplied via the file ./esp-open-rtos/include/private_ssid_config.h
.
Inspired by ESP8266_MP3_DECODER,
this project builds upon the following components:
This project is licensed under the terms of the GNU GPLv3, see LICENSE.md.