После прочтения статьи KaRadio + Smalody = Love загорелся желанием сделать нечто похожее. KaraWin - автор проекта интернет-радио KaRadio32 . Очень подробная видеоинформация об этом радио на канале Konstantin Pavljuchenko в YouTube и здесь: WI-FI интернет радио DIY . Вроде все просто и понятно, но как оказалось, не совсем. Пришлось разбираться. В итоге интернет-радио "заработало". На самом деле радио работало, но не так как я ожидал... Ссылка на рабочие файлы для повторения описанного ниже интернет-радиоприемника, использующего модуль ESP32-WROVER в самом конце статьи.
Мое повторение конструкции не задалось. В чем оказался подвох? Оказалось - все просто, как обычно. Во - первых, в файле конфигурации от автора выявилась ошибка - у двух энкодеров оказались общие выводы модуля ESP32. В результате энкодер якобы оказался не работоспособным. Во-вторых, я сконфигурировал KaRadio32 на отключение дисплея через 5 с при бездействии KaRadio32. Поэтому отсутствие информации на дисплее радио в основном режиме работы я воспринял как неисправность. В- третьих - в плейлист радио я умудрился внести единственную не работающую радиостанцию... Ну и самое главное - при программировании модуля ESP32 я не удерживал нажатой кнопку BOOT. И еще... при изменении файла конфигурации нужно быть очень внимательным.
Сразу оговорюсь, проект реализован в виде рабочего макета на модуле ESP32-WROOWER-B, имеющего программную память размером 4 Мб. Как показала практика, возможно использовать также модуль ESP32-WROWER-E, у которого программная память составляет 16 Мб - но целесообразность такого использования сомнительна. Процесс изготовления был интересен и познавателен. В результате появилась конструкция WEB-радио с поддержкой битрейта до 320 кбит/с, поддержкой инфракрасного приемника (протокол NEC), цифрового аудио-интерфейса I2S, OLED дисплея I2C 1,3 дюйма, UART TTL, светодиода и различных органов управления: двух экнодеров с кнопкой и отдельной группой кнопок в количестве 3 шт. Группа 0 энкодера и кнопок имеет приоритет по громкости. Соответственно группа 1 - по перебору станций из загруженного в радио плей-листа. В предложенной конфигурации возможно использовать аналоговый выход аудио (декодирует ESP32) с посредственным качеством (не используется - отсутствует разьем для подключения ). Количество свободных выводов модуля ESP32 определяет конфигурацию настраиваемой периферии для управления WEB-радио. Для переназначения выводов ESP32 нужно изменить файл конфигурации, определив выводы для кнопок, энкодеров, IR приемника, светодиода. Подробнее здесь.
Далее распишу и прокомментирую что и как делать. Главное что нужно понимать - основная конфигурация исходной схемы, предложенной автором KaRadio32, не изменяется.
Итак, для реализации проекта интернет-радио KaRadio32 потребуются четыре части: программная, аппаратная, реализация и программирование.
Схема электрическая принципиальная от автора интернет-радио KaRadio32 для модуля ESP32-WROOM представлена ниже и в дальнейшем, в части интерфейсов, не изменяется. Обращаем внимание только на нумерацию логических выводов типа IOxx, где xx - это номер, который будем использовать в файле конфигурации. У модулей WROOM и WROVER физические выводы не совпадают.
Для использования дополнительных органов управления корректируется лишь файл конфигурации.
Запрещено изменять фрагмент файла конфигурации, относящийся к интерфейсу SPI (строки 7, 8, 9). В противном случае программа окажется полностью не работоспособной.
P_MISO,data,u8,19
P_MOSI,data,u8,23
P_CLK,data,u8,18
Логические выводы ESP32, которые возможно изменять по функциональному назначению, представлены ниже. Обращаю внимание, что для логических выводов имеются ограничения. GPIO34...GPIO39 предназначены только для ввода! Эти выводы не имеют внутренних подтягивающих резисторов. Их нельзя использовать как выходы, поэтому используйте эти контакты только как входы или как вход АЦП.
Подробнее здесь: https://github.com/karawin/KaRadio32_4/blob/master/HardwareConfig.md
Текущая конфигурация
IO35 IR_SIGNAL input
IO34 BTN0_A input
IO32 BTN0_C input
IO33 BTN0_B input
IO12 LED_GPIO output
IO2 ENC1_A input
IO4 ENC1_BTN input
IO15 ENC1_B input
IO5 ENC0_A input
IO21 ENC1_BTN input
IO27 ENC1_B input
Автор KaRadio32 предусмотрел возможность использовать джойстик вместо или вместе с энкодером или кнопками. Джойстик представляет собой набор из двух кнопок, но обе они не могут быть нажаты одновременно. GPIO должен быть ADC, т.е. gpio32...39 или 255, если он не используется.
Джойстик 0 регулирует громкость, джойстик 1 управляет выбором станции. Кнопка 0 — 3,3 В. Кнопка 1 — 3,3/2 В.
Пример джойстика:
Измененная схема с использованием модуля ESP32-WROVER с соответствующим содержимым файла конфигурации и используемыми выводами для внешней коммутации представлена ниже:
Схема проверена в работе с модулями ESP32-WROVER-B и ESP32-WROVER-E.
1 Часть программная
1.1 Заходим на страницу https://www.espressif.com/en/support/download/other-tools для скачивания программы Flash Download Tools. На текущий момент это версия 3.9.2 для платформы WINDOWS PC. Размер файла 31,2 Мб. Программа нужна для программирования модуля ESP32 подготовленными файлами.
Отмечу, что есть еще одно решение для программирования ESP32 - утилита esptool. Для ее использования дополнительно требуется установить PYTON на компьютер. Подробнее в статье Прошивка esp8266 через esptool в Windows 10 или Esptool для ESP8266 или Как стереть память esp8266 на windows 10. Утилита позволяет прочитать и сохранить содержимое памяти модуля ESP32 в файл, чего не делает Flash Download Tools.
1.2 Заходим на страницу https://github.com/karawin/KaRadio32_4 для скачивания всего проекта в виде архива KaRadio32_4-master.zip размером 62,7 Мб. Release 2.3 R0 Stable. Verson adapted to ESP_IDF 4.4 Work in progress. Works on any esp32 board. В проекте находятся файлы прошивки модуля ESP32 и файлы конфигурации выводов (пинов) модуля ESP32. Важный момент: все действия будут производиться только с файлами из архива.
1.3 Заходим на страницу https://www.youtube.com/watch?v=iTx4CmvM2Js для скачивания программы преобразования файла конфигурации с расширением *.csv в файл конфигурации с расширением *. bin для прошивки модуля ESP32 . Или воспользуемся ссылкой с указанной страницы - Download generator: https://drive.google.com/open?id=1An6... И скачаем файл Config_GEN_new.zip размером 6,8 Мб.
1.4 Скачаем и установим на компьютер программу NOTEPAD++. Это удобный текстовый редактор с возможностью изменить кодировку текста при необходимости. Для нас актуальна кодировка UTF-8. В противном случае будут проблемы с кириллицей, отображаемой на экране дисплея интернет-радио при редактировании плей-листа. Этим редактором будем править файл с расширением *.csv .
2 Часть аппаратная
2.1 Приобретаем модуль WI-FI ESP32-WROVER-B со встроенной антенной. Этот вариант целесообразен, если радио будет встраиваться в не металлический корпус. В модуле ESP32-WROVER имеется дополнительная память статической ОЗУ (PS RAM) для буферизации потока данных. У производителя ESPRESSIF можно посмотреть описание модуля и отличие друг от друга разных модулей.
Под экраном модуль выглядит так:
Вверху справа видно посадочное место под разъем антенны. Резистор R15 подключает встроенную антенну. С разъемом модуль называется ESP32-WROVER-IB. Предполагается наружная антенна. Антенну нужно приобрести дополнительно. Этот вариант целесообразен, если радио будет встраиваться в металлический корпус.
Для примера приведу ссылку на AliExpress где я приобретал модуль ESP32-WROVER-B: https://aliexpress.ru/item/33010957105... На странице продавца приведены габариты модуля с назначением выводов. Шаг между выводами 1,27 мм. Напряжение питания: 2,7 В ~ 3,6 В. Размер модуля 18х31,4мм. Или здесь: https://aliexpress.ru/item/33007945338...
2.2 Приобретаем импульсныйпреобразователь напряжения в виде понижающего модуля питания Mini 560 на 3,3 В выходного напряжения. Размер модуля 18х30мм. Например, здесь: https://aliexpress.ru/item/32742116421... Или в любом другом месте. Или любой другой аналогичный с выходным напряжением 3,3В и выходным током не менее 1А. Перемычку, помеченную красным требуется запаять. Активируется светодиод на индикацию наличия выходного напряжения 3,3 В.
Рекомендую ознакомиться со статьей Схема перезапуска модуля DC-DC преобразователя Mini 560 . Это если модуль при включении иногда не будет выдавать напряжение 3,3 В.
2.3 Приобретаем моно усилитель MAX98357А. Размер модуля 18х19мм. Например, здесь: https://aliexpress.ru/item/33059488515... Этот усилитель класса D имеет входной цифровой аудио интерфейс I2S и аналоговый выход. Усилитель позволяет ступенчато изменять усиление при подключении вывода GAIN через резистор 100k либо к выводу GND (усиление +15 ДБ), либо к выводу Vin (усиление +3 ДБ). Если вывод GAIN оставить не подключенным, то усиление составит +9 ДБ. Усилитель можно сконфигурировать для воспроизведения либо правого, либо левого канала. В конфигурации по-умолчанию воспроизводятся оба канала. Параллельно интерфейсу I2S можно добавить цифровой декодер на микросхеме PCM5102A и получить качественный аналоговый линейный выход. Для этого предусмотрен отдельный разъем для подключения .
2.4 Приобретаем I2C OLED модуль, матрица 128*64 с размером экрана 1,3 дюйма. Размер модуля 33,6х35,5мм. Модуль монохромный: белый, либо голубой. Я выбрал последний. Микросхема контроллера SH1106, либо SSD1306. Не критично, корректируется в процессе программирования конфигурации. Приобретаем, например, здесь: https://aliexpress.ru/item/4001204806598...
2.5 Модуль поворотного энкодера. Я выбрал на круглой плате. Приобретаем, например, здесь: https://aliexpress.ru/item/32915420023... На плате установлены дополнительные резисторы и конденсаторы.
2.6 По желанию инфракрасный пульт дистанционного управления плюс ИК приемник. Приобретаем, например, здесь: https://aliexpress.ru/item/33047296504... Батарейка размером 2025 в комплекте отсутствует. Приобретается отдельно. Инфракрасный фотоприемник плате типа TL1838. Лист данных на TL1838 можно посмотреть здесь: https://robototehnika.ru/file/TL1838.pdf
Мне прислали пульт с другим расположением кнопок - группа стрелок снизу. Конкретно под такой пульт - с расположением группы стрелок снизу и буду прописывать управляющие коды в файл конфигурации.
K_UP,data,string,0xFF0018
K_LEFT,data,string,0xFF0008
K_OK,data,string,0xFF001C
K_RIGHT,data,string,0xFF005A
K_DOWN,data,string,0xFF0052
K_0,data,string,0xFF0019
K_1,data,string,0xFF0045
K_2,data,string,0xFF0046
K_3,data,string,0xFF0047
K_4,data,string,0xFF0044
K_5,data,string,0xFF0040
K_6,data,string,0xFF0043
K_7,data,string,0xFF0007
K_8,data,string,0xFF0015
K_9,data,string,0xFF0009
K_STAR,data,string,0xFF0016
K_DIESE,data,string,0xFF000D
2.7 Перфорированная монтажная плата размером 70х50мм. Шаг отверстий 2,54 мм. Односторонняя металлизация. Приобретаем, например, здесь: https://aliexpress.ru/item/1005003842372656...
2.8 Модуль UART TTL CP2102 , 6-контактный. Вход MICRO USB. Приобретаем, например, здесь: https://aliexpress.ru/item/1005001547371460... Нужен для программирования модуля ESP32-WROVER-B . Возможно применение любого аналогичного с напряжением 3.3 В. На этот модуль с микросхемой CP2102 устанавливать драйвера не нужно.
3 Реализация
3.1 Приведу распиновку модуля модуля ESP32-WROOWER-B из листа данных на модуль. Вид на пины модуля приведен со стороны металлического экрана модуля.
Здесь важно выделить необходимый минимум для программирования модуля. Это цепь сброса – вывод 3 EN, цепь питания выводы 1,15,38,39 GND (причем вывод 39 – это термопад микропроцессора модуля - выделенная квадратная площадка посередине корпуса), цепь питания вывод 2 3V3, цепь для модуля UART выводы 35 TXD0 и 34 RXD0, цепь BOOT для программирования - вывод 25 IO0. Производитель рекомендует номинал конденсатора по цепи EN 1,0 мкФ.
3.2 Начинать распайку модуля ESP32-WROWER-B на перфорированную монтажную плату рекомендую перевернув модуль для визуализации надписей напротив выводов модуля. Припаиваться к выводам модуля удобно проволочными лужеными перемычками в два ряда, поскольку шаг выводов 1,27 мм. Не забываем про конденсаторы, установленные около выводов питания модуля на плате. Земли на модуле на всякий случай продублировал проволочными перемычками, хотя тестером выводы прозваниваются накоротко.
ВНИМАНИЕ! РАБОЧЕЕ НАПРЯЖЕНИЕ РАВНО 3,3 В И НЕ ДОЛЖНО ПРЕВЫШАТЬ 3,6 В.
Общая компоновка произвольная. У меня получилась как на рисунке ниже. Модуль усилителя расположился над модулем питания. Разъемы и кнопка расположены так (сверху - вниз, слева - направо): разъем для программирования, кнопка BOOT, справа от нее разъем IR приемника, ниже разъем энкодера 0 и энкодера 1, вверху справа разъемы для кнопок группы 0 и 1 (1 не задействован), затем разъем дисплея и разъем цифрового аудио интерфейса I2S. Монтаж выполнен проводом МГТФ, но можно любым другим. Главное - быть уверенным в качестве выполняемых монтажных работ.
Обращаю внимание, что внешние подключения можно назначать в файле конфигурации. Также напомню, что в родном файле конфигурации есть ошибки.
3.3 На данном этапе все готово для программирования WI-FI модуля. Ток потребления во время программирования не большой, поэтому достаточно напряжения, подаваемого на модуль WI-FI с модуля UART TTL.
Перед программированием необходимо зажать кнопку BOOT и обеспечить хороший контакт штырей с отверстиями в плате модуля UART TTL, затем подать питание на плату. Такая последовательность действий вызвана отсутствием (в моем варианте) кнопки сброс. Во время программирования кнопку BOOT не отпускать. Лучше в отверстия модуля UART впаять 6 - контактный разъем ( мама ) - будет удобнее.
4. Программирование
4.1 Подготовим файлы для программирования модуля ESP32-WROVER. Для этого разархивируем архив KaRadio32_4-master.zip (см. п.2.1). И скопируем в отдельно созданную папку, например D:\KaRadio32Wrover-bin, файлы из архива:
KaRadio32_4-master\binaries\bootloader.bin
KaRadio32_4-master\binaries\partitions.bin
KaRadio32_4-master\binaries\KaRadio32_4.bin
KaRadio32_4-master\boards\standard_psram.csv
Изменим в папке D:\KaRadio32Wrover-bin название файла standard_psram.csv на nostandard_psram.csv
4.2 Изменим содержимое файла nostandard_psram.csv с указанием нужных выводов модуля ESP32-WROVER, либо указав значение 255, если вывод модуля не используется.
4.3 Преобразуем полученный файл nostandard_psram.csv в файл nostandard_psram.bin программой Config_GEN_new (см. п.1.3) либо другим способом.
4.4 Файл nostandard_psram.bin скопируем в папку. В папке должны оказаться файлы:
D:\KaRadio32WroverB-bin\bootloader.bin
D:\KaRadio32WroverB-bin\partitions.bin
D:\KaRadio32WroverB-bin\KaRadio32_4.bin
D:\KaRadio32WroverB-bin\nostandard_psram.bin
4.5 Для программирования модуля ESP32-WROVER, подключим плату KaRadio32 через модуль UART-TTL к USB порту компьютера и уточним номер виртуального COM-порта. Для этого нужно перейти: Панель управления->Диспетчер устройств и Раскрыть дерево «Порты (COM и LPT). Пусть это будет, например, COM-3.
Далее требуется запустить программу Flash Download Tools (см. п.1.1), выбрать файлы и назначить адреса соответственно картинке ниже.
Удерживая и не отпуская кнопку BOOT на плате KaRadio32, подать питание на плату и нажать кнопку START в окне программы. Дождаться окончания программирования.
Управляющие коды для другого пульта дистанционного управления можно изменить в файле конфигурации. Подробнее об этом рассказывается в видео ролике "Настойка пульта ДУ KaRadio32".
Для ввода команд в KaRadio32 доступны интерфейсы: последовательный (COM), telnet (ip adress:port23) и html. Подробнее - перейти по ссылке.
Полезные команды:
help
infos
sys.version
sys.lcd("0") - установить OLED SH1106
sys.lcd("1") - установить OLED SSD1306
sys.tzo("2") - установить часовой пояс +2
sys.lcdout("15") - служ. информ. вкл. дисплей на 15 секунд
sys.boot - перезагрузка KaRadio32
sys.rotat("0") - OLED повернуть 0 (требуется перезагрузка)
sys.rotat("1") - OLED повернуть 180 (требуется перезагрузка)
wifi.con("ssid","password") - Параметры WI-FI (требуется перезагрузка)
Обязательно установите правильный часовой пояс. Для этого подключитесь по UART или через TELNET к KaRadio32 и отправьте команду: sys.tzo("2") - установится часовой пояс для Москвы. После этого перезагрузитесь. Если у Вас OLED SSD1306 отправьте команду sys.lcd("1"). Если желаете, чтобы OLED не светился все время, отправьте команду sys.lcdout("15") . Через 15 с экран погаснет, но любое обновление информации на экране опять включит дисплей на 15 с.
Первое использование.
- Если точка доступа маршрутизатора неизвестна, веб-радио всегда инициализируется как точка доступа. Подключитесь по Wi-Fi к ssid «WifiKaRadio».
- Перейдите к 192.168.4.1, чтобы отобразить страницу, перейдите к «настройке» «Wifi» и настройте свой ssid ap, пароль, если есть, желаемый IP-адрес или используйте dhcp, если вы знаете, как получить указанный dhcp IP (терминал или сканирование сеть).
- В поле шлюза введите ip адрес вашего роутера.
- Подтвердить. Оборудование перезагружается в новой конфигурации. Подключите ваш Wi-Fi к вашей точке доступа и перейдите к IP-адресу, указанному в конфигурации.
- Вы можете редактировать свой собственный список станций. Не забудьте сохранить список станций на случай возникновения проблем или для нового оборудования.
- если точка доступа уже известна esp32, IP-адрес по умолчанию предоставляется DHCP.
Список станций из разных мест: http://karadio.karawin.fr/infos.php https://kazimentou.fr/divers/ka-radio/playlists/WebStations.txt https://imax9.narod.ru/download/WebStations.txt. Можно загрузить через веб-страницу.
Более подробно о KaRadio32 можно посмотреть или почитать в разных статьях по ссылкам, приведенным в самом начале этой статьи.
P.S. 14.05.2022 модуль WI-FI ESP32-WROVER-B сдох, вернее вышла из строя микросхема программной памяти. Почему - не понимаю. Микросхему памяти заменять не целесообразно - буду заказывать новый модуль. А это минимум месяц... Заказал модуль WI-FI ESP32-WROVER-E. 06.06.2022 Прибыл модуль WROVER-E. Почта работает быстрее, чем я ожидал. Две недели доставки - это быстро. Обычно - месяц. Немного обновил схему (чисто косметически). Все работает.
Сейчас плата моего радио выглядит так:
Внизу располагается разъем для подключения динамика. Вверху слева располагается разъем для программирования, либо для подачи питания. Специально использовал разъем WF-6, чтобы не перепутать соответствие выводов при подключении кабеля питания. Если делать правильно, то все разъемы необходимо использовать подобного типа, но больше перепаивать не буду. Если доведется развести плату печатную, то этот момент учту. А для единичного изделия и так все хорошо. Разьм для группы кнопок 1 не используется. Если понадобится изменить приоритет задействованной групы кнопок с регулирования громкости на перебор станций, необходимо изменить файл конфигурации.
Программирование прошло без проблем. Время программирования составляет несколько минут. Не удобно держать все время нажатой кнопку BOOT. Кнопку нужно заменить штырями PLS-2 и на время программирования замкнуть их джампером. Учту на будущее. Файлы переименованы для удобства использования.
Все файлы, необходимые для повторения интернет-радиоприемника с использованием модуля ESP32-WROVER выложены здесь: https://disk.yandex.by/d/abaLMJn3iKAuEQ или по короткой ссылке здесь: https://cutt.us/NoVuY
Возможно Вам будут интересны другие мои статьи.