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

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
153
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
Место для размещения индикации на экране есть - верхний правый угол.
Если кто-нибудь возьмёт на себя труд доработать схему и скетч - буду несказанно рад.

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

Вложения

Изменено:

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
@iponkada2, Если можно бросьте пожалуйста ссылку на IDE 2.0.9, че то не могу найти.

@iponkada2, Да, стоит 2.0.0.

@iponkada2, Согласно списка выше 2.0.0 и надо?

@iponkada2, Эту библиотеку я качал с Гитхаба, только гораздо раньше.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@vglukas, у меня днём компиляция удалась.сейчас пришёл с работы домой ,ссд с системой у меня переносной.попробовал снова получилось.шить не пробовал.да думаю зальётся тока вот результат какой будет..(у 2 версии ардуины нет обновлялки, хотя толкуют ,что она встроенная.там). вин у меня 10 ардуина иде последняя 2.3.4.. выкинул из библиотек всё то на ,что ругался компилятор, установил всё согласно списка(версии точь в точь). версия ядра 2.0.9 ,по ходу и 2.0.11 прокатит..версия шины на гитхабе 2.13, но там-же есть ссылка написано 2.0.12 но раскрывается как 2.0. ( с 2.0.13 у меня ругалась на аудио2с) в настройках(инструментах) память -16м , патришен -.хуга 3...(как и рекомендовано)..писирам-"опи писирам"(иначе ругается -памяти мало)...извиняюсь канешна -лениво язык менять...У меня ещё включена детализация при компиляции-красиво скрашивает ожидание результата..попробуйте должно случиться .. .да и . ещё удалил все сд файлы и библиотеки на которые ардуина указала
 
Изменено:

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
4
2
Ядро 2.0.9 - ошибка та же, перезаписал библиотеку I2S 2.0.0 - запустил компиляцию результат не изменился. Кажется варианты уже все.
 

Вложения

iponkada2

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

@vglukas,
Пока не собирался собирать это радио(занимаюсь Бендером из соседней ветки) но стало интересно скомпилить прошивку и получил ошибки один в один с Вашими.


@Olegsan,
Что такое версия шины 2.13?


@Олег Поляков,
Большая просьба в архив с прошивкой положить все нужные библиотеки, я то решение найду а вот остальным будет проще.
 
Изменено:

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@iponkada2, I2S шина звука.ссылка ведёт на гитхаб аудио мастер версия 2.0.13. там-же на странице справа ,релиз.находится ссылка на архив 3.0.12- раскрывается как 2.0. я у себя удалил из библиотек аудио мастера(тупо делете) и установил то что скачал--как библиотеки.зип архив.. .пардонте 3.0.12 архив ...исправил
 
Изменено:

iponkada2

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

@Olegsan,
3.0.12 есть у меня, уже подставил и вроде как собралось. Сравнил я 2.0.0 и 3.0.12 совсем разные. Не зная секрета хрен скомпилить. Только что успешно скомпилилось. Но автор утверждает что нужна именно 2.0.0, а 3.0.12 это самая последняя и из этого вытекает - а будет ли все работать? С Бендером я просидел пару вечеров чтобы адаптировать его рот к новой библиотеке. Просьба к автору в силе - предоставьте свою библиотеку i2S.
 
Изменено:

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
@Olegsan, Все настройки, версия IDE, версия ядра один в один, но результат другой.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@iponkada2, а дальше. зашить то оно зашьётся . а как реализуется ?у меня ёрадио наS3+7789 поёт.разбирать пока не хочу. придётся ещё есп заказать..
 

Olegsan

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

iponkada2

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

@Olegsan,
Выше я дописал свой ответ, s3 есть у меня и почти подходящий 7789, придется внепланово испытывать. На ядре 2.0.17 тоже собирается. Ну я немного сжульничал некоторые библиотеки и файл glcdfont (они почти идентичны) оставил от Ё посмотрим как это запоёт в железе.
 

iponkada2

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

@vglukas,
Установите последнюю версию i2S и все соберётся.
На этой странице найдете архив с библиотеками. Ардуино показывает что установлено 2.0.0 хотя по факту стоит 3.0.12, вот автор заглянул в Ардуино и сказал ставьте 2.0.0.
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
4
2
Все таки прошил, теперь вторая задача запустить, как показывает практика не все SD корректно читаются.
 

iponkada2

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

@Олег Поляков,
Проблема в i2s библиотеке, Вы указали не ту версию. Я выше писал что установил 3.0.12 а Ардуино отображает 2.0.0. Люди согласно рекомендации ставят 2.0.0 и в результате ошибки. Вот я и хочу чтобы вы предоставили библиотеку которая у Вас установлена, это снимет много лишних вопросов и телодвижений.
 

iponkada2

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

@Олег Поляков,
Выше я писал что в папку с библиотеками положил 3.0.13 а в Ардуино отображается 2.0.0. Похоже и у Вас та же история. Зайдите в папку библиотеки и скажите сколько там папок возле файлов Audio, если три то 2.0.0, а если пять то 3.0.12.Screenshot_2025-03-23-23-42-26-562_ru.zdevs.zarchiver.pro.jpgScreenshot_2025-03-23-23-42-09-979_ru.zdevs.zarchiver.pro.jpg
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@iponkada2, немного не корректно -3.0.12 -это название архива. а в архиве как раз версия ( джисон-блокнот) 2.0.0 ...как то так.. автор прав. увы однако всех тонкостей не углядишь
 
  • Лойс +1
Реакции: Олег Поляков

iponkada2

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

@Olegsan,
Вот эти тонкости и делают нервы, завтра я сравню название архива это или версия библиотеки.
 

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
А собака была в библиотеке i2s, как ни странно библиотека которую я когда то скачивал с Гитхаба с пропиской что она 2.0.0 не подошла, не подошла и с IDE, а вот то что 3.12 это 2.0.0 я не знал. Когда поставил все прошилось, но проверить не смог 7789 даже на пол экрана работать не захотел, мигает белым экран, на ешке работал бы на пол экрана, а здесь нет, а 7735 еще в пути.
 
  • Лойс +1
Реакции: Олег Поляков

iponkada2

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

@vglukas,
Может я слепой но тоже нигде на гитхабе не увидел какую-то связь между 3.0.12 и 2.0.0