Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

Prosty odtwarzacz radia internetowego oparty na ESP8266

miszczo997 15 Wrz 2017 11:36 9783 13
  • Prosty odtwarzacz radia internetowego oparty na ESP8266
    Witam
    Chciałem przedstawić modyfikację projektu odtwarzacza internetowych stacji radiowych zbudowany jedynie przy użyciu modułu ESP-01, filtra RC oraz kilku elementów zewnętrznych.
    Hardware:
    Schemat oraz pcb zostało przygotowane w programie Eagle w wersji 7.7.0.
    Dekodowaniem strumienia mp3 zajmuje się mikrokontroler ESP8266 przetaktowany do prędkości 160MHz. Jako, że na wyjściu generuje sygnał PWM, gdzie samo PWM ma rozdzielczość jedynie 4 bitów konieczne było dołożenie filtra dolnoprzepustowego. Zastosowałem rozwiązanie zaproponowane przez użytkownika @tmf w którymś wątku w dziale mikrokontrolery. Jest to 3 stopniowy filtr RC co powinno dać spadek charakterystyki 18dB na oktawę, którego częstotliwości granicznej już nie pamiętam. Jako gniazdo zasilania dałem możliwość użycia złącza DC, złącza ark lub zwykłych goldpinów. Stabilizacją napięcia zajmuje się ams1117, lub podobny o tej samej konfiguracji wyprowadzeń.
    Prosty odtwarzacz radia internetowego oparty na ESP8266 Prosty odtwarzacz radia internetowego oparty na ESP8266

    Software
    Oprogramowanie to zmodyfikowany kod który był dostępny pod tym adresem:
    https://github.com/pvvx/mp3_decode
    Dodałem możliwość zmiany stacji radiowych przy pomocy klawiszy. Nie jest ona jednak do końca poprawna i posiada 2 bugi z którymi nie mogłem sobie poradzić:
    - podczas zmiany stacji, zanim połączymy się z kolejną odtwarzany dźwięk ulegnie zawieszeniu i w głośnikach będzie słychać brzęk.
    - w momencie, gdy przytrzymamy przycisk przełączania przez dłuższy czas układ się zresetuje.
    Reszta wydaje się działać jak powinna. Pliki ze zmodyfikowanym kodem programu umieszczam w załączniku.
    Uwagi:
    - Odtwarzacz potrafi zdekodować jedynie streamy mp3,




    - Do wyciągnięcia adresów typów,adresów oraz bitrate streamów używałem wireshark + foobar
    - Teoretycznie maksymalny bitrate to 256kb/s
    - Kompilacja programu odbywa się przy pomocy Eclipse+RTOS SDK, chcącym samemu dodać stacje radiowe oraz skonfigurować opcje połączenia sieciowego polecam zapoznać się z tym wątkiem.
    - Adresy i liczbę stacji definiujemy w pliku radiostation.c
    - Nazwę i hasło do sieci definiujemy w pliku playerconfig.c
    - W załączniku umieszczam także skompilowany program z nazwą sieci TPLINK oraz hasłem 1234abcd, gdzie dodałem stacje

    Code:

    RMF FM
    Duth radio(?)
    Maxima FM
    Radio Złote Przeboje
    VOX FM
    Radio ZET
    Polskie Radio PR1

    - Żeby wgrać program najlepiej skonfigurować eclipse i zrobić to z jego poziomu jednak na 100% można zrobić to przy użyciu innego narzędzia np ESP Flash Tool. Adresy pod jakie trzeba wgrać pliki trzeba samemu poszukać, bo sam wgrywałem jedynie z eclipse.
    - Podczas programowania podłączamy się konwerterem usb<=>uart do goldpinów wyciągniętych z boku płytki. Po zaprogramowaniu układu trzeba założyć zworkę pomiędzy RXD a wyjście. Musiałem użyć takiego rozwiązania ponieważ obciążona linia powodowała brak możliwości programowania. Aby przełączyć układ w tryb flashowania należy przytrzymać przycisk z rogu i dopiero podłączyć zasilanie.
    - Układ w czasie pracy pobiera 110mA
    - Jakość dźwięku jest dosyć słaba i nie nadaje się raczej do słuchania na słuchawkach. Ja u siebie uzyskałem znośną jakość podczas podłączenia do wieży Sony FH-411R i regulując odpowiednio ustawienia korektora.
    - Dostępna jest też wersja z użyciem DAC i zewnętrznej pamięci RAM pod tym adresem, jednak mi po kliku godzinach walki nie udało się tego skompilować. Gdyby ktoś się z tym uporał to proszę o jakiś opis.
    - Jeżeli ktoś ma jakiś pomysł jak na serwerze w locie konwertować AAC do mp3 to również proszę o informację jak to zrobić.
    - W załączniku wszystkie potrzebne pliki


    Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266
    Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266Prosty odtwarzacz radia internetowego oparty na ESP8266

    Tak to gra




    Pozdrawiam
    Paweł

    Załączniki:

    Fajne!
  • #2 15 Wrz 2017 13:52
    Tytus Kosiarski
    Poziom 14  

    Witam

    Dzięki za wskazanie mojego projektu:)

    Tak na szybko: czy u Ciebie moduł WiFi zamyka istniejące połączenie z serwerem radiowym przed nawiązaniem połaczenia z nowym, innym serwerem? Może to jest powodem tego brzęczenia w słuchawkach? W momencie nawiązania połączenia i rozpoczęcia odbioru z serwera odbierasz najpierw kilkaset bajtów danych tekstowych, dopiero potem leci strumień MP3.

    Klikam fajne:)

    Pozdrawiam, KT

  • #3 15 Wrz 2017 14:09
    miszczo997
    Poziom 27  

    Tytus Kosiarski napisał:

    Tak na szybko: czy u Ciebie moduł WiFi zamyka istniejące połączenie z serwerem radiowym przed nawiązaniem połaczenia z nowym, innym serwerem?
    Pozdrawiam, KT

    Dziękuję za komentarz :D
    Tak, zamykam połączenie. Domyślam się, że powodem brzęku jest pwm oparty o DMA i ciągle działający wątek dekodujący mp3 w tle. W momencie rozłączenia najpewniej dane z samplami dźwięku zawarte w tablicy cały czas wystawiane są na wyjście pwm przez dma i odtwarzane, aż połączenie nie zostanie nawiązane i nie zdekodowana zostanie kolejna seria sampli. Próbowałem zabijać wątek dekodowania mp3, ale po ponownym uruchomieniu już nie działało prawidłowo. Domyślam się też, że gdyby na sztywno w momencie wciśnięcia przycisku wpisać do bufora same zera to zostałoby to naprawione, ale nie za bardzo wiem jak to zrobić ze względu na wielowątkowość programu. Podobnie z przytrzymywaniem klawiszy, w obsłudze przerwania próbowałem wyłączyć całkiem scheduler i przy wyjściu go uruchamiać, ale program i tak się resetował. To jest moja pierwsza styczność z jakimkolwiek rtosem i nie do końca jeszcze rozumiem jak to wszystko dokładnie działa.

  • #4 15 Wrz 2017 15:29
    cziter15
    Poziom 8  

    Fajny i prosty projekt. ESP generalnie jest całkiem ciekawym mikrokontrolerem.
    Na płytce na pewno estetyczniej wyglądać będzie moduł w wersji ESP-12 lub ESP-06.

  • #5 15 Wrz 2017 18:55
    Tytus Kosiarski
    Poziom 14  

    Nie wiem, jakiego RTOS-a użyłeś, ale może może jest coś takiego lub podobnego, jak TaskSuspend i TaskResume? Poza tym, może warto spróbować po prostu wyłączać w odpowiednim wątku(tasku) podawanie PWM na pin modułu ESP, kiedy nie ma danych ze strumienia MP3. Serwer radiowy nie będzie robił translacji strumienia AAC na MP3, to po stronie odbiornika musi być możliwość dekodowania odbieranych strumieni.
    W moim radioodbiorniku użyłem dekodera AAC stąd: https://embdev.net/articles/ARM_MP3/AAC_Player

    Pozdrawiam, KT

  • #6 16 Wrz 2017 06:07
    mojomax
    Poziom 15  

    Ciekawe czy łatwo dałoby się uzyskać dźwięk stereo.

  • #7 16 Wrz 2017 07:16
    Galareta
    Poziom 20  

    Jak dobrze pamiętam to esp8266 ma i2s wiec można podłączyć DAC

  • #8 16 Wrz 2017 16:17
    krzysiek.b
    Poziom 10  

    Zaznaczam, że nie znam tego softu, ale przypuszczam, że jak to nazwałeś - zawieszanie się dźwięku, może być spowodowane tym, że w buforze wyjściowym (pewnie ring-buffer) zostają ostatnio zdekodowane próbki i są odtwarzane w kółko. Być może wystarczy wyczyścić ten bufor przy zmianie stacji.

  • #10 17 Wrz 2017 12:00
    Galareta
    Poziom 20  

    Lcd2x16 po i2c by mógł bardzo zmarnować zasoby;) chyba lepiej jakiś graficzny OLED.

  • #12 17 Wrz 2017 12:05
    Galareta
    Poziom 20  

    No 10zł oled na Ali. Idzie i2c ale ładnie się go ogarnia po DMA.

  • #14 17 Wrz 2017 23:32
    Galareta
    Poziom 20  

    To TFT 2,4 cała, jest mniejszy ale więcej tekstu się na nim mieści, 4 linijki na 128x32 - 0.91' albo 8 na 0.96 128x64. Tak da się taki tekst spokojnie czytać. Wyświetlacz na i2c 2x16 zajmuje strasznie procesor. Chyba, że testowałem. OLED ślicznie świeci. 2.4' TFT kosztuje coś około 25zł. Z ESP nie mierzyłem zajęcia takim TFT. Porównywałem tylko 2x16 z 128x64 OLED i wygrał ten drugi. Trzeba by dodać jakiś procesor do obsługi tego wyświetlacza 2x16 np AVR tini.

 Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME