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

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

Версия 2.50 от 01.07.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-архиве)
Версия 2.45 (65.8 Mb в zip-архиве)
Версия 2.46 (65.8 Mb в zip-архиве)
Версия 2.47 (65.8 Mb в zip-архиве)
Версия 2.48 (67.2 Mb в zip-архиве)
Версия 2.49 (66.2 Mb в zip-архиве)
Версия 2.50 (66.2 Mb в zip-архиве)
(Bin-файлы для прошивки находятся в папках SD-card.)

Модификация версии 2.45 (01.06.2025) от участника форума Sergggg (1.1 Mb в rar-архиве) с будильником по дням и ещё целым рядом дополнений.
Модификация версии 2.47 (22.06.2025) (76.6 Kb в rar-архиве)
Мод на радио Олега Полякова.
ВНИМАНИЕ! Если ставить с версией библиотеки audio 3.0.12, то необходимо заменить файл моим Audio.cpp. В авторской была ошибка.
В моем моде доработано:

Немного переделана схема подключения периферии.
C++:
//Энкодер
#define CLK 41
#define DT 40
#define SW 39
#define PIN 1  // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define IR_PIN 2  // пин подключения ИК-датчика

// DAC I/O used
#define I2S_DOUT 38  //DIN
#define I2S_BCLK 21  //BSK
#define I2S_LRC 47   //LCK

//SD-card reader
#define SD_CS 11
#define SPI_MOSI 12
#define SPI_MISO 13
#define SPI_SCK 14

//TFT-screen pin for ESP32
#define TFT_CS 3     //case select connect to pin 3
#define TFT_RST 8    //reset connect to pin 8
#define TFT_DC 18    //AO connect to pin 32  (not sure that this is really used)  try pin 18
#define TFT_MOSI 17  //Data = SDA connect to pin 17
#define TFT_SCLK 16  //Clock = SCK connect to pin 16
#define MAX_ALARMS 5
//Пин управления яркостью подсветки дисплея
#define TFT_LED 42
Пин подключения индикатора батареи после делителя: 4
Менять пины не очень хорошо, могут появиться проблемы.

Пульт д.у.- немного переделанный алгоритм управления. Радио запрограммировано на
использование пульта от приставки x96 ( иллюстрация )
Пульт должен быть в кодировке NEC.
Так как пока нет веб для настроек кодировок пульта, пока в случае необходимости придется менять коды в InternetRadio.ino.
Для удобства они вынесены в define.
C++:
#define off 0x40
#define repeat 0x42
#define next 0x50
#define prev 0x51
#define up 0x16
#define down 0x1a
#define swap 0x4c
#define mute 0x5a
#define menus 0x44
#define clocks 0x11
#define fav 0x19
#define randoms 0x13
#define ganr 0x4e
#define ganrall 0x0d
#define ganrp 0x0c
#define lok 0x4a
#define lokall 0x09
#define lokp 0x08
#define next10 0x54
#define prev10 0x55
Здесь для изменения кодов под другой пульт, нужно как-то узнать код необходимой кнопки и внести ее в define.

Вкратце, кнопка "randoms" это ОК, выбирает случайную станцию. Если находиться в меню, то подтверждение.

Кнопка repeat повтор предыдущих трех станций (запоминаются в EEPROM).

menus - главное меню.

Кнопка на радио которая тоже немного изменена: однократное нажатие - это повтор предыдущих.

В индикацию батареи добавил анимацию зарядки, только проверить как работает у меня нет возможности.

Добавил для удобства ОТА, пароль при запросе admin.

По вэб управлению:
В настройках, в подменю "Радио" добавлен переключатель поведения кнопки энкодера - громкость регулируется с нажатием или без.

Добавлены будильники на вкл. и выкл. с регулировкой громкости включения и выбором дней недели срабатывания,
их количество можно установить в #define MAX_ALARMS 5.

Запоминаются все состояния радио, предыдущие станции на момент выключения.

В будильники добавлены меню выбора что запустится: радио или проигрыватель.

При переделке стараюсь делать максимум повторения кода автора.

Полностью побеждены перезагрузки на audio 3.0.12, в стоке они все же были, теперь радио на мертвых и полумертвых станциях будет сначала переключаться на предыдущие, затем просто переключаться на следующую.

Новая фишка: теперь в меню радио есть настройка - удалять нерабочие станции. С этой настройкой спешить с переключением станций не нужно, может иногда стереть и рабочие, нужно все случаи проверять, радио само всё делает. Нужно лишь дождаться конца цикла проверки.

Что еще не указал - спрашивайте на форуме.

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

ESP32-audioI2S-master (https://github.com/schreibfaul1/ESP32-audioI2S) - версия 2.0.0 (вот на этих версиях проверено и работает: https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.8 и https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.7
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. Улучшен алгоритм обработки сигналов с ИК-пульта.
Версия 2.45 от 30.05.2025
  1. Все надписи на дисплее и в мониторе порта приведены к литературному русскому языку.
  2. Исправлена досадная ошибка, когда при сохранённом режиме Проигрыватель при включении запускалась сохранённая радио-трансляция.
  3. Добавлен целый ряд поясняющих сообщений, транслируемых в серийный порт во время запуска и работы прибора.
  4. Реализован альтернативный способ выбора треков Проигрывателя через энкодер и ИК-пульт: поворот энкодера - просмотр информации о следующем/предыдущем звуковом файле без его воспроизведения; нажатие на кнопку энкодера - запуск воспроизведения файла; нажатие на кнопку - отмена выбора и возвращение в окно "Проигрыватель".
  5. Вызовы и отработка функции воспроизведения звуковых файлов PlayMusic и связанных с ней функций полностью перенесены на нулевое ядро, что позволило оптимизировать загрузку ядер процессора и высвободить память.
  6. Меньше перезагрузок на "висящих" станциях интернет-вещания (но это не точно, надо тестировать, тестировать, тестировать!)
Версия 2.46 от 01.06.2025
  1. Исправлена ситуация с перезагрузкой прибора во время боя курантов, выявленная участником форума VILUKAS.
  2. Добавлен контроль wi-fi соединения и оповещение в случае его потери.
  3. Исправлен ряд минорных погрешностей.
Версия 2.47 от 10.06.2025
  1. Переработано индексирование аудио-файлов для Проигрывателя. Отныне при индексировании можно использовать информацию mp3-тэгов в файлах (задаётся в настройках).
  2. В web-интерфейс добавлена возможность индексирования аудио-файлов в отдельной выбранной папке.
  3. Теперь, как и для интернет-радио, сделан альтернативный способ выбора трека для воспроизведения в Проигрывателе через вращение ручки энкодера.
  4. Так же как и для интернет-радио, в web-интерфейс добавлена возможность постраничного просмотра списка аудио-файлов в аудио-папках и в Избранном с возможностью выбора трека для воспроизведения.
Версия 2.48 от 22.06.2025
  1. Доработано индексирование аудио-файлов.
  2. Улучшена стабильность функционирования.
  3. Оптимизированы целочисленные переменные.
  4. Устранены мелкие погрешности, не влияющие на работу устройства.
Версия 2.49 от 26.06.2025
  1. Продолжилась борьба с перезагрузками ESP при попытке соединения с аудио-хостами с длительным временем отклика (скорее всего, заблокированными).
    Замечено, что такие сайты приводят к срабатыванию watchdog с последующей перезагрузкой даже на штатных примерах автора библиотеки ESP-audioI2S.
    Благодаря использованию функции setConnectionTimeout этой библиотеки со значением таймаутов 120 ms, удалось решить проблему перезагрузок
    при обращении к "тугим" сайтам. Но, это нестандартное решение требует дополнительных тестирований.
  2. Коммуникационные задачи (Communication task) перенесены на 0 ядро процессора, а задачи обработки звука (Radio) - на ядро №1.
Версия 2.50 от 01.07.2025
  1. Улучшена функция поиска в списках станций интернет-трансляций через web-интерфейс.
  2. Написан функционал поиска аудио-записей на sd-карте через web-интерфейс.

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

Вложения

Изменено:

Комментарии

Олег Поляков

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

Версия 2.50 от 01.07.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-архиве)
Версия 2.45 (65.8 Mb в zip-архиве)
Версия 2.46 (65.8 Mb в zip-архиве)
Версия 2.47 (65.8 Mb в zip-архиве)
Версия 2.48 (67.2 Mb в zip-архиве)
Версия 2.49 (66.2 Mb в zip-архиве)
Версия 2.50 (66.2 Mb в zip-архиве)
(Bin-файлы для прошивки находятся в папках SD-card.)

Модификация версии 2.45 (01.06.2025) от участника форума Sergggg (1.1 Mb в rar-архиве) с будильником по дням и ещё целым рядом дополнений.
Модификация версии 2.47 (22.06.2025) (76.6 Kb в rar-архиве)
Мод на радио Олега Полякова.
ВНИМАНИЕ! Если ставить с версией библиотеки audio 3.0.12, то необходимо заменить файл моим Audio.cpp. В авторской была ошибка.
В моем моде доработано:

Немного переделана схема подключения периферии.
C++:
//Энкодер
#define CLK 41
#define DT 40
#define SW 39
#define PIN 1  // кнопка подключена сюда (PIN --- КНОПКА --- GND)
#define IR_PIN 2  // пин подключения ИК-датчика

// DAC I/O used
#define I2S_DOUT 38  //DIN
#define I2S_BCLK 21  //BSK
#define I2S_LRC 47   //LCK

//SD-card reader
#define SD_CS 11
#define SPI_MOSI 12
#define SPI_MISO 13
#define SPI_SCK 14

//TFT-screen pin for ESP32
#define TFT_CS 3     //case select connect to pin 3
#define TFT_RST 8    //reset connect to pin 8
#define TFT_DC 18    //AO connect to pin 32  (not sure that this is really used)  try pin 18
#define TFT_MOSI 17  //Data = SDA connect to pin 17
#define TFT_SCLK 16  //Clock = SCK connect to pin 16
#define MAX_ALARMS 5
//Пин управления яркостью подсветки дисплея
#define TFT_LED 42
Пин подключения индикатора батареи после делителя: 4
Менять пины не очень хорошо, могут появиться проблемы.

Пульт д.у.- немного переделанный алгоритм управления. Радио запрограммировано на
использование пульта от приставки x96 ( иллюстрация )
Пульт должен быть в кодировке NEC.
Так как пока нет веб для настроек кодировок пульта, пока в случае необходимости придется менять коды в InternetRadio.ino.
Для удобства они вынесены в define.
C++:
#define off 0x40
#define repeat 0x42
#define next 0x50
#define prev 0x51
#define up 0x16
#define down 0x1a
#define swap 0x4c
#define mute 0x5a
#define menus 0x44
#define clocks 0x11
#define fav 0x19
#define randoms 0x13
#define ganr 0x4e
#define ganrall 0x0d
#define ganrp 0x0c
#define lok 0x4a
#define lokall 0x09
#define lokp 0x08
#define next10 0x54
#define prev10 0x55
Здесь для изменения кодов под другой пульт, нужно как-то узнать код необходимой кнопки и внести ее в define.

Вкратце, кнопка "randoms" это ОК, выбирает случайную станцию. Если находиться в меню, то подтверждение.

Кнопка repeat повтор предыдущих трех станций (запоминаются в EEPROM).

menus - главное меню.

Кнопка на радио которая тоже немного изменена: однократное нажатие - это повтор предыдущих.

В индикацию батареи добавил анимацию зарядки, только проверить как работает у меня нет возможности.

Добавил для удобства ОТА, пароль при запросе admin.

По вэб управлению:
В настройках, в подменю "Радио" добавлен переключатель поведения кнопки энкодера - громкость регулируется с нажатием или без.

Добавлены будильники на вкл. и выкл. с регулировкой громкости включения и выбором дней недели срабатывания,
их количество можно установить в #define MAX_ALARMS 5.

Запоминаются все состояния радио, предыдущие станции на момент выключения.

В будильники добавлены меню выбора что запустится: радио или проигрыватель.

При переделке стараюсь делать максимум повторения кода автора.

Полностью побеждены перезагрузки на audio 3.0.12, в стоке они все же были, теперь радио на мертвых и полумертвых станциях будет сначала переключаться на предыдущие, затем просто переключаться на следующую.

Новая фишка: теперь в меню радио есть настройка - удалять нерабочие станции. С этой настройкой спешить с переключением станций не нужно, может иногда стереть и рабочие, нужно все случаи проверять, радио само всё делает. Нужно лишь дождаться конца цикла проверки.

Что еще не указал - спрашивайте на форуме.

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

ESP32-audioI2S-master (https://github.com/schreibfaul1/ESP32-audioI2S) - версия 2.0.0 (вот на этих версиях проверено и работает: https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.8 и https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.7
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. Улучшен алгоритм обработки сигналов с ИК-пульта.
Версия 2.45 от 30.05.2025
  1. Все надписи на дисплее и в мониторе порта приведены к литературному русскому языку.
  2. Исправлена досадная ошибка, когда при сохранённом режиме Проигрыватель при включении запускалась сохранённая радио-трансляция.
  3. Добавлен целый ряд поясняющих сообщений, транслируемых в серийный порт во время запуска и работы прибора.
  4. Реализован альтернативный способ выбора треков Проигрывателя через энкодер и ИК-пульт: поворот энкодера - просмотр информации о следующем/предыдущем звуковом файле без его воспроизведения; нажатие на кнопку энкодера - запуск воспроизведения файла; нажатие на кнопку - отмена выбора и возвращение в окно "Проигрыватель".
  5. Вызовы и отработка функции воспроизведения звуковых файлов PlayMusic и связанных с ней функций полностью перенесены на нулевое ядро, что позволило оптимизировать загрузку ядер процессора и высвободить память.
  6. Меньше перезагрузок на "висящих" станциях интернет-вещания (но это не точно, надо тестировать, тестировать, тестировать!)
Версия 2.46 от 01.06.2025
  1. Исправлена ситуация с перезагрузкой прибора во время боя курантов, выявленная участником форума VILUKAS.
  2. Добавлен контроль wi-fi соединения и оповещение в случае его потери.
  3. Исправлен ряд минорных погрешностей.
Версия 2.47 от 10.06.2025
  1. Переработано индексирование аудио-файлов для Проигрывателя. Отныне при индексировании можно использовать информацию mp3-тэгов в файлах (задаётся в настройках).
  2. В web-интерфейс добавлена возможность индексирования аудио-файлов в отдельной выбранной папке.
  3. Теперь, как и для интернет-радио, сделан альтернативный способ выбора трека для воспроизведения в Проигрывателе через вращение ручки энкодера.
  4. Так же как и для интернет-радио, в web-интерфейс добавлена возможность постраничного просмотра списка аудио-файлов в аудио-папках и в Избранном с возможностью выбора трека для воспроизведения.
Версия 2.48 от 22.06.2025
  1. Доработано индексирование аудио-файлов.
  2. Улучшена стабильность функционирования.
  3. Оптимизированы целочисленные переменные.
  4. Устранены мелкие погрешности, не влияющие на работу устройства.
Версия 2.49 от 26.06.2025
  1. Продолжилась борьба с перезагрузками ESP при попытке соединения с аудио-хостами с длительным временем отклика (скорее всего, заблокированными).
    Замечено, что такие сайты приводят к срабатыванию watchdog с последующей перезагрузкой даже на штатных примерах автора библиотеки ESP-audioI2S.
    Благодаря использованию функции setConnectionTimeout этой библиотеки со значением таймаутов 120 ms, удалось решить проблему перезагрузок
    при обращении к "тугим" сайтам. Но, это нестандартное решение требует дополнительных тестирований.
  2. Коммуникационные задачи (Communication task) перенесены на 0 ядро процессора, а задачи обработки звука (Radio) - на ядро №1.
Версия 2.50 от 01.07.2025
  1. Улучшена функция поиска в списках станций интернет-трансляций через web-интерфейс.
  2. Написан функционал поиска аудио-записей на sd-карте через web-интерфейс.

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

Вложения

Изменено:

vglukas

★✩✩✩✩✩✩
5 Мар 2025
74
18
Ревизия чипа: 0
Версия SDK: v4.4.4
ESP32 Chip ID: 5CF7E17C5824
Размер скетча: 1610832 байт
Размер свободной памяти под скетч: 1966080 байт
Размер Flash памяти: 16777216 байт
Частота Flash памяти: 80000000 Гц
Объём свободной памяти: 106292 байт
Общий объём памяти: 308136 байт
Размер самого большого блока свободной памяти: 77812 байт
Наименьший объём свободной памяти с начала загрузки: 87424 байт
 

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19
На счет перезагрузов, у меня основная проблема все-же была из-за заблокированного pcradio.ru... Теперь стало в разы лучше.
 

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19

@vglukas,
Ну как? Разблокировал... Проверьте у себя как он работает, У меня сайт кое-как открывался а радио не играло и из-за этого был перезагруз.

@Олег Поляков,
Может придумаете как решить эту проблему, я не могу...
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
74
18
Попробую ка я вернуться на предыдущую версию, нужно же понять что происходит.Ладно понимаю есть блокировки радио, но почему нет перехода с трека на трек в проигрывателе. Вот у меня трек отыграл, счётчики обнулились на этом же треке, все движения нет, потом прошло время ударили куранты и снова пошел сначала этот же трек.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
Может придумаете как решить эту проблему, я не могу...
Если проблема перезагрузки действительно вызвана долгим ответом сайта аудио-трансляции, то решить её будет не сложно.
Введём переменную timeout < WDT_TIMEOUT и при обращении к сайту будем замерять время отклика. Если оно будет больше timeout, то будем вызывать команду audio.stopSong() и информировать на дисплее и в web-интерфейсе, что сайт не отвечает. Мне пока так думается.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
Объём свободной памяти: 106292 байт
Общий объём памяти: 308136 байт
Размер самого большого блока свободной памяти: 77812 байт
Наименьший объём свободной памяти с начала загрузки: 87424 байт
Максимально получается можно задействовать 106292 байт. Но так лучше не делать. Память нужна для декодеров и буфера библиотеки Audio.

Ой, я писал про процесс "Radio" - правильно писал, а дал строчку для процесса "Comm". Виноват, исправляюсь!
Надо здесь память увеличивать:
C++:
#define RADIO_STACK_SIZE 12000   //13000  //12000  //8800 байт
 

vglukas

★✩✩✩✩✩✩
5 Мар 2025
74
18
@Олег Поляков,
Уже увеличил и там и там и прошил, начало работать стабильнее выбрасывать только на мертвых потоках. Но по прежнему перейти мертвую станцию не удается. А также по-прежнему не переключаются треки на проигрывателе .pcradio.ru на компе работает.

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

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
@vglukas, написал остановку попыток достучаться до станции, если она долго не отвечает.
Прошу по возможности проверить и написать помогло ли.

На "тугих" сайтах должно выдавать сообщение:
Интернет-радиостанция очень долго не отвечает.
 

Вложения

  • Лойс +1
Реакции: vglukas

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19

@Олег Поляков,
Всё равно на баннере "немного терпения" виснет и перезагружается, Вроде как процесс audio все вешает и система ни на что не отвечает из-за этого нельзя мертвую ссылку проскочить. Это касается именно тех ссылок, которые как-бы есть, но не отвечают.

@Олег Поляков,Ну да, я тоже перенаправил себя в другую страну для этого сайта, и тоже все работает. Хотя раньше все нормально было. Особенность в том, что сам сайт pcradio.ru - работает, а музыка не играет.
 
Изменено:

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru

@Олег Поляков,
Всё равно на баннере "немного терпения" виснет и перезагружается.
Так эта же другая история.
Есть две ситуации:
1. Сайт очень долго вообще не отвечает. В этом случае у меня отрабатывает новая процедура отказа от попыток достучаться до сайта и оповещения "очень долго не отвечает".
2. Сайт отвечает, но скорость связи с сайтом не позволяет прослушать трансляцию. В этой ситуации появляется "немного терпения". Если перезагрузка происходит в этой ситуации, то буду копать там. Беда в том, что у меня радио не перезагружается и пока не могу смоделировать проблемную ситуацию.
 

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19
@Олег Поляков,
" Беда в том, что у меня радио не перезагружается и пока не могу смоделировать проблемную ситуацию."

Хорошо вам, но неужели во всем наборе станций не найдете не рабочую?
Или самому придумать не отвечающую ссылку... Только не которая сразу 404.
А какую ставите библиотеку audio? В ней может быть проблема.
 
Изменено:

vglukas

★✩✩✩✩✩✩
5 Мар 2025
74
18
Сейчас на работе вечером перепошью.
А ещё вопрос в тему: сами папки можно редактировать и если можно в каком софте?
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
@Олег Поляков,
Хорошо вам, но неужели во всем наборе станций не найдете не рабочую?
Или самому придумать не отвечающую ссылку...
Таких станций у меня в списке полно, но они у меня не вызывают перезагрузку.

@Олег Поляков,
А какую ставите библиотеку audio? В ней может быть проблема.
У меня та, которая в Arduino IDE декларирует себя как 2.0.0, хотя по факту тут выяснили, что она 3.x.

сами папки можно редактировать и если можно в каком софте?
Если вы имеете в виду папки с музыкой для Проигрывателя, то через Проводник Windows вручную.
 
Изменено:

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19
Таких станций у меня в списке полно, но они у меня не вызывают перезагрузку.


У меня та, которая в Arduino IDE декларирует себя как 2.0.0, хотя по факту тут выяснили, что она 3.x.
Вечером попробую поставить через Arduino IDE, я ставлю последнюю для второго ядра- 3.0.12, тоже слегка модифицированную, чтобы радио не орало сразу на малых громкостях.
 
Изменено:

vglukas

★✩✩✩✩✩✩
5 Мар 2025
74
18
@Олег Поляков,
Нет я имею ввиду ссылки радиоканалов, можно ли редактировать не в вебе а например в exele, чтобы где-то почистить от мертвых а где то добавить свои.
И ещё вопрос что делать с проигрывателем, отдельно треки играют, автоматического перехода на следующий трек не происходит, трек по окончании выбивает нули в длительности и все дальше движения нет, нужно переключать вручную на следующий трек.У меня две папки, выбор папки для воспроизведения работает, папка выбирается.От добавления памяти еффект есть, теперь перезагрузка начинается после трёх четырех мертвых станций, а может конечно при попадании на блокированную, добавил по 6кб в обе строки.
 
Изменено:

sergeifrost

✩✩✩✩✩✩✩
3 Дек 2019
2
0
У кого получилсось прошить можете создать бинарники чтобы прошивать через Flash DownLoad Tool . Все равно же схема неизменна и компоненты все. Удобнее будет всем думаю.
 

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
можно ли редактировать не в вебе а например в exele, чтобы где-то почистить от мертвых а где то добавить свои.
Можно редактировать в любом текстовом редакторе. radio*.ini - обычный csv-файл с разделителями в виде "|".

И ещё вопрос что делать с проигрывателем, отдельно треки играют, автоматического перехода на следующий трек не происходит, трек по окончании выбивает нули в длительности и все дальше движения нет, нужно переключать вручную на следующий трек.У меня две папки, выбор папки для воспроизведения работает, папка выбирается.
Пока не знаю что делать, поскольку не могу у себя смоделировать такое поведение Проигрывателя.
 
  • Лойс +1
Реакции: VILUKAS

sergggg

★✩✩✩✩✩✩
14 Май 2024
39
19
И ещё вопрос что делать с проигрывателем, отдельно треки играют, автоматического перехода на следующий трек не происходит, трек по окончании выбивает нули в длительности и все дальше движения нет, нужно переключать вручную на следующий трек.
Причину нашёл, оказывается виновата библиотека audio, нормально работает на этой https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.8 и предыдущая 3.0.7. Но https://github.com/schreibfaul1/ESP32-audioI2S/releases/tag/3.0.7 работает лучше у меня как будто.
 
Изменено:
  • Лойс +1
Реакции: VILUKAS

VILUKAS

★✩✩✩✩✩✩
22 Мар 2025
29
12
@Олег Поляков, По поводу правок по перезагрузке, перепрошил новыми файлами, перезагружается реже перелистнуть можно, но если на ней стал все- перезагрузка Еще один момент не сохраняется выбор жанра который сделан с Энкодера хотя после выбора жанра в настройках нажимаешь сохранить, выбор сохраняется только в веб. И хотел спросить что означают две цифры через разделитель в файле ini.
 
Изменено:

Олег Поляков

★★★✩✩✩✩
18 Янв 2022
267
197
www.1812.ru
@VILUKAS,
поясните, пожалуйста: вы после смены жанров энкодером заходите в меню "Настройки", выбираете подменю "Экран и шрифт", ставите курсор на "[Сохранить настройки]", нажимаете кнопку для сохранения?

Формат записи в radio*.ini следующий:
[жанр]|[локация]|[url станции]|[название станции]

Жанры кодифицируются так:
0 - ВСЕ СТАНЦИИ
1 - КЛАССИКА
2 - ЭТНО
3 - ДЖАЗ
4 - РОК
5 - ПОП
6 - ПСИХОДЕЛИКА
7 - ТАНЦЫ
8 - РЕЛАКС
9 - РЕТРО
10 - ДЕТСКОЕ
11 - АУДИОКНИГИ
12 - НОВОСТИ
13 - СПОРТ
14 - СССР
15 - ДИСКО
16 - РАЗГОВОРНОЕ
17 - РЭП
18 - КАНТРИ
19 - БЛЮЗ
20 - ШАНСОН

Локации кодируются так:
0 - весь мир
1 - Россия
2 - Европа
3 - Азия
4 - Африка
5 - Австралия
6 - Америка
 
  • Лойс +1
Реакции: VILUKAS