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

Олег Поляков

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

Версия 2.23 от 28 апреля 2025 г.

radio0.jpg

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

Компоненты, необходимые для сборки:
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" опцию "Minimal SPIFFS (1.9MB APP with OTA/190KB SPIFFS)" и остальные параметры, согласно прилагаемому скриншоту:
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-карты
65.1 Mb в zip-архиве

Arduino IDE и необходимые библиотеки
Скетч успешно компилировался на Arduino IDE версий 2.0.17 и 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.

Версия 1.20. По факту - 2.20. Изначальная версия скетча, опубликованная здесь на форуме.

Версия 2.21. С помощью участника форума Сергея (sergggg) в схему и в скетч добавлено отображение состояния заряда аккумуляторной батареи.
Схема подключения: к минусовому контакту АКБ подключается резистор 100 кОм; к плюсовому контакту - резистор 200 кОм; оба резистора соединяются свободными контактами на пине 4 ESP-32.
Состояние заряда АКБ отображается в режимах "Радио" и "Проигрыватель" в верхнем правом углу дисплея интернет-радио в виде пиктограммы, а так же через web-интерфейс в правом верхнем углу шапки страницы, напротив надписи "интернет-радио". В web-интерфейсе можно через настройки в разделе "Экран и шрифт" установить в каких единицах будет отображаться текущий заряд АКБ: в процентах или в вольтах.

web10.jpgbattery.jpg

Версия 2.22. Доработана индикация заряда АКБ на дисплее устройства. Теперь, помимо пиктограммы с изображением батарейки, левее отображается состояние заряда в процентах или в вольтах, в зависимости от настроек индикации.
battery1.jpgbattery2.jpg

Версия 2.23.
1. Добавлена новая цветовая схема интерфейса "Калейдоскоп".
2. Сделано обновление прошивки с sd-карты. Для этого неообходимо откомпилировать скетч с Partition Scheme "Minimal SPIFFS". Файл прошивки firmware.bin выложить в корень sd-карты.
3. Оптимизирована процедура индексации аудио-файлов в папках Проигрывателя.

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

Вложения

Изменено:

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
9
4
@Sturdm, находите строки 218, 219:
String def_ssid = "**************";
String def_pass = "***************";
Меняете на свои, потом можно будет зайти в настройки уже в присвоенный роутером адрес.
 
  • Лойс +1
Реакции: iponkada2 и Sturdm

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
У всех нет проблем с батареей?Опробовал все ядра от 2.0.9 до 2.0.17., разными пинами, на всех результат одинаковый - компилируется, на части пинов показывает напряжение 9.3 v на части пинов не работает, но главное всегда полностью блокирует енкодер.Конечно есть подозрение что в этом виновата конфигурация моего клона s3.
 

Sturdm

✩✩✩✩✩✩✩
4 Июн 2021
12
2
Есть проблема с индикацией батареи-показания 0.10v,0.13v,0.14v .Энкодер работает норм.
Не могу войти в WEB.Не появляется точка доступа "microMedia (она должна появляться до нажатия энкодера?)
Прописка в коде строк 218, 219 ни чего не дало, коннекта нет(наверно пароль надо вводить в зашифрованном виде).
После прошивки бином с CD карты устройства-ничего не изменилось.
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
@Sturdm,Неправильно прошили, логин и пароль вводится в обычном виде а потом нужно прошить обычным путем не бином.Если Вы все сделаете правильно у Вас не будет точки доступа micromedia а сразу появится работающее радио с указанным внизу IP адресом.Батарея будет показывать 0,**** если выбран неправильный пин, в других случаях неправильный делитель.
 
  • Лойс +1
Реакции: Sturdm

Sturdm

✩✩✩✩✩✩✩
4 Июн 2021
12
2
@vglukas,
На дисплее при загрузке, с изменёнными строчками 218, 219 на свои, надпись какая появится ? Прежняя или с моим названием ssid ?
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
@Sturdm,Естественно высветит Ваше имя сети и сразу начнется соединение, затем экран мигнет и включится радио
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
@Sturdm,никаких дополнительных движений делать не нужно, подаёте питания и ждёте , радио включится само, если конечно вся переферия подключена правильно.
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
@Sturdm, Виноват , я неправильно указал Вам строки для редактирования, нужно 219,220. Конечно замена ssid и пароля это неудобный вариант, если по другому не заходит значит при смене сети нужно постоянно перепрошиваться.
 

Sturdm

✩✩✩✩✩✩✩
4 Июн 2021
12
2
@vglukas,
07:03:45.357 -> ESP-ROM:esp32s3-20210327
07:03:45.459 -> Build:Mar 27 2021
07:03:45.459 -> rst:0x1 (POWERON),boot:0x8 (SPI_FAST_FLASH_BOOT)
07:03:45.459 -> SPIWP:0xee
07:03:45.459 -> mode:DIO, clock div:1
07:03:45.459 -> load:0x3fce3808,len:0x4bc
07:03:45.459 -> load:0x403c9700,len:0xbd8
07:03:45.459 -> load:0x403cc700,len:0x2a0c
07:03:45.459 -> entry 0x403c98d0
07:03:45.716 -> ==== Информация о плате ===
07:03:45.716 -> Ревизия чипа: 0
07:03:45.716 -> Версия SDK: v4.4.7-dirty
07:03:45.716 -> ESP32 Chip ID = DC00CB2C01FC
07:03:45.832 -> Размер скетча: 1588016 байт
07:03:45.832 -> Размер свободной памяти под скетч: 1966080 байт
07:03:45.832 -> Размер Flash памяти: 16777216 байт
07:03:45.832 -> Частота Flash памяти: 80000000 Гц
07:03:45.889 -> Объём свободной памяти: 239616 байт
07:03:45.889 -> Общий объём памяти: 312788 байт
07:03:45.889 -> Размер самого большого блока свободной памяти: 212980 байт
07:03:45.889 -> Наименьший объём свободной памяти с начала загрузки: 234256 байт
07:03:45.995 -> Настройки загружены из EEPROM.
07:03:47.155 -> TTF-display initialized
07:03:47.690 ->
07:03:47.690 -> Loading image '/System/logo.bmp'
07:03:47.723 -> File size: 61496
07:03:47.723 -> Image Offset: 54
07:03:47.723 -> Header size: 40
07:03:47.723 -> Bit Depth: 24
07:03:47.723 -> Image size: 160x128
07:03:50.837 -> Loaded in 3138 ms
07:03:56.446 -> Connecting to wi-fi...
07:04:11.661 -> Can't connect to wi-fi.
07:04:18.960 -> Scan done.
07:04:18.960 -> 30Networks found.
 

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
9
4
Вот рабочий файл ino, попробуйте заменить, соедините как в нем свою схему, проверьте наличие всех библиотек. Думаю у Вас причина не в соединении с WIFI а в конфигурации.
 

Вложения

Sturdm

✩✩✩✩✩✩✩
4 Июн 2021
12
2
@VILUKAS,
Строки 218, 219 менять на свои? Попробую и так и так.
По библиотекам видимо не все нужные есть, например Wi Fi нету, но есть WiFiManager-master.Натолкаю буду пробовать. Кроме выхода в сеть остальной функционал присутствует.
Хотя по идее при компиляции должен ругаться на отсутствие нужных библиотек, или нет?
 
Изменено:

vglukas

★✩✩✩✩✩✩
5 Мар 2025
30
10
@Sturdm
219 и 220, а также посмотри чтоб подключение к пинам было как в скетче, если не подключится проверим библиотеки.
 

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
9
4
Нужен вот такой перечень библиотек:
Adafruit_BuslO, Adafruit_seesaw_Library, Adafruit-GFX-Library-1.11.9, Adafruit-ST7735-Library-1.10.4, Arduino-IRremote-3.5.0, ESP32-audioI2S-3.0.12, GyverButton-main, ESP32Time-2.0.5, GyverEncoder-4.10, GyverPortal-main, NTPClient-3.2.1.
С другими загрузки не будет !!!!