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

Интернет-радио microMedia на ESP32-S3
Интернет-радио + аудиоплеер + часы-будильник с боем и курантами на ESP32-S3

Версия 2.44 от 15 мая 2025 г.

radio0.jpg

Устройство предназначено для высококачественного воспроизведения звука потоковой трансляции станций интернет-вещания, а так же для воспроизведения звуковых файлов формата wav и mp3 с носителя в виде sd-карты, вставляемой в устройство. Кроме того, устройство выполняет функции часов с курантами и будильником.

Устройство обладает следующим функционалом:
  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-интерфейсе реализовано отображение состояние заряда питающего аккумулятора.
  21. В web-интерфейсе реализован постраничный просмотр списков станций интернет-вещания с возможностью перехода на выбранную из списка станцию.
  22. В web-интерфейсе реализован поиск станций интернет-вещания по их названию.
  23. По просьбам пользователей предусмотрен выбор способа переключения со станции на станцию при помощи поворотов ручки энкодера: мгновенный (поворот - переключение) или с предпросмотром (повороты энкодера для пролистывания станций в списке; нажатие кнопки энкодера - загрузка выбранной станции; нажатие кнопки - отмена выбора и возвращение на экран "Радио").

Компоненты, необходимые для сборки:
  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. При включении зажмите и держите зажатой кнопку до появления меню "Loading menu".
  2. При помощи колеса энкодера выберите пункт "New connection".
  3. Один раз нажмите на кнопку энкодера. Далее следуйте инструкции, а именно:
  4. В своём гаджете в настройках интернета по wi-fi найдите и выберите сеть "microMedia".
  5. Подключитесь к этой сети. Пароль: 12345678.
  6. После этого нажмите один раз на кнопку энкодера.
  7. Далее откройте в браузере гаджета адрес 192.168.4.1 и там уже настройте соединение интернет-радио с интернетом. wifi.jpg
  8. Выберите ваш роутер из списка и введите пароль доступа. В случае успеха вы услышите первые звуки интернет-трансляции первой станции из большого списка станций.
  9. После чего для управления интернет-радио через web-интерфейс необходимо узнать ip-адрес самого устройства в сети. Для этого достаточно нажать один раз кнопку BUTTON и в нижней части всплывшего на дисплее окошка с меню посмотреть и вбить в адресную строку web-браузера вашего компьютера (планшета, смартфона) отображаемый ip-адрес.

Для размещения звуковых файлов на sd-карте уже создана отдельная папка Music. Правила размещения в неё wav и mp3 файлов следующие.
  1. В самой папке Music можно создавать до 40 папок (максимальное количество папок задаётся в скетче константой DIR_LIMIT) , названия которых могут быть как на английском, так и на русском языке.
  2. В эти папки можно размещать звуковые файлы в любом количестве.
  3. Не следует создавать в этих папках вложенные папки. Они и их содержимое в актуальной версии прошивки будут игнорироваться.
  4. После любого изменения (добавления/переименовывания/удаления папок и файлов) внутри папки Music необходимо произвести однократную индексацию. Она осуществляется через меню настроек устройства или же через web-интерфейс устройства.
  5. Для этого зайдите в "Настройки - Проигрыватель", нажмите на кнопку "Индексировать" и дождитесь завершения процесса индексации.

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

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

Архив скетча, шрифтов для дисплея и содержимое sd-карты
Версия 2.23 (65.1 Mb в zip-архиве)
Версия 2.44 (65.7 Mb в zip-архиве)
(Bin-файлы для прошивки находятся в папках SD-card.)

Модификация версии 2.44 от участника форума Sergggg (67.2 Kb в rar-архиве) с будильником по дням и ещё целым рядом дополнений.


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

Устройство может находиться в разных режимах функционирования. И в каждом из них действия с элементами управления могут вызывать разные функции. Поэтому ниже последовательно описано управление устройством для каждого режима.

Служебный режим
Если при включение устройства зажата и не отпускается кнопка на устройстве, то устройство переходит в служебный режим "Loading menu".
В этом режиме перемещение по пунктам меню осуществляется поворотом энкодера по часовой и против часовой стрелки, а выбор - коротким нажатием на кнопку энкодера.

Режим "Радио"
[Поворот энкодера] - переход от текущей станции интернет-трансляции к следующей/предыдущей или предпросмотр станций.
[Одинарное нажатие кнопки] - вызов главного меню.
[Одинарное нажатие кнопки энкодера] - переход из режима "Радио" в режим "Проигрыватель".
[Двойное нажатие кнопки] - переход из режима "Радио" в режим "Часы".
[Тройное нажатие на кнопку] - переход между полным списком станций и списком любимых станций.
[Четырёхкратное нажатие на кнопку] - вызов окна настройки звучания с возможностью регулировки громкости, баланса, уровней низких, средних и высоких частотных полос.
[Пятикратное нажатие на кнопку] - блокировка/разблокирование элементов управления от случайного нажатия.
[Нажатие и длительное удержание кнопки] - выбор случайной станции из текущего списка.
[Нажатие и длительное удержание кнопки энкодера] - включение/выключение звука.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим предпросмотра станций
В устройстве предусмотрено два способа навигации по спискам станций при помощи энкодера: переключение станций поворотом энкодера и навигация от станции к станции с фиксацией выбора станции кнопкой энкодера. Второй способ для краткости назван "Выбор из списка".
В этом режиме навигации:
[Поворот энкодера] - предпросмотр списка от станции к станции.
[Одинарное нажатие кнопки] - выход из режима "Выбор из списка".
[Одинарное нажатие кнопки энкодера] - запуск выбранной станции интернет-трансляции.

Режим "Проигрыватель"
[Поворот энкодера] - переход от текущей музыкальной композиции к следующей/предыдущей.
[Одинарное нажатие кнопки] - вызов главного меню.
[Одинарное нажатие кнопки энкодера] - переход из режима "Проигрыватель" в режим "Радио".
[Двойное нажатие кнопки] - переход из режима "Радио" в режим "Часы".
[Тройное нажатие на кнопку] - переход между текущей музыкальной папкой и списком любимых музыкальных треков.
[Четырёхкратное нажатие на кнопку] - вызов окна настройки звучания с возможностью регулировки громкости, баланса, уровней низких, средних и высоких частотных полос.
[Пятикратное нажатие на кнопку] - блокировка/разблокирование элементов управления от случайного нажатия.
[Нажатие и длительное удержание кнопки] - выбор случайной музыкальной композиции из текущей папки.
[Нажатие и длительное удержание кнопки энкодера] - включение/выключение звука.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим "Часы"
[Поворот энкодера] - переход от текущей музыкальной композиции / станции интернет-вещания к следующей/предыдущей.
[Одинарное нажатие кнопки] - озвучивание голосом текущего времени.
[Одинарное нажатие кнопки энкодера] - смена режима на "Проигрыватель" или "Радио".
[Двойное нажатие кнопки] - озвучивание голосом дня недели числа, месяца и года.
[Тройное нажатие на кнопку] - переход в режим настроек устройства.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим "Настройки"
(описание в работе...)

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

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

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

radio03.jpg

Очень интересный компактный вариант от участника форума VILUKAS:
radio04.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-интерфейсе можно через настройки в разделе "Экран и шрифт" установить в каких единицах будет отображаться текущий заряд АКБ: в процентах или в вольтах.

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

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

Версия 2.40.
  1. Улучшена стабильность работы.
  2. Изменён формат хранения списков радиостанций в ini-файлах папки Radio: добавлено поле названия станции вещания, которое определяется и сохраняется автоматически для каждой станции. (ini-файлы предыдущей версии совместимы с новой версией прошивки и будут автоматически преобразовываться в новый формат в процессе соединения с радиостанций для прослушивания).
  3. Добавлена возможность постраничного просмотра списка интернет-станций в режиме "Радио" через web-интерфейс.
  4. В раздел "Настройки" web-интерфейса добавлен блок настроек "Радио", где можно установить желаемое количество станций для постраничного просмотра. См. п.3.

Версия 2.41.
  1. Исправлена коллизия с перезагрузкой ESP при нахождении в меню настроек. Спасибо участнику форума с ником VILUKAS (https://community.alexgyver.ru/members/vilukas.100909/)

Версия 2.42 от 09.05.2025
  1. В web-интерфейс добавлен поиск станций интернет-вещания по общему списку и списку любимых станций.
  2. Улучшена стабильность работы без перезагрузок ESP.

Версия 2.43 от 11.05.2025
  1. Реализован альтернативный способ выбора станций интернет-вещания через энкодер: поворот энкодера - просмотр информации о следующей/предыдущей станции без перехода на неё; нажатие на кнопку энкодера - переход на выбранную станцию вещания; нажатие на кнопку - отмена выбора и возвращение в окно "Радио".
  2. В раздел "Настройки / Воспроизведение" интернет-радио и в "Настройки - Радио" web-интерфейса добавлена возможность установить способ выбора станций: классический или альтернативный.
Версия 2.44 от 16.05.2025
  1. Убраны мелкие недочёты с отображением информации в разных режимах.
  2. Управление через кнопку и энкодер приведено к единому стилю.
  3. В управлении через ИК-пульт реализовано управление в режиме предпросмотра станций интернет-вещания.
    За следующие улучшения спасибо участнику форума с ником sergggg (https://community.alexgyver.ru/members/sergggg.75421/)
  4. Улучшен алгоритм плавного уменьшения/увеличения громкости при переключениях станций/треков.
  5. Улучшен алгоритм записи, считывания данных из EEPROM.
  6. Улучшен алгоритм обработки сигналов с ИК-пульта.

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

Вложения

Изменено:

Комментарии

Олег Поляков

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

Версия 2.44 от 15 мая 2025 г.

radio0.jpg

Устройство предназначено для высококачественного воспроизведения звука потоковой трансляции станций интернет-вещания, а так же для воспроизведения звуковых файлов формата wav и mp3 с носителя в виде sd-карты, вставляемой в устройство. Кроме того, устройство выполняет функции часов с курантами и будильником.

Устройство обладает следующим функционалом:
  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-интерфейсе реализовано отображение состояние заряда питающего аккумулятора.
  21. В web-интерфейсе реализован постраничный просмотр списков станций интернет-вещания с возможностью перехода на выбранную из списка станцию.
  22. В web-интерфейсе реализован поиск станций интернет-вещания по их названию.
  23. По просьбам пользователей предусмотрен выбор способа переключения со станции на станцию при помощи поворотов ручки энкодера: мгновенный (поворот - переключение) или с предпросмотром (повороты энкодера для пролистывания станций в списке; нажатие кнопки энкодера - загрузка выбранной станции; нажатие кнопки - отмена выбора и возвращение на экран "Радио").

Компоненты, необходимые для сборки:
  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. При включении зажмите и держите зажатой кнопку до появления меню "Loading menu".
  2. При помощи колеса энкодера выберите пункт "New connection".
  3. Один раз нажмите на кнопку энкодера. Далее следуйте инструкции, а именно:
  4. В своём гаджете в настройках интернета по wi-fi найдите и выберите сеть "microMedia".
  5. Подключитесь к этой сети. Пароль: 12345678.
  6. После этого нажмите один раз на кнопку энкодера.
  7. Далее откройте в браузере гаджета адрес 192.168.4.1 и там уже настройте соединение интернет-радио с интернетом. wifi.jpg
  8. Выберите ваш роутер из списка и введите пароль доступа. В случае успеха вы услышите первые звуки интернет-трансляции первой станции из большого списка станций.
  9. После чего для управления интернет-радио через web-интерфейс необходимо узнать ip-адрес самого устройства в сети. Для этого достаточно нажать один раз кнопку BUTTON и в нижней части всплывшего на дисплее окошка с меню посмотреть и вбить в адресную строку web-браузера вашего компьютера (планшета, смартфона) отображаемый ip-адрес.

Для размещения звуковых файлов на sd-карте уже создана отдельная папка Music. Правила размещения в неё wav и mp3 файлов следующие.
  1. В самой папке Music можно создавать до 40 папок (максимальное количество папок задаётся в скетче константой DIR_LIMIT) , названия которых могут быть как на английском, так и на русском языке.
  2. В эти папки можно размещать звуковые файлы в любом количестве.
  3. Не следует создавать в этих папках вложенные папки. Они и их содержимое в актуальной версии прошивки будут игнорироваться.
  4. После любого изменения (добавления/переименовывания/удаления папок и файлов) внутри папки Music необходимо произвести однократную индексацию. Она осуществляется через меню настроек устройства или же через web-интерфейс устройства.
  5. Для этого зайдите в "Настройки - Проигрыватель", нажмите на кнопку "Индексировать" и дождитесь завершения процесса индексации.

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

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

Архив скетча, шрифтов для дисплея и содержимое sd-карты
Версия 2.23 (65.1 Mb в zip-архиве)
Версия 2.44 (65.7 Mb в zip-архиве)
(Bin-файлы для прошивки находятся в папках SD-card.)

Модификация версии 2.44 от участника форума Sergggg (67.2 Kb в rar-архиве) с будильником по дням и ещё целым рядом дополнений.


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

Устройство может находиться в разных режимах функционирования. И в каждом из них действия с элементами управления могут вызывать разные функции. Поэтому ниже последовательно описано управление устройством для каждого режима.

Служебный режим
Если при включение устройства зажата и не отпускается кнопка на устройстве, то устройство переходит в служебный режим "Loading menu".
В этом режиме перемещение по пунктам меню осуществляется поворотом энкодера по часовой и против часовой стрелки, а выбор - коротким нажатием на кнопку энкодера.

Режим "Радио"
[Поворот энкодера] - переход от текущей станции интернет-трансляции к следующей/предыдущей или предпросмотр станций.
[Одинарное нажатие кнопки] - вызов главного меню.
[Одинарное нажатие кнопки энкодера] - переход из режима "Радио" в режим "Проигрыватель".
[Двойное нажатие кнопки] - переход из режима "Радио" в режим "Часы".
[Тройное нажатие на кнопку] - переход между полным списком станций и списком любимых станций.
[Четырёхкратное нажатие на кнопку] - вызов окна настройки звучания с возможностью регулировки громкости, баланса, уровней низких, средних и высоких частотных полос.
[Пятикратное нажатие на кнопку] - блокировка/разблокирование элементов управления от случайного нажатия.
[Нажатие и длительное удержание кнопки] - выбор случайной станции из текущего списка.
[Нажатие и длительное удержание кнопки энкодера] - включение/выключение звука.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим предпросмотра станций
В устройстве предусмотрено два способа навигации по спискам станций при помощи энкодера: переключение станций поворотом энкодера и навигация от станции к станции с фиксацией выбора станции кнопкой энкодера. Второй способ для краткости назван "Выбор из списка".
В этом режиме навигации:
[Поворот энкодера] - предпросмотр списка от станции к станции.
[Одинарное нажатие кнопки] - выход из режима "Выбор из списка".
[Одинарное нажатие кнопки энкодера] - запуск выбранной станции интернет-трансляции.

Режим "Проигрыватель"
[Поворот энкодера] - переход от текущей музыкальной композиции к следующей/предыдущей.
[Одинарное нажатие кнопки] - вызов главного меню.
[Одинарное нажатие кнопки энкодера] - переход из режима "Проигрыватель" в режим "Радио".
[Двойное нажатие кнопки] - переход из режима "Радио" в режим "Часы".
[Тройное нажатие на кнопку] - переход между текущей музыкальной папкой и списком любимых музыкальных треков.
[Четырёхкратное нажатие на кнопку] - вызов окна настройки звучания с возможностью регулировки громкости, баланса, уровней низких, средних и высоких частотных полос.
[Пятикратное нажатие на кнопку] - блокировка/разблокирование элементов управления от случайного нажатия.
[Нажатие и длительное удержание кнопки] - выбор случайной музыкальной композиции из текущей папки.
[Нажатие и длительное удержание кнопки энкодера] - включение/выключение звука.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим "Часы"
[Поворот энкодера] - переход от текущей музыкальной композиции / станции интернет-вещания к следующей/предыдущей.
[Одинарное нажатие кнопки] - озвучивание голосом текущего времени.
[Одинарное нажатие кнопки энкодера] - смена режима на "Проигрыватель" или "Радио".
[Двойное нажатие кнопки] - озвучивание голосом дня недели числа, месяца и года.
[Тройное нажатие на кнопку] - переход в режим настроек устройства.
[Нажатие и поворот энкодера] - увеличение/уменьшение громкости.

Режим "Настройки"
(описание в работе...)

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

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

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

radio03.jpg

Очень интересный компактный вариант от участника форума VILUKAS:
radio04.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-интерфейсе можно через настройки в разделе "Экран и шрифт" установить в каких единицах будет отображаться текущий заряд АКБ: в процентах или в вольтах.

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

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

Версия 2.40.
  1. Улучшена стабильность работы.
  2. Изменён формат хранения списков радиостанций в ini-файлах папки Radio: добавлено поле названия станции вещания, которое определяется и сохраняется автоматически для каждой станции. (ini-файлы предыдущей версии совместимы с новой версией прошивки и будут автоматически преобразовываться в новый формат в процессе соединения с радиостанций для прослушивания).
  3. Добавлена возможность постраничного просмотра списка интернет-станций в режиме "Радио" через web-интерфейс.
  4. В раздел "Настройки" web-интерфейса добавлен блок настроек "Радио", где можно установить желаемое количество станций для постраничного просмотра. См. п.3.

Версия 2.41.
  1. Исправлена коллизия с перезагрузкой ESP при нахождении в меню настроек. Спасибо участнику форума с ником VILUKAS (https://community.alexgyver.ru/members/vilukas.100909/)

Версия 2.42 от 09.05.2025
  1. В web-интерфейс добавлен поиск станций интернет-вещания по общему списку и списку любимых станций.
  2. Улучшена стабильность работы без перезагрузок ESP.

Версия 2.43 от 11.05.2025
  1. Реализован альтернативный способ выбора станций интернет-вещания через энкодер: поворот энкодера - просмотр информации о следующей/предыдущей станции без перехода на неё; нажатие на кнопку энкодера - переход на выбранную станцию вещания; нажатие на кнопку - отмена выбора и возвращение в окно "Радио".
  2. В раздел "Настройки / Воспроизведение" интернет-радио и в "Настройки - Радио" web-интерфейса добавлена возможность установить способ выбора станций: классический или альтернативный.
Версия 2.44 от 16.05.2025
  1. Убраны мелкие недочёты с отображением информации в разных режимах.
  2. Управление через кнопку и энкодер приведено к единому стилю.
  3. В управлении через ИК-пульт реализовано управление в режиме предпросмотра станций интернет-вещания.
    За следующие улучшения спасибо участнику форума с ником sergggg (https://community.alexgyver.ru/members/sergggg.75421/)
  4. Улучшен алгоритм плавного уменьшения/увеличения громкости при переключениях станций/треков.
  5. Улучшен алгоритм записи, считывания данных из EEPROM.
  6. Улучшен алгоритм обработки сигналов с ИК-пульта.

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

Вложения

Изменено:

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72

@Zee0n,
Значит неправильно подключили или энкодер дефектный, посмотрите на непропай, у меня синий и все работает.
 

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72

@Zee0n,
Ну тогда закоротите на плате энкодера резисторы подтяжки, на черной плате меньше напаяно резюков и конденсаторов может в этом проблема.
 

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72
Немного не по теме - вывел звук с Ёрадио на блютус. Вместо цапа подключена ещё одна есп которая по i2s получает звук и отправляет его на блютус.
 

Вложения

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

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
232
171
www.1812.ru
@iponkada2, интересно в чём цель такого эксперимента?
А я за выходные в прошивку радио добавил ещё одну цветовую тему, но, главное, доделал обновление прошивки с sd-карты. Новую версию версию пока не выкладывал. Надо ещё потестировать...
 

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72
@Олег Поляков,
Так как я их делаю в виде приставок тоесть цепляю ауксом то так можно по беспроводу ко всему что есть цеплять не таская да и наушники никто не отменял. Да и раз в неделю одни и те же вопросы о блютус вот кому нужно пусть и развлекаются. У меня это больше спортивный интерес, такого ещё никто не делал.
 
  • Лойс +1
Реакции: Олег Поляков

VILUKAS

✩✩✩✩✩✩✩
22 Мар 2025
19
8
Поэксперементировал с плеером. забросил для начала 190 папок с треками - ребут, уменьшил до 100 - ребут, только при 30 треках пошла загрузка. Трек отыграл и на следующий не переключился.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
232
171
www.1812.ru
@VILUKAS, спасибо за замечание! В скетче установлено ограничение на количество папок с музыкальными файлами. Сейчас:
C++:
String music_type_title[40];
В новой версии вынесу размерность массива в константу для удобства изменения, а так же добавлю соответствующую проверку в функцию
ScanDir, чтобы не допускать переполнения массива music_type_title. Собственно, я это уже сделал, но хочу устранить дополнительно и другие недоработки перед сборкой новой версии.

Для проверки создал 40 папок с музыкой. Общее количество mp3-файлов в них - 3 697. Успешная индексация их заняла 5 минут 38 секунд.

Трек отыграл и на следующий не переключился.
А индексацию в настройках Проигрывателя делали?
 
Изменено:
  • Лойс +1
Реакции: vglukas

vglukas

★✩✩✩✩✩✩
5 Мар 2025
49
12
@Олег Поляков,
А все таки возвращаясь к батарее, последнюю версию загрузил, но пришлось закоментировать строки которые вызывали ошибку. Танцы с бубном ничего не дали. Есть подозрение что это может быть связано с разными пинами которые мы используем.

И ещё вопрос - будет ли автоматическое переключение треков?

Индексация прошла но в следующую папку переключения не произошло.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
232
171
www.1812.ru
@vglukas, либо с разными пинами, либо с разными версиями библиотек поддержки ESP32.
Первую версию у себя проверить, увы, не смогу, поскольку моё радио жёско спаяно и упаковано в корпус.
Новый макет начну собирать в мае.

Индексация прошла но в следующую папку переключения не произошло.
Так автоматический переход на следующий (или случайный) трек происходит внутри выбранной аудио-папки среди аудио-файлов в ней размещённых. Это прямой аналог "Жанра" в режиме "Радио".
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
49
12
А сколько на данный момент может быть треков в папке?
 

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72
Продолжение истории с блютус - все работает прекрасно с радио по i2s передаётся поток на другую есп а с неё на колонки или наушники только библиотека звука недопилена и аас с низким битрейтом воспроизводится с искажениями. В поисках решения проблемы наткнулся на код для двух есп - первая с простой прошивкой нет-радио а вторая передатчик на блютус но уже на свежих библиотеках(для ipod трёхлетней давности). Старые библиотеки позволяют через монитор порта выбирать и подключаться к устройству, а новые лишились такой функции - только прописанное в код одно устройство и чтобы подключить новое нужно перешивать. Да и на новых библиотеках баг с аас остался только звучит смешнее. Естественно оба варианта абсолютно не устраивают, с помощью чат GPT было испробовано куча вариантов и по первому скетчу и по второму. И тут я наткнулся на блютус сканер и мне прошла идея слить второй вариант(с новыми библиотеками - может в следующих версиях пофиксят аас) с сканером. Придумал хитрую логику и чат на удивление с нескольких попыток реализовал задуманное, предыдущие версии сутки мучал с постоянными ошибками, я уже думал что он не справится. И так повторю новые библиотеки не умеют скан. И вот что получилось в итоге - часть кода из сканера сканирует устройства и в монитор порта выводит пронумерованный список введя нужную цифру выбирается устройство и его имя записывается в память и сразу происходит перезагрузка, в действие вступает скетч который умеет подключаться к записанному в код устройству и считывает из памяти имя и подключается и через пару секунд уже играет музыка. Теперь имя записано в память и подключение к этому устройству будет до тех пор пока не перезапишешт на новое по команде clear из монитора порта, произойдет перезагрузка и новый скан. Планирую добавить экран ssd1306 и энкодер чтобы без монитора порта проводить манипуляции с переключением.
 

Вложения

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

iponkada2

★★✩✩✩✩✩
10 Апр 2024
145
72

@Олег Поляков,
Я не программист, все это делал GPT под моим четким руководством из мною предоставленных материалов. На чем оно основывается я только догадываюсь но по-моему точно не на esp-now. Все крутится вокруг трёх библиотек от одного автора и сканера блютус. Ссылки сейчас дам.
Стартовый код отсюда
И сканер отсюда
 
Изменено:
  • Лойс +1
Реакции: Олег Поляков

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
232
171
www.1812.ru
Выложил новую версию 2.23 прошивки.
В ней:
1. Добавлена новая цветовая схема интерфейса "Калейдоскоп".
2. Сделано обновление прошивки с sd-карты. (Для этого необходимо откомпилировать скетч с Partition Scheme "Minimal SPIFFS". Файл прошивки firmware.bin выложить в корень sd-карты).
3. Оптимизирована процедура индексации аудио-файлов в папках Проигрывателя.
 
  • Лойс +1
Реакции: Sturdm и iponkada2

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
232
171
www.1812.ru
@iponkada2, насколько я понимаю, декодированием из разных форматов занимается библиотека Audio.
В ней есть декодер HELIX-mp3 и -aac. Также есть декодер OPUS для Fullband, декодер n VORBIS и декодер FLAC. Далее, цифровой декодированный сигнал поступает на вход DAC: по DOUT передаются поочерёдно данные левого и правого каналов; по BLCK - тактовая частота для синхронизации потока DOUT; по LRC - синхронизированные текстовые данные (например, текст песни).
 
  • Лойс +1
Реакции: iponkada2

vglukas

★✩✩✩✩✩✩
5 Мар 2025
49
12
На новой версии странная ситуация со входом- на адрес 192.168.4.1 зайти не удалось ни с десятки,ни с семёрки, ни с ноута ни с компа ни с телефона.Пришлось менять логин и пароль прямо в скетче.