Napisano dnia 10.08.2015 r. o godzinie 9:00
Autor: Piotr Sperka
Około rok temu pracowałem nad odtwarzaczem radia internetowego (SHOUTcast). Wtedy realizowałem go na zestawie STM32, VS1053 jako dekoder MP3, OGG, itp. oraz ENC28J60 do połączenia z siecią LAN. Projekt ten doprowadziłem do działania, jednak nigdy nie wyszedł poza prototyp złożony na płytkach prototypowych. Stało się tak głównie z uwagi na jego największą wadę – konieczność połączenia z siecią poprzez kabel.
Kilka miesięcy wstecz dowiedziałem się od kolegi o ciekawym układzie – ESP8266. Dostępny jest on w postaci niewielkich modułów składających się z mikrokontrolera, pamięci i innych niezbędnych do działania elementów. Układ ten posiada wbudowane peryferia do obsługi sieci WiFi, a co więcej, jego producent dostarcza SDK składające się z wszystkich potrzebnych składników umożliwiających stosunkowo proste pisanie na niego programów. Standardowo do układu wgrane jest oprogramowanie umożliwiające obsługiwanie go poprzez komendy AT. Największą jednak jego zaletą jest niska cena – około 25zł. Początkowo byłem do niego nieco sceptycznie nastawiony, jednak z uwagi na cenę zakupiłem jeden do eksperymentów i bardzo miło się zaskoczyłem. Moduł działa bardzo stabilnie, jest do niego dostępna duża ilość różnego alternatywnego oprogramowania, np. wspierającego język skryptowy LUA. Jednakże największa siła ESP8266 tkwi w dostarczonym SDK, gdyż w krótkim czasie można napisać sprawnie działające oprogramowanie. Do zaprogramowania modułu nie potrzeba żadnych specjalnych narzędzi, gdyż posiada bootloader umożliwiający programowanie poprzez UART. Testowany przeze mnie układ miał wtedy w zasadzie jedną zasadniczą wadę – mało wyprowadzeń. Posiadał tylko UART w najprostszej postaci (Rx i Tx) i chyba 2 GPIO. Biorąc pod uwagę moje wcześniejsze testy postanowiłem wskrzesić projekt odtwarzacza radia internetowego, jednak tym razem korzystający z sieci bezprzewodowej.
W pierwszym wariancie układ miał być konfigurowany poprzez UART i następnie tą samą drogą odsyłać dane do mikrokontrolera STM32, który zajmować się miał ich buforowaniem i przesyłaniem do układu VS1053, a także obsługą interfejsu użytkownika (LCD, itd.). Wykonałem nawet prototyp układu, jednak z uwagi na brak kontroli przepływu przez UART, konieczne by było stosowanie bardzo dużych pamięci buforujących i pojawiały się problemy przesłaniem jakichkolwiek innych danych (np. metadanych stacji) podczas odtwarzania. Wtedy też ponownie porzuciłem projekt.
Nieco później pojawiły się w sprzedaży nowe wersje modułów – ESP-07 i ESP-12, posiadające już nieco więcej wyprowadzeń, w tym sprzętowe SPI, co otwarło nowe możliwości. Postanowiłem pozbyć się z projektu mikrokontrolera STM32, a dane do dekodera VS1053 przesyłać poprzez SPI bezpośrednio z układu ESP8266. Obecnie układ w wersji prototypowej gra, jednak nie posiada jeszcze wszystkich elementów, jak np. „sprzętowego” interfejsu użytkownika, który będzie się komunikował z ESP8266 poprzez UART, czy dołączonej pamięci EEPROM do zapisu stacji.
Na chwilę obecną zaimplementowana jest obsługa VS1053, działa prosty klient i serwer www do wyświetlania panelu administracyjnego. Sam panel posiada już działające najprostsze funkcje. W najbliższym czasie opublikuję ostateczny schemat urządzenia, natomiast powstający kod można zobaczyć na GitHubie. W kolejnych częściach artykułu opiszę więcej szczegółów oraz postępy z prac. Planuję także zamieścić tutorial na temat instalacji środowiska programistycznego dla ESP8266 pod linuksem, gdyż pomimo istnienia wielu poradników nie jest to takie oczywiste i proste zadanie. Na koniec standardowo – jeżeli masz jakieś pytania lub pomysły, napisz do mnie. Z chęcią się do nich ustosunkuję.
Zapraszam do drugiej części artykułu.
seems like i burned rx on esp-12e as it was not 5v tolerant
i manage to flash esp-01 and i therte was console output ons it connected to my wifi.
When i tryed to play custom url it reboots.
Which esp is suggested? and flash size? 512k or 4MB ?
what could be reason for :
reconnect
scandone
add 0
aid 1
cnt
rm 0
reconnect
scandone
add 0
aid 1
cnt
rm 0
reconnect
scandone
add 0
aid 1
cnt
……
it just repeats when tryed to play custom url
another error when trying play custom url:
Name: /instant_play
##CLI.STOPPED#
##CLI.URLSET#
##CLI.PATHSET#
##CLI.PORTSET#
Socket created
Socket connected
Fatal exception (28):
epc1=0x4000bf80
epc2=0x00000000
epc3=0x4000bf80
epcvaddr=0x00000000
depc=0x00000000
rtn_add=0x40002ad0
ets Jan 8 2013,rst cause:1, boot mode:(3,0)
load 0x40100000, len 1396, room 16
tail 4
chksum 0x89
load 0x3ffe8000, len 776, room 4
tail 4
chksum 0xe8
load 0x3ffe8308, len 540, room 4
tail 8
chksum 0xc0
csum 0xc0
2nd boot version : 1.4(b1)
SPI Speed : 40MHz
SPI Mode : QIO
SPI Flash Size & Map: 32Mbit(512KB+512KB)
jump to run user1 @ 1000
got esp-7 with 32mbit flash, flashed bin from github, connected to wifi and played sample from readme: ant-kat-01.cdn.eurozet.pl.
On my router i see that there is active connection to ESP so i belive it receives stream, also on web interface it shows radio info.
But unfortunately there is no sound on vs1053 module output.
i have verified that vs1053 gpio0 and gpio1 is pulled down thought 100k resistor. also vs1053 module works ok with arduino
vs1053 bought here http://www.ebay.com/itm/New-Style-MP3-Module-Development-Bard-on-board-recording-function-VS1053-/200943426218?hash=item2ec9295aaa
and works ok with arduino project from here: http://www.serasidis.gr/circuits/Arduino_WebRadio_player/Arduino_WebRadio_player.htm
i checked wiring many times but still no luck
one more thing….
on your chematic on esp gpio15 is connected directly to xcs of vs1053.
does gpio15 have to be pulled down to ground on esp?
it works, i was going through your schematic and source code and found that in schematic you incorrectly swapped esp gpio’s 4 and 5 while on vs1053.h it’s defined:
#define XDCS_PIN 5 //GPIO5 (!)
#define DREQ_PIN 4 //GPIO4 (!)
so i swapped those 2 cables on my breadboard and now sound is coming out.
my vs1053 board by default is missing a trace or resistor to make it play mp3’s. The board boots the VS1053 chip in midi mode. To force it boot into mp3 mode it is necessary connecting pin 33 and 34 together. example shown in pic:
http://www.bajdi.com/wp-content/uploads/2013/06/LCsoft-VS1053-MP3-module.jpg
i soldered pins together and board booted into mp3 mode. But i did not liked this solution as it involves soldering and hardware modification.
So solution was to do changes in software: vs1053.c
ICACHE_FLASH_ATTR void VS1053_Start(){
VS1053_ResetChip();
// these 4 lines makes board to run on mp3 mode, no soldering required anymore
VS1053_WriteRegister(SPI_WRAMADDR, 0xc0,0x17); //address of GPIO_DDR is 0xC017
VS1053_WriteRegister(SPI_WRAM, 0x00,0x03); //GPIO_DDR=3
VS1053_WriteRegister(SPI_WRAMADDR, 0xc0,0x19); //address of GPIO_ODATA is 0xC019
VS1053_WriteRegister(SPI_WRAM, 0x00,0x00); //GPIO_ODATA=0
while(VS1053_checkDREQ() == 0);
…….
i disconect pin 34 from 33 and software mod did the trick.
Własnie tego szukałem od dawna!!!!
Jest wiele projektow nawet z softwerowym mp3 ale ja chcialem to podłaczyc do vs1053 ze wzgledu na jakosc dzwieku .Znalazlem na ruskiej stronce dzialajcy soft z oledem na ssd1306 ,jednak bez bufora tnie mimo dobrego neta.Probowalem tez na avrku z enc28j60 działa ale wole cos bezprzewodowo ;)Fajnie by bylo tez z lcd np.ls020 ,kolorowy il lub zwykly hd44780 .Goraco Pozdrawiam !!!!
Hi peter.Great project.
I have esp-12 with 512kB flash,all working but playing only 10sec max..where is the problem??I am using your final bin
Witam.Mógłbyś zamieścić schemat układu w pdf gdyż brakuje mi niektórych bibliotek w kicad i nie mam pełnego schematu
Hello Peter!
Really great work, i have one question: is it possible to use your code with the PWM-Hack like espressif did? https://github.com/espressif/ESP8266_MP3_DECODER
https://github.com/pvvx/mp3_decode
There is no need of audio decoder. The RX-Pin outputs an PWM that can be filtered with an RC components and you have sound…. and in my opinion great quality!
https://www.youtube.com/watch?v=XIneZEfahmQ
I use the code from espressif on my ESP12E but your solution with the webinterface is better, because you can change the stream-url without to flash new binary.
Is it possible that you compile one version with the espressif (https://github.com/espressif/ESP8266_MP3_DECODER) code and with your configuration webserver? Please give it a try
Best regards
this code from espressif with PWM/Delta-Sigma and your webserver (maybe one button to switch the radio stations) would be really great!
see my example video https://www.youtube.com/watch?v=0x3uky_B_20
i used source from https://github.com/pvvx/mp3_decode
Witam
zastanawiam się czy nie da się zrobić tego bez vs1053.
Jest on stanowczo za drogi więc czy da się jakoś zrobic radio internetowe po wifi bez tego układu
Hi,
I made some minor improvements on your great project.
Added m3u and pls redirection, stability and many little upgrade.
https://github.com/karawin/ESP8266-WebRadio
Thanks
Could you please provide a schema with pin connections so that it will be more obvious which pin from ESP8266 should be connected to VS1053 module?
Thanks in advance.
i didnt wanted to disturb you again in github…
this time i hooked up ESP8266-12e with VS1053 (same board as in your pic).
and again no luck. In app/user/user_main.c i changed:
UART_SetBaudrate(0,115200);
sprintf(config->ssid, „xxxx”);
sprintf(config->password, „xxxx”);
compiled without errors:
!!!
Support boot_v1.4 and +
Generate user1.4096.new.6.bin successully in folder bin/upgrade.
boot.bin————>0x00000
user1.4096.new.6.bin—>0x01000
!!!
using ./flash.sh boot and bin is flashed. Rebooting ESP and nothing on serial and nothing on my wifi acces point (does not trying to connect to wifi)
rechecked all wires, esp connected to 3.3v and vs1053 to 5v.
both modules works, esp was checked with LUA and Arduino IDE, also vs1053 is working fine when coonected to my different arduino mp3 player.
Any ideas?