АУДИО Интернет-радио 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
Место для размещения индикации на экране есть - верхний правый угол.
Если кто-нибудь возьмёт на себя труд доработать схему и скетч - буду несказанно рад.

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

Вложения

Изменено:

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
@iponkada2,Да, psram работает(так лог говорит).Из доработок: добавил запоминание последних трёх станций, с последующим их повторением.Так как у меня ловил помехи ir приемник, из-за чего были ложные срабатывания - добавил фильтр ir команд. Изменил немного логику управления с пульта.Добавил управление будильником по дням.Подправил логику АРУ.
 

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
Собирал IDE 2.3.4 , ядро 2.0.9. Но думаю что при нормальной распиновке будет компилиться с любым IDE многими ядрами. Сейчас на работе, вечером выложу загрузочный файл.
 

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
@iponkada2, Извините пожалуйста, но наверное это только после одобрения автором. Или отправить ему, а он уже сам будет решать . Да и с будильником по дням недели там не все красиво сделано, а я с WEB страницами не очень...
 

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
4
2
Удалось забежать домой, бросаю новую рабочую распиновку.

Кстати судя по количеству пинов здесь отлично будет работать s3 mini причем у нее выведенные пины можно сказать универсальные, можно цеплять все подряд в связке с PCM5100 что позволит вообще минимизировать прибор
 

Вложения

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
@iponkada2,Я отправил файлы автору, может он приведет мое творение в божеский вид и скоро все будет.
 
  • Лойс +1
Реакции: iponkada2

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
38
Когда из вэба выбираю регион или жанр то радио задумывается и через секунд десять перезагружается. В чем может быть проблема? Авто уровень громкости отключается?
 

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
@iponkada2, Перезагрузка происходит потому, что вы попадаете на мертвую ссылку и из-за этого срабатывает таймер watchdog. Авто уровень выключается из веба, подменю "звук". Наверное лучше сделать чтобы радио не перезагружалось, а переходило на следующую станцию...
 
Изменено:

Zee0n

✩✩✩✩✩✩✩
27 Мар 2025
6
0
Не компилируется, ругается на ошибку поддержки архитектуры:
In file included from C:\Users\san\Documents\Arduino\libraries\SD\src/utility/Sd2Card.h:26,

from C:\Users\san\Documents\Arduino\libraries\SD\src/utility/SdFat.h:29,

from C:\Users\san\Documents\Arduino\libraries\SD\src/SD.h:20,

from C:\Users\san\Documents\Arduino\libraries\ESP32-audioI2S-master\src/Audio.h:26,

from C:\esp\InternetRadio\InternetRadio.ino:10:

C:\Users\san\Documents\Arduino\libraries\SD\src/utility/Sd2PinMap.h:527:2: error: #error Architecture or board not supported.

#error Architecture or board not supported.

^~~~~

exit status 1

Ошибка компиляции для платы ESP32S3 Dev Module.
 

iponkada2

★✩✩✩✩✩✩
10 Апр 2024
99
38
@Zee0n, ядро, пробуйте 2.0.9, 2.0.14. проверяйте настройки прошивки в Ардуино. Ну и Ардуино желательно 2.3.3. Перечитайте форум здесь не много, описано все как правильно настроить для удачной прошивки.
 

Olegsan

✩✩✩✩✩✩✩
13 Мар 2025
23
5
@Zee0n, если не имеете желания переходить на Arduino IDE выше 2....то обновите до 1.8.19 , меньше времени потеряете. версию ESP32 попробуйте понизить до 2.0.9, ..2.0.14 . библиотеку I2S берите по ссылке ,там же на гитхабе справа в релизах архив 3.0.12. от 29 июль 24. обязательно поменяйте файл шрифтов в библиотеке (автор в начале добавил исправленную версию) .если в инструментах настройки задействуете (хуго апп....)будет ругаться обновлялка ( если у Вас старая версия обновлялки-то пусть и остаётся) с новой у меня возникли трудности с вэб-мордой...пробовал компилировать как на IDE 2.3.4 так и на 1.8.19 -всё собирается шить правда после всех улучшений не пробовал.
 
Изменено:

Zee0n

✩✩✩✩✩✩✩
27 Мар 2025
6
0
Залил в чистую ESP32S3 без периферии:
20:32:03.863 -> ESP-ROM:esp32s3-20210327
20:32:03.863 -> Build:Mar 27 2021
20:32:03.863 -> rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
20:32:03.863 -> SPIWP:0xee
20:32:03.863 -> mode:DIO, clock div:1
20:32:03.863 -> load:0x3fce3808,len:0x44c
20:32:03.863 -> load:0x403c9700,len:0xbd8
20:32:03.863 -> load:0x403cc700,len:0x2a80
20:32:03.863 -> entry 0x403c98d0
20:32:04.188 -> ==== Информация о плате ===
20:32:04.188 -> Ревизия чипа: 0
20:32:04.188 -> Версия SDK: v4.4.6-dirty
20:32:04.188 -> ESP32 Chip ID = 2051119E9EF0
20:32:04.326 -> Размер скетча: 1579600 байт
20:32:04.326 -> Размер свободной памяти под скетч: 3145728 байт
20:32:04.372 -> Размер Flash памяти: 16777216 байт
20:32:04.372 -> Частота Flash памяти: 80000000 Гц
20:32:04.372 -> Объём свободной памяти: 232460 байт
20:32:04.372 -> Общий объём памяти: 309380 байт
20:32:04.372 -> Размер самого большого блока свободной памяти: 204788 байт
20:32:04.372 -> Наименьший объём свободной памяти с начала загрузки: 227108 байт
20:32:04.467 -> Настройки загружены из EEPROM.
20:32:05.629 -> TTF-display initialized
20:32:06.606 -> SD-card failed
20:32:06.606 -> or not present!
 

Михаил 98756234

✩✩✩✩✩✩✩
3 Мар 2025
1
2
Вот как-то так получилось Делал все по инструкции,прошивка авторская С вэб-морды как-то можно настроить А настроить экондером и кнопками пока не понятно Да и время где-то на 1,5 минуты запаздывает
 

Вложения

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
Добрый день! Кто нибудь пробовал включение- выключение по расписанию? У меня не срабатывает не в режиме радио ни в режиме часов.
 

sergggg

✩✩✩✩✩✩✩
14 Май 2024
7
9
@vglukas,У меня больше недели работает , проблем со включением- выключением по расписанию нет в любом режиме.
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
153
140
www.1812.ru
@Михаил 98756234, поздравляю с успешной сборкой и запуском!
Добавлю обязательно в описание радио и инструкцию по управлению с помощью энкодера и кнопки, и инструкцию по управлению с ir-пульта.
По отставанию времени на 15 минут пока ничего сказать не могу. Вы в каком часовом поясе находитесь?
 

vglukas

✩✩✩✩✩✩✩
5 Мар 2025
17
7
А скажите сложно подправить код на ST7789? Посмотрел, библиотека должна поддерживать. Попробовал прописать дисплей и закоментировать 367 строку с модификацией дисплея. Прошивка скомпилировалась но дисплей не работает.