WiFi-транслятор интернет-радиопотоков
Возникла необходимость транслировать сформированный аудиопоток через сеть Интернет на удалённые радиопередатчики. Если с формированием m3u-потока сложностей не возникало, то на на приёмной стороне обычно приходится ставить либо компьютер, либо вещательную машину или интернет-транслятор. Было решено пойти по третьему пути и собрать транслятор из покупных комплектующих.
В качестве контроллера была выбрана плата ESP32-S3, обладающая достаточным объёмом памяти и имеющимися в наличии готовыми скетчами под требуемую задачу. Звуковой картой выступил модуль PCM5102, который также возможно приобрести в различных модификациях. Сложностей собрать всё в кучу не возникло и получился одноканальный интернет-радиоприёмник, который стабильно и без затыков работал при потоке 192 кБит/сек с дискретизацией 48 кГц.
Схема соединений проста.
В качестве контроллеров использовались платы ESP32-S3-N16R8 и Waveshare ESP-32-S3-Nano (выводы последней обозначены в скобках). Модули РСМ5102 использовались разные, в том числе из магазина "Чип и Дип" (на разных модулях различные обозначения выводов, в скобках указаны выводы нонеймовских китайских модулей). Стоит обратить внимание на следующее:
- вывод внутренней синхронизации MCLK/SCK должен быть притянут к "земле" на разъёме или на плате должна быть поставлена капля припоя на соответствующих площадках;
- вывод XSMT чипа должен быть притянут к 3.3В (на чипдиповском это сделано, на других модулях могут быть сделаны специальные площадки для пайки);
- выводы FLT, FMT и DEMP должны быть заземлены (на чипдиповском это сделано, на других модулях могут быть сделаны специальные площадки для пайки).
Скетч для среды Ардуино лежит тут. В настройках выставить ESP32 Dev Module, Partition Scheme -> Huge APP, Flash Size -> 16M, OPI PSRAM, USB CDC On Boot: Enabled.
Во время работы выяснилось следующее:
- если пропадает WiFi, то трансляция после его восстановления возобновляется;
- если пропадает аудиопоток где-то в дебрях интернета, то при его восстановлении трансляция не возобновляется;
- если при включении конструкции в сеть WiFi есть, а аудиопотока нет, то при его восстановлении трансляция не возобновляется.
Поэтому было принято решение сделать детектор тишины, который бы отслеживал наличие звука на выходе и, при необходимости, перезапускал контроллер. Схема получилась такая:
Пройдёмся по узлам.
На усилитель на транзисторе VT1 подаётся звук с одного из аудиоканалов, здесь сигнал по сути усиливается дополнительно и ограничивается. Затем, транзистор VT2 сигнал детектирует и заряжает конденсатор С4, который тут же начинает разряжаться через резистор R7. Напряжение на конденсаторе отслеживается триггером Шмитта на элементах D1.1 и D1.2 микросхемы К561ЛА7 (аналогичный узел применялся в модуляторе аудиоподнесущей SCA).
При пропадании звука напряжение на С4 уменьшается и, при достижении примерно 2.5 Вольт (а это примерно 15 - 20 секунд) триггер срабатывает и на выводе 4 устанавливается низкий уровень. Цепочка С6R10 формирует короткий отрицательный импульс на входе одновибратора, собранного на элементах D1.3 и D1.4, запуская его (аналогичный одновибратор применялся в схеме автоматического включения компьютера). На выходе одновибратора появляется односекундный отрицательный импульс, который, проходя через инвертор VT5 и ключ VT6, сбрасывает ESP32.
Одновременно, на случай если отсутствие аудиосигнала будет продолжаться более 20 секунд, этот же импульс открывает ключ VT3, который заново заряжает С4 и слежение за наличием сигнала продолжается, подавая сигнал сброса на контроллер каждые 15 - 20 секунд.
Если при включении конструкции выясняется, что беспроводная сеть есть, а аудиопотока нет, то на этот случай существует схема первоначального сброса на времязадающей цепочке С5R11 и транзисторе VT4, который запускает одновибратор при включении и, соответственно, запускает отслеживание наличия сигнала.
Конструкция была собрана на макетной плате с помощью МГТФ и помещена в маленький чёрный корпус с внешним блоком питания на 5 Вольт. Звуковой модуль расположен под платой ESP32.
На плате был также собран выходной буфер аудиосигнала, но впоследствии от него было решено отказаться.
Конструкция показала устойчивую работу и стабильный перезапуск при пропадании аудиопотока.