Esp32 интернет радио с внутренним dac: Интернет-радио на базе ESP32 и ЦАП UDA1334A / Хабр
|Содержание
Интернет-радио на базе ESP32 и ЦАП UDA1334A / Хабр
Всем привет! Делюсь своим опытом и проектом по созданию проигрывателя интернет-радио на базе ESP32 и ЦАП UDA1334A. Сам проект выложен на github.
Введение
Тема интернет-радио у меня началось с проекта Wi-Fi-радио от AlexGyver. После сборки по гайду (на базе ESP32 и VS1053) не удалось побороть цифровые шумы, да и вообще, идея собирать и настраивать усилитель и колонки не совсем мне нравилась, хотелось в качестве колонок использовать готовое решение — компьютерные колонки с встроенным усилителем и подключением по mini-jack. Покопав бездонный форум 4Pda по теме, нашел вариант реализации с ЦАП UDA1334A. После сборки решение более чем удовлетворило по качеству, осталось оформить проигрыватель в корпус (смоделированный для 3D печати), так и родился данный проект.
Использование ЦАП дает ограничения по декодированию потоков (нет поддержки AAC), но для меня это не было принципиальным ограничением. Большая часть прослушиваемых мной станций вещает в mp3. Но, кому принципиален AAC, данное решение не подойдет.
Схема и компоненты
По схеме достаточно все просто, основные компоненты:
Для информации: дисплеи бывают не только с белым цветом, но и с синим, желтым и зеленым.
Описание подключения по пинам и ссылки на конкретные варианты с али можно посмотреть на странице проекта в github.
Совет по пайке — закладывайте длину проводов с учетом дальнейшего расположения компонентов в корпусе.
Корпус
Изначально я смоделировал корпус под экран 0.96″, но, после некоторого использования он показался слишком мелким, и после поиска больших дисплеев решил взять на 2.42″. Есть модели также с подключением по 4 пинам, поэтому потребовалась только перемоделирование корпуса без изменения самой схемы.
Готовые варианты для сравнения
Корпус состоит из 2 деталей и ручки энкодера. При моделировании постарался оптимизировать модели под печать без поддержек.
Пластик для печати — на ваш вкус (я пробовал на PLA и PETG), особенно понравился вариант с Carbon Fiber PLA, он немного скрывает дефекты печати и дает немного матовую поверхность, приятную на ощупь и визуально.
Рекомендации к печати:
Толщина слоя — на ваш вкус (я печатаю с 0.12)
Поддержка — только от стола
Для деталей корпуса — заполнение 100%
Для ручки энкодера — заполнение, линии периметра на ваш вкус 🙂 После печати в таком положении и настройках печати нужно будет извлечь поддержку.
Рекомендуемое расположение деталей на столе
Если у вас нет 3D принтера, но есть желание собрать устройство, то купите 3D принтер можно поискать друга, который напечатает, либо попробовать поискать услуги по печати в вашем населенном пункте на Авито.
После печати крышки для варианта 2.42″ дополнительно надо срезать/откусить печатные части, выступавшие в роли поддержек.
Это лишнее
Сборка
Отверстия под крепления на ESP32 слишком близко располагаются к изоляторам пинов, поэтому нужно немного подрезать изоляторы на крайних пинах острым ножом.
Подрезаем изоляторы
Сами платы устанавливаются в корпус на болты М2. 5х5 мм, требуется 8 шт.
Монтаж плат
Экран 2.42″ крепится на 4 болта М2.5х4 мм в соответствующие отверстия на крышке.
Монтаж дисплея
Для варианта 0.96″ чуть более хитрое крепление через прижимную планку, которая крепится на 2 болта М2.5х5 мм.
Энкодер устанавливается в отверстие крышки и фиксируется штатной гайкой сверху. На энкодере по умолчанию есть отогнутый элемент из металла для внутренней фиксации, его можно отогнуть или откусить.
Лишнее, откусить или отогнуть
Сам энкодер фиксируется в крышке по направляющим и не требует каких то дополнительных фиксаций.
Крышка с корпусом монтируется на 4 болта М3х5 мм или М3х6 мм с потайной головкой. Закручивайте аккуратно, есть риск перекрутить, при котором может треснуть крышка (у меня так и получилось).
После сборки корпуса на энкодер устанавливается ручка.
Прошивка, настройка
Тут не буду дублировать гайд по прошивке и настройке Wi-Fi-радио от AlexGyver, все достаточно подробно отражено там. Также на хабре есть статья про интернет радио, но на другой компонентной базе, можно также с ней ознакомится. Практически все настройки выполняются через веб-интерфейс, через telnet я настраивал только формат времени командой sys.ddmm(«1»).
Подключение
У проигрывателя всего два выхода — micro-usb для подключения питания и mini-jack для подключения колонок или наушников. Единственное, что хотел бы отметить — стоит использовать качественный блок питания. У меня были проблемы с каким-то noname блоком, постоянные прерывания и перезагрузки. После подключения к BASEUS Compact Quick Charger USB+Type-C, 3A, 20W все они исчезли.
В качестве колонок я использую SVEN SPS-614.
Использование
По управлению — все управление только ручкой энкодера:
Поворот энкодера — регулировка громкости
Нажатие и поворот энкодера — переключение станций
Одинарное нажатие на энкодер — старт/стоп воспроизведения
Двойное нажатие — переключение в режим часов и просмотра ip адреса
Видео использования
Мерцание экрана на фото и видео в реальности незаметны.
Спасибо за внимание! 🙂
UPD:
Добавил вторую версию корпуса со сборкой на двух болтах М2.5. Итого сборка упростилась, достаточно только 14 болтов одной номенклатуры М2.5 для сборки.
В самом корпусе отверстия печатаются без поддержек, и нужно после печати проковырять их шилом или сверлом (или еще чем-то острым).
После сборки можно заклеить отверстия силиконовыми ножками (брал на али).
Karadio — интернет радио на базе ESP32 — Умный дом
Проект находится на стадии тестирования, уверен, это скоро изменится. Для вывода звука можно исплользовать внутренний DAC (ЦАП), находящийся в ESP32 или подключить внешний DAC, например такой на Aliexpress.Ссылка может перестать работать, но можно поиском найти по запросу I2S PCM5102 DAC или просто I2S DAC.
При использовании внутреннего DAC ничего не нужно, кроме усилителя, например PA8403 (с регулятором громкости даже). Либо использовать уже знакомую нам связку ESP32 и VS1053, при этом будет возможность прослушивать потоки AAC, чего нельзя сказать о режиме DAC или PDM. На режиме PDM я не буду останавливаться, потому что смысл будет такой же, как и у внутреннего DAC. Я попробовал включить этот режим, но шум сильный, как во время дождя. Автор Karawin пояснил, что нужна фильтрация. Я не стал заморачиваться, потому что с внутренним DAC качество воспроизведения меня удовлетворило. Если что можно применить внешний DAC или VS1053. Еще есть режим I2SMERU для подключения какого-то особого усилителя, можете сами разузнать.
Сначала займемся прошивкой ESP32. Будем говорить о заливке уже скомпилированной прошивки в память. Все необходимое для прошивки можно взять тут. Программа для прошивки здесь. Сама прошивка в нескольких файлах тут и тут. Скриншот программы, поясняющий куда и что заливать тут. Все выставляете, как написано, но пути к прошивочным файлам у вас могут быть свои (не стоит использовать пути с кириллическими символами, лучше только латиницей). Т. е. распаковываете все файлы для прошивки в отдельную папку (можно назвать ее Flash) на диске C: , потом путем нажатия на многоточия в конце строк прописываете аккуратно все пути к этим файлам. Правее в поле вводите то, что написано, на скриншоте.
Все остальное прописываете, как на скрине, кроме порта COM, его вы меняете на свой. посмотреть его можно в Диспетчере устройств, при подключении ESP32 появится COM порт (если драйверы вы уже поставили). Драйверы зависят от вашей операционной системы и типа USB- COM адаптера, который установлен на вашей ESP32. Скорость BAUD как на картинке. Подключаете ESP32 к компьютеру и нажимаете START (у меня было так, никаких кнопок на самой плате я не нажимал). Ждете окончания прошивки и отключаете плату от USB. Можно приступать к соединению всей периферии.
Схема соединений
Сильно схеме не доверяйте, доверяйте только себе, но нарочно я не ввожу в заблуждение. Батарейки изображены условно, необходимо подключить 5В. Сегодня измерял ток потребления 0,15А при малой громкости. Блока питания на 0,5 — 1А должно хватить. Питание зависит от усилителя.
Итак, если вы используете VS1053, то соединения такие:
VS1053—-ESP32 (номера GPIO)
XCS----- GPIO_NUM_32 RST----- GPIO_NUM_12 XDCS----- GPIO_NUM_33 DREQ----- GPIO_NUM_34 MISO----- GPIO_NUM_19 MOSI----- GPIO_NUM_23 CLK----- GPIO_NUM_18
У меня номера GPIO указаны на самой плате или смотрите распиновку
Если используете внешний DAC по I2S, то соединения такие:
I2S DAC—-ESP32
LRCK——— GPIO_25
BCLK——- GPIO_26
DATA——- GPIO_22
Если используете DAC самой платы ESP32, то GPIO 25 и 26 подключаете к правому и левому каналу усилителя, а также соединяете GND усилителя и GND ESP32. GPIO 22 при этом не нужен. Также и для PDM режим, только надо будет выбрать его в web интерфейсе и все (ну и про фильтр вспомните для этого режима).
На данный момент поддерживается использование дисплея OLED SSD1306 128×64.
Подсоединяем так:
SSD1306——ESP32
SCL------ GPIO_14 SDA------ GPIO_13
МСС -----3.3v (или 5v)
GND-------GND
Энкодер:
DT-------GPIO_16 CLK ---- GPIO_17 SW------- GPIO_5
GND ---GND
+-----+5V
Дополнительно можно подключить светодиод для индикации работы радио —GPIO 4.
Включение
Проверяете все соединения и подключаете питание. На схеме показано общее питание для всей схемы, но предпочтительнее использовать отдельное питание для ESP32 и усилителя, для того, чтобы избежать дополнительных шумов. В режиме DAC при общем питании шумы я не заметил и качество хорошее. Смотрите сами.
Через некоторое время после включения ESP32 создаст точку доступа WifiKaradio с IP адресом 192.168.4.1. Подключаетесь к этой сети с компьютера и в браузере переходите по этому IP. Переходите на вкладку SETTING и находите настройки Wifi. Вписываете данные своего роутера и нажимаете Validate, радио может перезагрузиться. В роутере ищите какой адрес IP выдан радио. В некоторых роутерах можно оставить автоматическую раздачу IP (DHCP), но для отдельных устройств назначить постоянные адреса, чтобы каждый раз не отгадывать IP.
После перезагрузки переходите в SETTING в Sound Setting и выбираете режим вывода звука, затем нажимаете Validate.
После перезагрузки можете приступить к формированию своего списка радиостанций или скачать уже созданный на вкладке SETTING—Playlist.
Сегодня поговорим о добавлении к Karadio32 внешней платы DAC PCM5102. При выводе
через эту плату звук стал более чистым и появились басы. При минимальной громкости в Web
интерфейсе искажений никаких нет.
На плате есть выход Line Out для подключения внешнего усилителя. Наушники в этот разъем
не подключить, звука никакого нет абсолютно.
Схема соединений.
Схему подсказал пользователь сообщества Karadio.
PCM5102 ESP32
LCK GPIO25
BCK GPIO26
DIN GPIO22
XMT(XSMT) подтянуть к +5в через резистор 10кОм
FMT GND
SCL(SCK) GND
Могут быть незначительные различия в названиях пинов PCM5102, но догадаться можно.
Также на плате есть пины для подключения внешнего усилителя (у меня это PAM8403) LOUT LROUT AGND. Питание подал 5в.
При использовании данной платы нужно выставить режим I2S в Web интерфейсе Karadio.
отсюда
ESP32 Интернет-радио | Проект «Полная электроника своими руками»
— Реклама —
Сообщается, что дешевый процессор кодека MP3 VS1053 от aliexpress. com способен декодировать различные музыкальные форматы, включая аудио Ogg Vorbis/MP3/AAC/WMA/MIDI. VS1053 также может записывать в файл Ogg Vobis, но все рекомендации, доступные в Интернете, относятся либо к проприетарным платам, либо к ESP32-IDF, которые не рекомендуется использовать из-за чрезмерного кодирования. Кода более чем в 20 строк достаточно, чтобы выгнать меня на 100 миль!
Давайте создадим интернет-радио ESP32.
Идея, лежащая в основе Интернет-радио ESP32
Принцип проекта заключается в том, что если мы можем доставить на плату кусок потоковых данных в точном количестве 32 байта в виде потока, он просто продолжит воспроизведение.
— Реклама —
Это означает, что ESP32 должен подключить сайт потоковой передачи к фиксированному порту, а затем получать потоковые данные точно порциями по 32 байта за раз. С другой стороны, плата будет продолжать обрабатывать данные, как машина притока/оттока, и поток будет продолжать воспроизводиться.
Основной код едва ли состоит из 15 строк!
Строительство
Используется библиотека ESP32 VS1053 с открытым исходным кодом. Вы можете найти несколько примеров, включенных в библиотеку. Для переключения станций я использовал контакт GPIO (D13) в качестве нажимного переключателя для мягкого сброса платы VS1053 для настройки на следующую станцию. Для операции переключения без дребезга я включил логический оператор, чтобы он стал «ложным» и «истинным», в качестве альтернативы, чтобы предотвратить многократное переключение одним нажатием кнопки.
VS1053 — это 5-вольтовое устройство, но вы можете легко настроить его и на 3,3 вольта. Таким образом, на интернет-радио ESP32 у вас будет только одно напряжение питания — 3,3 вольта, которое можно питать от одной батареи LiPo. На плате VS1053 два регулятора напряжения [AM1117] — 3,3 вольта и 2,5 вольта. С помощью цифрового мультиметра сначала выясните, какой из них для чего, а затем подключите перемычку с 3,3 вольта на вход регулятора 2,5 вольта и сделайте этот провод как вход 3,3 вольта на плату.
Электропроводка VS1053
Соединительные провода должны быть как можно меньше. Более длинные, длинные и перекрывающиеся провода могут создавать гудящий шум на выходе звука, который обычно наблюдается с такими платами. Выходной звук является стереофоническим и достаточно усиленным для питания небольших динамиков или наушников, но для работы с большими динамиками вам, возможно, придется добавить усилители / усилители.
Препятствие для строительства
Li-Ion / Li-Po или Li-Ion при полной зарядке могут увеличить напряжение до 4, что не повредит ESP32, но вы можете потерять плату VS1053, а затем подождать еще 40 дней, чтобы прибыть с aliexpress.com. Поэтому рекомендуется использовать маломощный 3-контактный стабилизатор напряжения HT7333-1 с низкими потерями, который имеет очень низкое падение напряжения и очень низкие потери тока покоя. Но единственная проблема в том, что HT7111-1 — крошечное устройство для поверхностного монтажа.
Схема с (OLED — опционально)
Подстроенное напряжение 3,3 В подключено к выходу HT7333-1, который также является источником питания для ESP32.
Прототип
Соединение, обведенное красным, будет идти к нажимному переключателю — теперь это импровизированный нажимной переключатель
Тестирование
Для подключения к системе Wi-Fi замените SSID и пароль на начало кода а затем загрузите обычным способом Arduino. После загрузки ESP32 сначала скажет «Привет», чтобы указать, что VS1053 запущен и готов. Затем он подождет пару секунд, чтобы подключиться [следите за последовательным выходом] компьютера. Как только он подключится к Интернету, он настроится на станцию в хосте [6], а затем начнет литься красивый потоковый голос Beatles. Нажмите переключатель один раз [подключен к D13], и следующая станция будет настроена. Переменная char *sname[7] не является обязательной. Вы можете выбрать имена для каждой установленной радиостанции. Дополнительные имена станций могут быть добавлены в массивы хостов, путей и портов.
Интернет-радио ESP32 с OLED-дисплеем (дополнительно): единственная оставшаяся проблема — нет дисплея, чтобы узнать, какая станция играет! Универсальный дисплей I2C — это все, что требуется сейчас, чтобы все было готово. Но проблема в том, что тяжелый Adafruit SSD1306 вместе с библиотекой Adafruit_GFX, если они используются, сделают звук резким. Поэтому я использовал облегченную библиотеку SSD1306 esp8266-oled-ssd1306-master, специально созданную для ESP8266 для запуска универсальных OLED-дисплеев SSD1306. С этой библиотекой дисплей I2C работает просто отлично, без какого-либо влияния на вывод звука. Тем не менее, OLED не является обязательным — радио работает без него!
Спецификация
ESP32 7,5 долл. США
OLED 64*128 — 3 долл. США
Экран кодека VS1053 — 6 долл. США
HT-7333-1 — 1 долл. США
Динамики 8 Ом (0,3 Вт) дополнительно.
Программное обеспечение
Есть два скетча — bare_minimum_radio_player.ino и simple_esp32_radio_mod3.ino. Первый — всего несколько строк кода для получения 32-байтных данных с потокового сайта и последующего воспроизведения. Второй представляет собой тщательно продуманный эскиз для запуска радио вместе с OLED-дисплеем и нажимным переключателем для переключения станции. Каждый скетч сопровождается небольшим файлом «helloMP3.h», который на самом деле кодирует небольшую музыку или звуковое приветствие. Скомпилируйте скетч вместе с этим файлом.
В комплект ПО также добавлены необходимые библиотеки Arduino.
Загрузить
исходную папку
Интернет-радио ESP32 | Журнал Elektor
- Домашняя страница
- Общественные проекты Elektor
Превосходное качество звука для этого простого в использовании радиоприемника, способного декодировать большинство форматов интернет-станций! Обновлена прошивка и веб-сервер.
Я построил несколько интернет-радиостанций.
В ходе моих тестов я пришел к выводу, что ESP32 был идеальным процессором для такого типа приложений.
В Интернете есть много существующих проектов, однако все они имели недостатки, которые не позволили мне в полной мере оценить простую в использовании радиостанцию .
Mine имеет следующие основные характеристики:
— Стандартный модуль ESP32 (дополнительная PSRAM не требуется).
— 160×128 пикселей, цветной TFT-дисплей
— Использование порта I2S ESP32 для оцифровки аудиопотока.
— Использование модуля I2S PCM5102 типа со стереовыходом 3,5 мм или двух модулей MAX98357 типа I2S со встроенным усилителем класса D и выходом громкоговорителя 2×3 Вт RMS. Эти модули легко найти в интернет-магазинах (см. фото).
— Декодирование следующих аудиоформатов: mp3, m3u, aac, wav, adts mp4 от 32 кбит/с до 192 кбит/с.
Это позволяет прослушивать практически любой аудиопоток из Интернета .
— 99 станций могут быть определены в источнике программного обеспечения.
— Интеграция ИК-приемника — VS1838B
— 5 аппаратных клавиш или универсальный или обновленный ИК-пульт дистанционного управления (vol+, vol-, ch+, ch- и mute) используются для управления радио.
— Программное обеспечение оптимизировано, чтобы избежать замедления или отскока, которые могут вызвать фоновый шум на аудиовыходе.
— EEPROM , эмулированная , хранит громкость и последнюю прослушанную станцию.
— Мигает светодиод, указывающий на правильный прием сигналов с пульта дистанционного управления.
Легко интегрируется в прозрачную коробку Hammond. (изображения будут добавлены, чтобы показать эту интеграцию).
Источник программного обеспечения указывает соединения, которые необходимо установить между различными модулями.
Программное обеспечение очень простое и достаточно документировано, чтобы его можно было легко модифицировать. Использование библиотеки Audio.h значительно упрощает программирование.
Как обычно, для создания своего прототипа я предпочел использовать пластину с отверстиями и изолированный провод.
Встроенный веб-сервер.
Вы можете изменить SSID и ПАРОЛЬ.
В режиме реального времени вы можете видеть: значение rssi сигнала WiFi, громкость, текущий канал и URL-адрес станции.