АУДИО Интернет-радио microMedia на ESP32-S3

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
Интернет-радио + аудиоплеер + часы-будильник с боем и курантами на ESP32-S3

radio0.jpg

Устройство обладает следующим функционалом:
1. Может работать с практически неограниченным списком радиостанций. Причём переключение между станциями происходит мгновенно.
2. Управление радио осуществляется и элементами управления на самом радио, и через web-интерфейс, и через ИК-пульт.
3. Точно так же как и в смартфоне (планшете) организовано подключение радио по wi-fi к интернету. Сохраняются все ранее использованные точки доступа и при повторном попадании прибора в зону их действия соединение с интернетом не требует повторной авторизации.
4. Радио имеет три режима работы: интернет-радио, часы, музыкальный проигрыватель.
5. В режиме музыкального проигрывателя осуществляется воспроизведение звуковых файлов с sd-карты. Пока реализована вложенность папок с аудио-файлами равная единице.
6. В режиме интернет-радио можно фильтровать весь список радиостанций по двум параметрам: жанр (20 жанров) и локация (6 локаций).
7. И в режиме радио, и в режиме проигрывателя поддерживается дополнительный маркер "избранное".
8. Реализована очень полезная функция - автоматический уровень громкости, которая выравнивает громкость звучания разных интернет-станций.
9. В web-интерфейс встроен простой редактор списка радиостанций, который позволяет управлять списками станций в самом устройстве.
10. Проверен и введен по умолчанию список из более 4 000 интернет-станций с указанием их жанра и локации.
11. Разработано и вшито в прошивку 6 цветовых схем интерфейса экрана интернет-радио.
12. Реализовано управление яркостью экрана интернет-радио.
13. Реализован режим энергосбережения (выключения подсветки экрана).
14. Реализованы функции выключения и включения по заданному времени.
15. Реализованы куранты часов (каждый час, каждые пол-часа, каждые 15 и 45 минут). Можно установить один из 7 типов звучания курантов или выставить озвучивание текущего времени голосом.
16. Для людей с плохим зрением реализовано озвучивание меню управления интернет-радио голосом.
17. В режиме радио реализована функция анализа качества связи с интернет-станцией и восстановление соединения при критичном ухудшении или потери связи с сайтом радиостанции.
18. Реализована блокировка/снятие блокировки нажатия кнопок и вращения энкодера - полезная опция для интернет-радио в карманном исполнении.
19. Реализованы функции "случайная радио-станция" для режима радио и "случайная композиция" для режима аудиопроигрывателя.

Компоненты, необходимые для сборки:
1. Модуль ESP32-S3 (обязательный элемент). Тестировалось на модуле ESP32-S3 Dual USB разработки AITEXM ROBOT.
2. Модуль DAC PCM5102 (обязательный элемент).
3. Дисплей 1.8 TFT SPI 128x160 with sd-card reader - ST7735 TFT (обязательный элемент).
4. Энкодер с кнопкой (обязательный элемент).
5. Модуль усилителя НЧ LM4881 или любой подходящий аналог (факультативный элемент).
6. Инфракрасный беспроводной модуль дистанционного управления HX1838 (TL1838) с пультом (факультативный элемент).
7. Транзистор 2N3906 или аналог (если хотите регулировать яркость дисплея).
8. Три резистора 1кОм.
9. Выключатель питания.
10. Разъём внешнего питания type-c (мама).
11. Один - два аудио-разъёма 3.5 стерео (мама).
12. sd-карта не более 32 Гб.

Порядок сборки, прошивки и настройки.

1. Соберите устройство, согласно приложенной принципиальной схеме.
2. Скачайте и распакуйте архив скетча. (Избегайте кириллических символов в путях к скетчу и библиотекам).
3. В Arduino IDE откройте файл InternetRadio.ino.
4. Установите в настройках Arduino IDE свою плату ESP-32.
5. Установите в пункте настроек "Partition scheme" опцию "Huge App" и остальные параметры, согласно прилагаемому скриншоту:
ide05.jpg
6. Перед компиляцией скетча обязательно:
- в папку библиотек Arduino\libraries\Adafruit_GFX_Library перепишите файл glcdfont.c из архива скетча.
- туда же обязательно перепишите из архива скетча папку FontsRus, даже если не планируете использовать.
7. Попробуйте скомпилировать скетч. При отсутствии необходимых библиотек доустановите их из среды Arduino IDE. (Рекомендованные версии библиотек смотрите в отдельном списке ниже данной инструкции).
8. На предварительно отформатированную в FAT32 sd-карту запишите содержимое архива папки SD-card.
9. Вставьте sd-карту в слот на модуле дисплея.
10. Теперь всё готово для заливки прошивки в ESP-32. Загрузите скетч на плату.

Если всё сделано правильно, то:
1. При включении в wi-fi радио объявляет себя как "microMedia".
2. Первым делом смартфон нужно подключить к этой сети. Пароль: 12345678.
3. Далее открыть в браузере адрес 192.168.4.1 и там уже настроить соединение интернет-радио с интернетом.
Выберите ваш роутер из списка и введите пароль доступа. В случае успеха вы услышите первые звуки интернет-трансляции первой станции из большого списка станций.
4. После чего для управления интернет-радио через web-интерфейс необходимо узнать ip-адрес самого устройства в сети. Для этого достаточно нажать один раз кнопку BUTTON и в нижней части всплывшего на дисплее окошка с меню посмотреть и вбить в адресную строку web-браузера вашего компьютера (планшета, смартфона) отображаемый ip-адрес.

Принципиальная схема
schemas.png

(Контроллер зарядки и питания устройства на принципиальной схеме не изображены).

Архив скетча, шрифтов для дисплея и содержимое sd-карты
59.4 Mb в zip-архиве

Arduino IDE и необходимые библиотеки
Скетч успешно компилировался на Arduino IDE версий 2.0.9 и 2.3.3.


ESP32-audioI2S-master (https://github.com/schreibfaul1/ESP32-audioI2S) - версия 2.0.0
GyverEncoder (https://github.com/GyverLibs/GyverEncoder) - версия 4.10
GyverButton (https://github.com/GyverLibs/GyverButton) - версия 3.8
IRremote (https://github.com/Arduino-IRremote/Arduino-IRremote) - версия 3.5.0 - критично. На более высоких версиях будут ошибки компиляции.
Adafruit GFX Library (https://github.com/adafruit/Adafruit-GFX-Library) - версия 1.11.9 (Если с этой версией вместо русских букв "козябры", то используйте версию 1.11.0).
Adafruit ST7735 and ST7789 Library (https://github.com/adafruit/Adafruit-ST7735-Library)- версия 1.10.4
GyverPortal (https://github.com/GyverLibs/GyverPortal) - версия 3.6.6
ESP32Time (https://github.com/fbiego/ESP32Time) - версия 2.0.5
NTPClient от Fabrice Weinberg (https://github.com/arduino-libraries/NTPClient) - версия 3.2.1

(вверх)(вниз) - в режимах "Радио", "Проигрыватель" и "Часы" - увеличение / уменьшение громкости; в меню - перемещение курсора по вертикали
(вправо)(влево) - в режимах "Радио", "Проигрыватель" и "Часы" - переключение станций или композиций; в меню - перемещение курсора по горизонтали или включение/выключение опций
(OK) - главное меню и подменю
(*) - смена режима между "Радио" и "Проигрыватель"
(#) - включение выключение звука
(1) - часы или радио / проигрыватель
(2) - переключение между списакми "Избранное" и "Всё" для радио и проигрывателя
(3) - случайная станция радио / случайная композиция проигрывателя
(4) - смена жанра назад
(5) - все жанры
(6) - смена жарна вперёд
(7) - смена локации радиостанции назад
(8) - все страны
(9) - смена локации радиостанции вперёд
(0) - включение / выключение

Версия 2 интернет-радио:
radio01.jpg

Версия 1 интернет-радио:
radio02.jpg

radio03.jpg

web01.jpgweb02.jpgweb03.jpgweb04.jpgweb05.jpgweb07.jpgweb08.jpgweb09.jpg

Обзор 1-й версии интернет-радио

Обзор 2-й версии интернет-радио

Мной были разработаны и собраны два устройства. Ещё одно в рамках тестирования было собрано участником форума samand587.

Радио очень не хватает индикации заряда аккумулятора. В этой версии руки для решения этой задачи у меня не дошли.
Однако, в спец-шрифте mMediaSymbols.h, специально разработанном для этого проекта, пиктограммы для состояния заряда аккумулятора были мной отрисованы.
0x30 - соответствует символу "0" - батарея разряжена
0x31 - соответствует символу "1" - 25% заряда
0x32 - соответствует символу "2" - 50% заряда
0x33 - соответствует символу "3" - 75% заряда
0x34 - соответствует символу "4" - 100% заряда
Пример кода:
      tft.setFont(&mMediaSymbols);
      tft.setTextSize(1);
      tft.setCursor(133, 0);
      tft.setTextColor(radio_color[1]);
      // Пиктограмма состояния заряда аккумулятора
      tft.print("1");  // 0,  1, 2, 3, 4
Место для размещения индикации на экране есть - верхний правый угол.
Если кто-нибудь возьмёт на себя труд доработать схему и скетч - буду несказанно рад.

Буду признателен за конструктивную критику, указания на ошибки (куда ж без них!), сообщения об успешных повторах устройства с фотографиями ваших реализаций и прочее. Спасибо за внимание!
 

Вложения

Изменено:

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@iponkada2,
Да, забыл описать порядок действий с mp3-файлами.
1. Файлы должны быть в отдельных папках, названия которых можно давать как по-английски, так и по-русски, например: "Кино", "Led Zeppelin", "Русские народные песни".
2. Папки с музыкальными файлам должны быть помещены на sd-карту в папку Music. Вложенность папок пока не более 1. Т.е., если в папку "Кино" вы поместите папку "Звезда по имени Солнце", то файлы в этой папке проигрываться не будут. В будущих версиях планирую снять это ограничение.
3. После записи/обновления музыкальных файлов на sd-карте обязательно через меню настроек приёмника или через соответствующее меню в web-интерфейсе произведите индексацию содержимого папки Music.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@Олег Поляков, за бинарник спасибо.обязательно повторю Ваш проект .братья навек уже отправили с3.в дороге уже.Очень понравились шрифты(с душой сделано и это правда) много интересных фишек.хотя уже и не знаю как я буду жить без opus и vorbis декодеров))).правда ни разу станций с таким форматом не всречал, но всё жё..и я думаю Вы наверно уже догадались почему произошел косяк со ссылкой на аудио..
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@Olegsan, спасибо за добрые слова и за проявленное восхитительное упорство, которое позволило разобраться (хотя я до сих пор сам не понял как) с непредвиденными коллизиями, коими полон мир ардуино.
Очень надеюсь, что радио соберётся у вас из скетча. Всё-таки открытый код - это прекрасная возможность доделать, докрутить разработку под себя, под свои желания, под свои идеи.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@Олег Поляков, аудио-библиотека и2соунд написана Вашим товарищем -не товарищем Волле под определённый проект ё-радио -который и собирается по вебке и всё время обновляется, поэтому имеет полный набор всех библиотек на борту,согласно конструктора.и поэтому ссылки по сборки ё-радио работают постоянно может быть пока(нет ничего постоянного) , а Ваша ссылка годичной давности просит библиотеку ,которая.....вернее не ссылка а скетч просит библиотеку которая год назад была актуальна ..кстати в рабочей библиотеке написано -обновление 29 июля 2024 и она рабочая. и 2.0.0 всё корректно для Вашего проекта... а насчёт открытого кода...есть обижаются.ладней как то попросить автора......наверно опять наверно хрень никому не понятную написал((
 
Изменено:

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
39

@Olegsan,
Таки да, ясно изъясняться не Ваш конек. Волле пишет библиотеку под свой проект, а Ё только недавно перешло на последнюю библиотеку.
@Олег Поляков при выборе локации или жанра вэб пишет девайс оффлайн это так задуманно? Полностью я ещё не собрал все компоненты и сижу гадаю из-за этого ли почти любое действие перезагружает радио. Как разработчик Вы знаете все косяки-недоработки, можете их перечислить.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@Olegsan, возможно некоторые пояснения с моей стороны внесут ясность.
1. У меня не стояло задачи соревноваться с каким-либо другим проектом интернет-радио. Мне было интересно как программисту написать своё радио.
2. Я бы не стал выкладывать исходники в открытый доступ, если бы меня об этом не попросили несколько человек, которых неожиданно для меня заинтересовала очередная реализаця на тему из длинного ряда уже сделанных устройств интернет-радио.
3. Интернет-программированием занимаюсь аж с начала 90-х. Но никогда бы не стал тратить время на задачи, которые мне не интересны. Радио - да, интересно. Web-конфигуратор для сборки бинарников для этого радио, на мой вкус, - утилитарная, скучная задача. Не скучно, например, писать и развивать более 10 лет такие вещи: https://fv.memorandum.ru/
Все очень и очень индивидуально.
 
  • Лойс +1
Реакции: iponkada2

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@iponkada2, "off-line" пишет интерфейс web-библиотеки Алекса Гайвера когда теряет связь устройства с web-браузером. Это нормальная ситуация, вызванная выполнением трудозатратных процедур скетча ардуиной.
Два устройства, которые я собрал перед тем как выложить проект в публичное пространство, работают стабильно. Бывают случаи самопроизвольной перезагрузки системы, но они крайне редки.

Из недоработок:
  • по непонятным мне причинам на sd-карте не удаляются bak файлы (временные файлы), что, впрочем, не влияет на работоспособность, а лишь портит мне настроение. :)
  • хочу доработать списки радиостанций добавлением в них поля "название станции", чтобы можно было: а) сделать поиск по названию; б) отображать станции вещания списком из названий станций.
  • увеличить вложенность папок с музыкальными файлами для аудиоплеера. Сейчас, как писал выше, вложенность не более 1.
 
Изменено:
  • Лойс +1
Реакции: iponkada2

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@Олег Поляков, 1крайне не хотел Вас обидеть-приношу извинения 2 это Ваше желание и право 3 я Вас постарше -со всеми вытекающими правда интернет у меня появился в начале 2000 и то адсл(блин в другой стране живу) а так в 90 тока адаптер апд видел дремучий я ... пы сы извините Вы изучали ещё паскаль и фортран наверно..всё таки более 30 лет стажа падаю ниц... не обижайтесь п"лиз..на меня старого..ну не умею я "кукушка хвалит петуха"...надеюсь на понимание ..а Ваш вариант соберу обязательно ,ну нравится красивое ,хотя на экране размером со спичечный коробок...но графика красивая и с душой без б правда понравилось ,ввели то что в90тые называлось ару + это в трансляциях просто необходимо (блин прошу не обижаться за ару) ,придет контроллер блин специально заказал под Ваш проект. Проект правда спорный(мне плеер с вааще нах не нужен хотя от ушей по блюпуп не отказался бы)всё остальноё на потребителя но графика здесь для меня это краеугольный камень!!спасибо.красиво.с душой. Вы же просили критики -получите )))
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
39

@Олег Поляков,
В ближайшее время соберу все компоненты в кучу и протестирую на полную, спортивный интерес по компиляции все перевесил, все чем занимался или планировал заниматься отложил в сторону. Не знаю как скоро доведу его до полного завершения но доведу и будет ещё одно изделие в коллекцию. Моё рукоблудие, ещё Бендер без корпуса в коробке.
 

Вложения

Изменено:
  • Лойс +1
Реакции: Олег Поляков

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
39
@Olegsan, это китайские коробочки, а кубик - часы хамилион. Внутри всё на МГТФ и суперклее.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@iponkada2, блин, расстроил.часы жалко ,такие-же имею.брал за копейки на али.мгтф наше фсее.сам пользую.я думал кто-то по принтеру проконсультирует .думаю взять ,а надо ли оно и места много занимает
 

Balzamalex

✩✩✩✩✩✩✩
9 Ноя 2020
1
0
Подскажите, что не так у меня? IDE 2.3.3.
1742961131678.png
In file included from c:\Users\Balzam\Documents\Arduino\libraries\SD\src/utility/Sd2Card.h:26,
from c:\Users\Balzam\Documents\Arduino\libraries\SD\src/utility/SdFat.h:29,
from c:\Users\Balzam\Documents\Arduino\libraries\SD\src/SD.h:20,
from c:\Users\Balzam\Documents\Arduino\libraries\ESP32-audioI2S-master\src/Audio.h:26,
from D:\InternetRadio2\InternetRadio\InternetRadio.ino:10:
c:\Users\Balzam\Documents\Arduino\libraries\SD\src/utility/Sd2PinMap.h:527:2: error: #error Architecture or board not supported.
527 | #error Architecture or board not supported.
| ^~~~~
exit status 1

Compilation error: exit status 1
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@Olegsan, никак не могу принять ваших извинений, поскольку совершенно не обиделся. Критика - такой же стимул как и одобрение. Иногда даже более сильный.
Начинал с Фортрана и с ЕС ЭВМ серии 1030.
Плеер, часы, будильник, озвучка голосом через сервис Гугла, вы правы, - факультативные возможности, сделанные по принципу " раз можно, то пусть будут".
Обычно в автомобиле слушаю музыку в режиме интернет-радио. Мобильный интернет имеет хорошую зону покрытия почти везде, где приходится ездить. Но бывают протяжённые участки на трассе, где его нет или очень дорогой роуминг (Беларусь, к примеру). Там переключаюсь в режим плеера и "музыка всегда со мной".
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
154
140
www.1812.ru
@Olegsan, начинал свою трудовую деятельность в отделе ЭВМ института "Гипрокаучук" (Москва) у лауреата Госпремии СССР Шапиро. Наш отдел занимался разработкой программ для расчёта газо-нефтепроводов.
После армии, будучи студентом МИЭМ, по ночам подрабатывал в ОНИЦ ПЭВМ "Техно", откуда, собственно и начал зарождаться Рунет (С. Турчинов, О. Табаровский). Дальше больше, но кому это интересно?

@vglukas, третий повтор не может не радовать!
 
  • Лойс +1
Реакции: vglukas и sergggg

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
Отличный проект, собрал, немного доработал по функциям. Спасибо автору! На всякий случай - можно сделать с поддержкой psram, достаточно изменить распиновку, у автора используются пины, которые нельзя использовать при ее наличии (psram). Работает на версии аудио до 3.0.12.
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@Олег Поляков, повторы будут обязательно, четыре страницы общения не просто так, косяк то найден...ага вот ещё появился , но это можно даже считать за плюс . беспамятные S3 дешевле..
 
Изменено:

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
Так можете уже пора и поменять схему, думаю что те кто повторили изменили пины, и повторяемость будет 100%

И подработать выбор дисплея в рамках библиотеки st7735- st7789

Я ушел с пинов 35-38, и 19-21 так как они используются внутренними процессами и все погрузилось сразу.

Единственный ньюнс почему то с компа в веб морду был закрыт доступ, зайти удалось только с телефона
 

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
39
@vglukas, дайте свою распиновка чтобы долго не мучаться.
@sergggg подробнее про доработку и что теперь с psram скомпилировалось?
Общими усилиями летать заставим!
 
  • Лойс +1
Реакции: Олег Поляков

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
..ну вот с софтом разобрались...дошло и до харда)))

@vglukas, у меня тот- то момент тоже присутствует на вин10