Интернет радио из доступных комплектующих

Тема в разделе "Глядите, что я сделал", создана пользователем IvanUA, 15 мар 2021.

  1. IvanUA

    IvanUA Гуру

    В связи с модернизацией кухонного радиоприемника возникла необходимость очень быстро без особых вложений собрать интернет радио.
    Вот собственно подопытный)))
    [​IMG][​IMG]
    Понятное дело что вся внутряшка кроме трансформатора и кнопок была безбожно удалена. Идея взять готовый проект, залить и пользоваться - увы провалилась.
    1. Использовать ESP32 для такого проекта мне показалось слишком жирно. А ESP8266 - стала основным кандидатом. О чем я собственно сильно пожалел.
    2. В мой корпус идеально становился экран типа LCD1602. И тут тоже облом - нет готовых проектов с таким экраном(((.
    3. Кнопки - хотелось максимально сохранить функциональность существующих кнопок. И снова готовых проектов хоть как то подходящих под мои кнопки увы тоже не нашел.

    Основная проблема что в сети нет нормальных исходников интернет радио приемников. Есть кое что для ESP32, а вот для 8266 - увы все что не собирал страшно глючило. Причем когда заливал бинарники авторов, то о чудо они начинали играть нормально)))).

    Не буду расписывать все свои мытарства в познании этой темы, просто кратко поясню на что надо будет обратить внимание.
    Есть три варианта декодирования и воспроизведения потокового аудио.
    1. И самый простой, но в тоже время самый затратный по ресурсам. Аудио поток скачивается, декодируется, и преобразовывается из цифры в аналоговый сигнал (PCM) самой ESP. Обычно звук снимается с вывода RX и усиливается любым УНЧ. Очень не рекомендую данный метод использовать на ESP8266. Ее просто не хватает, и звук начинает захлебываться. Ну разве что вы будете воспроизводить. станции 32 или 64 кбит/с (самое плохое качаство). Кстати данный метод хоть и работает сносно на ESP32, но жрет практически все ресурсы. Так что об излишествах стоит подумать. Или когда используете излишества (к примеру веб интерфейс) то в это время лучше не декодировать звук.
    2. Золотая середина. Это к примеру функцию PCM (ШИМ) - поручить внешнему устройству. Я к примеру использовал PCM5102. Освободившуюся память можно к примеру использовать для декодирования потоков лучшего качества: 128 кбит, и при даже 192 кбита. Последние иногда но заикаются, так что я советую искать станции с качеством в 128кбит. У этого метода есть и свой недостаток. Кроме того что вам придется потратиться на сам модуль, так вы еще и задействуете 3 порта ESP. Но, есть и большой плюс - вы получаете более качественный контент + стерео звук.
    3. Дорогой, но самый качественный. Это не только ШИМ, но и декодирование потока переложить на внешний модуль. При чем вы получаете возможность декодировать потоки 320 кбит, и не только mp3, но и асс и друиге. Ну в общем какие кодеки (декодеры) зашиты в ваш модуль, те он будет так сказать "кушать". ESP в данном варианте выполняет только роль получателя аудио потока и передачи его на внешний модуль. В качестве такого модуля может быть использован модуль VS1053. Большим минусом так же можно считать то что, вам придется занять порядка 7 портов ESP.

    Ввиду всего выше изложенного для себя я пришел к такой схеме. ESP8266+PCM5102+PAM8403
    Опрос кнопок сделан через резистивный делитель и аналоговый порт.
    Приблизительная схема (max50a5).
    [​IMG][​IMG]
    Для работы конечно достаточно 4-х кнопок (канал +/-, громкость +/-) Но я задействовал еще и цифровые для 1-10 каналов (одинарное двойное нажатие) и кнопка MUTE.
    В памяти устройства я храню только последнюю станцию и громкость. Так же если 10-12 секунд не удается получить аудио поток, то станция переключается на следующую.

    Пути назад больше нет. Кнопки порезаны. Экран установлен.
    [​IMG][​IMG]

    На экран выводится при старте подключение к сети WiFi, а при проигрывании номер канала, уровень громкости, и информация об исполнителе и прочее что влезло в 16 нижних символов). Кстати экран не имеет кириллицы, по этому пришлось программно делать транслитерацию в латиницу)))

    В виду того что пришлось немного править библиотеку работы с аудио, весь проект собирался в PlatformIO. Это и к лучшему, не нужно подгружать доп библиотеки. Все уже есть в проекте.
    Вот ссылка где можно скачать исходник проекта https://drive.google.com/drive/folders/1SsEK8BgAOW7KEZ4hiSrZW3ALtSIvT5US?usp=sharing

    В проекте указываем свои данные WiFi и возможно свои ссылки на радио станции.
    Если вы таки хотите попробовать проект без внешнего модуля PCM то в трех местах меняем "AudioOutputI2S" на "AudioOutputI2SNoDAC".

    В любом случае - это не конечный проект, а только база для ваших собственных проектов.

    Меня пока устраивает как есть. Радио играет - что еще нужно)))
    Вот что получилось у меня.
    [​IMG][​IMG]

    Спасибо max50a5 за техническую поддержку, и ждем твоего варианта проекта)))
     
    Последнее редактирование: 15 мар 2021
    max50a5, big_alex, issaom и ещё 1-му нравится это.
  2. Airbus

    Airbus Радиохулиган Модератор

    Хорошая работа!
     
    IvanUA нравится это.
  3. SergeiL

    SergeiL Оракул Модератор

    А чем не устроил кухонный радиоприемник?
    Я дома, там где интернет по оптике, в плане интернет радио - перешел на Яндекс станции, они интерактивны, управляют домашним хозяйством.
    А на даче Grundig с DCF77 прекрасно работает!
     
  4. IvanUA

    IvanUA Гуру

    У меня панельный дом, да еще и стоит спиной к вышкам ФМ станций. Прием на штатную антену всю жизнь был от случая к случаю, то есть или слабо и шумит, или сильно шумит, или вовсе нет. Короче за последний год включался может пару раз и то без особого успеха. Интернет радио с телефона или бука не особо подходит. Надо было так что бы жена пришла на кухню. Кнопку нажала - радио играет. Не нравится контент - кнопку нажала играет другая станция. Я остановился на 14 станциях в памяти. Но по опыту последних двух недель, играют 3-4 основные. Их я и перенес в начало и конец списка)))
    Ну и очень нравится что станции пишут текущего исполнителя и название композиции если влезет в экран)))
     
  5. SergeiL

    SergeiL Оракул Модератор

    А у меня дочке бабушка подарила колонку Яндекс мини на новый год, дочка счастлива, с ней разговаривает, заказывает музыку.
    Открывает закрывает шторы, включает выключает свет в комнате, гирлянду на балконе.
    Одним словом работает!
    И все радиостанции.
     
  6. IvanUA

    IvanUA Гуру

    Вот интересно, а будет Яндекс колонка работать в Украине?
    ПС. Моей основной целью было сделать с минимальными затратами - можно сказать из того что есть и покупать не надо, радио на кухню. Которое бы играло и не икало, и репертуарчик можно было бы менять.
    ППС. Я этот проект выложил только по одной причине... Как только у авторов подобных проектов начинает получаться что то путное, они сразу же прячут исходники... Ну так то так))))
     
    max50a5, Deniskyn и Airbus нравится это.
  7. Deniskyn

    Deniskyn Гик

    Будет, vpn наше фсе)))) у меня работало)
    Согласен что репертуарчик часто менять не нужно, но это было бы удобнее делать из вебморды...
    По поводу исходников это да((( яркий пример тоже карадио...
    ПС
    Кстати как обучать пульт?
     
  8. issaom

    issaom Гуру

    Самое смешное, что какой то проект интернет-радиво для ESP32 валяется прямо в самой библиотеке для I2S. Сильно в подробности еще не вдавался, там кажись дисплей с тач-интерфейсом - можно спаять, залить и пользоваться.... Пример карадио горит лишь о том, что у людей проблема даже с программированием кнопок. Мне дак минут 10 понадобилось чтобы проиграть ссылку из интернет которая есть в примерах библиотеки.... А после этого весь остальной проект становится чуть сложнее проекта мигания светодиодиком.
     
    Deniskyn нравится это.
  9. IvanUA

    IvanUA Гуру

    Если вы о библиотеке ESP8266Audio - она работает и на ESP32 - то именно тот пример я взял за основу.
    Библиотеку немного поправил и увеличил буфер аудио что бы станции не заикались
    Код (C++):
    const int preallocateBufferSize = 12*1024;
    const int preallocateCodecSize = 29192; // MP3 codec max mem needed
    вместо 5*1024
     
    issaom нравится это.
  10. issaom

    issaom Гуру

    Не... я про эту библу
     
    IvanUA нравится это.
  11. IvanUA

    IvanUA Гуру

    Пробовал я ее на ESP32))) особенно порадовала ссылка на немецкую "волну"
     
    issaom нравится это.
  12. big_alex

    big_alex Гик

    Будет и даже без VPN.
    По сравнению с google home mini (на русском) пользоваться гораздо приятней.
    А радио я на Logitech Media Server слушаю
     
  13. SergeiL

    SergeiL Оракул Модератор

    Так на Яндексе сразу заявлено, что только русский язык.
    И по сравнению со всеми этими Сири, Гуглами, и Алексами, на порядок лучше в плане понимании русского.
     
  14. IvanUA

    IvanUA Гуру

    [​IMG][​IMG]
    Я вот об этом. Что большинство сервисов яндекса официально у нас не работают. Понятно что можно ВПН использовать и прочие ухищрения, но вопрос изначально было о том что бы взять существующее - плохо работающее FM радио
    [​IMG][​IMG]

    [​IMG][​IMG]

    и сделать из него нормально играющее радио - при минимальных вложениях.)))
     
    Airbus и issaom нравится это.
  15. Ariadna-on-Line

    Ariadna-on-Line Гуру

    А если взять исходник и переделать под свое железо ? Всё-таки вывод на дисплей попроще чем сетевые извращения. Придется максимально упростить "картинки". Но звук радио от этого хуже не станет.
     
  16. IvanUA

    IvanUA Гуру

    Исходники что мне попадались были очень сырые и качество не айс. А если хорошее качество звука, то увы исходников не было.
    Ну как бы то там ни было, я получил хороший опыт.
     
    Deniskyn и spazmalgon нравится это.
  17. RealArty

    RealArty Нерд

    Иван. Прежде всего, спасибо за Ваши разработки и исходники, это сейчас редкость. У меня есть исходники едзефа на esp32 и вэеске с дисплеем 1602 с поддержкой латиницы . Название песен на русском победил чтоб выводило, а название станций чтоб бралось из списка тыркался, пыркался и забросил пока. С удовольствием могу скинуть, вы голова, может пригодится Вам.
     
    IvanUA и Deniskyn нравится это.
  18. IvanUA

    IvanUA Гуру

    Добрый день. Кидайте, время будет посмотрю))))