Esp32 интернет радио с внутренним dac: Karadio — интернет радио на базе ESP32 — Умный дом
|Содержание
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.
отсюда
ESP, IoT — ESP32+UDA1334A DAC Интернет-радио с энкодером и OLED
DmitrySazonov
✩✩✩✩✩✩✩
#1
По мотивам гайда https://alexgyver. ru/wifi-radio/ решил сделать свой вариант, но с выходом mini-jack для подключения к стоящим на столе компьютерным колонкам. В качестве ЦАП после экспериментов решено использовать UDA1334A. Звук без шумов, которые не удалось побороть с VS1053.
Корпус для монтажа плат печатается на 3D принтере.
Реализовал 2 корпуса : под дисплей 0.96″ и более крупный 2.42″. Модели для печати можно взять гитхаба проекта : https://github.com/DmitrySazonov/ka-radio-player
Управление:
- Поворот энкотера — изменение громкости
- Короткое нажатие — старт/стоп воспроизведения
- Нажатие и поворт — переключение между станциями.
Список компонент:
- ESP 32 38P
- UDA1334A DAC
- Digital knob encoder
- 2.42″ OLED 4 pin display — или 0.96″ OLED 4 pin display
- 1K резистор (брал в наборе)
Опционально можно докупить самоклеющиеся резиновые ножки
Монтаж плат в корпус и экрана выполняется на болты M2. 5×4 мм, 8 шт на платы, 4 шт на экран 2.42, 2 шт на экран 0.96
Монтаж фронтальной панели к корпусу на болты M3x5 мм с потайной головкой, 4 шт
Принципиальная схема:
| UDA1334A | ESP 32 |
|———-|———|
| VIN | 3V3 |
| GND | GND |
| DIN | IO22 |
| WSEL | IO25 |
| BCLK | IO26 |
Также впаивается 1K резистор между WSEL-GND
| OLED Display | ESP 32 |
|—————|———|
| GND | GND |
| VDD | 3V3 |
| SCK | IO14 |
| SDA | IO13 |
| Knob | ESP 32 |
|——|———|
| GND | GND |
| S1 | IO17 |
| S2 | IO16 |
| KEY | IO5 |
| 5V | 3V3 |
Установка karadio32 аналогична гайду https://alexgyver.ru/wifi-radio/, но в настройке «SOUND SETTINGS» нужно выставить значение I2S
Изменено:
Реакции:
Belize
Belize
✩✩✩✩✩✩✩
#2
Ссылочку бы еще на покупку UDA1334A для заказа с алишки. Какие потоки декодирует? Лучше чем VS1053?
Геннадий П
★★★★★✩✩
#3
Belize написал(а):
Ссылочку бы еще на покупку UDA1334A для заказа с алишки.
Нажмите для раскрытия…
Забить на Алике в поиск «UDA1334A» на столько сложная задача?
Belize написал(а):
Какие потоки декодирует?
Нажмите для раскрытия…
UDA1334A это только ЦАП, у него нет декодера.
DmitrySazonov
✩✩✩✩✩✩✩
#4
@Belize, см описание на github, там есть ссылки.
По теме UDA1334A vs VS1053. Как писал, при использовании VS1053 были паразитные помехи и шумы. Как раз искал альтенативные варианты, и наткнулся на вариант с UDA1334A
Изменено:
Интернет-радио и Bluetooth-динамик на базе ESP32 | Детали
Ваш браузер не поддерживает тег видео.
Это был мой первый аудиопроект и проект с батарейным питанием, и я был немного в неведении относительно того, с чего начать. Я начал с того, что знал, что он будет работать от батареи, поэтому он должен быть энергоэффективным. У меня был под рукой одноэлементный литий-ионный аккумулятор, поэтому я начал с него.
Рассмотрение мощности
С аккумулятором в руках я отправился ковыряться в мозги проекта. Мне нужно было что-то, что поддерживает Wi-Fi и BT, в идеале микроконтроллер, чтобы минимизировать энергопотребление и уровни программного обеспечения. ESP32 была знакомой платформой, и быстрый поиск в Интернете подтвердил, что такие проекты действительно возможны в программном обеспечении. Будучи микроконтроллером, ESP32 потребляет минимальное количество энергии, выполняя все мои требования. Идеальный!
Внутреннее зарядное устройство было следующим в списке. Это не очень портативно, если вам нужно разобрать его всякий раз, когда вы хотите зарядить аккумулятор, и вы не можете воспроизводить музыку при этом. После недолгих поисков я остановился на зарядном модуле на базе TC4056 в виде небольшой платы с удобно закрепленным портом micro USB. Выглядит неплохо, что дальше?
Силовые преобразователи. Для работы ESP32 требуется 3,3 В, и, скорее всего, будут и другие компоненты, которые я решу добавить. Учитывая конструкцию с питанием от батареи, моим первым выбором были SMPS (импульсные источники питания). Тем не менее, я помню, как некоторые из моих друзей разглагольствовали о том, что SMPS ужасны и не просты в использовании в аудиопроектах из-за шума, который они создают и влияют на качество звука. Конечно, это не высококачественная аудиосистема, но я не знал, чего ожидать. Я все равно решил использовать его. Я нашел несколько повышающе-понижающих преобразователей, способных переключаться между двумя режимами в зависимости от входного напряжения питания. Это обеспечит стабильные 3,3 В для электроники с течением времени, когда аккумулятор медленно разряжается. Эти преобразователи также имеют штырек EN (включение), поэтому я могу выбрать слаботочный выключатель питания, который не должен быть рассчитан на ток, используемый устройством.
Наконец, я также добавил еще один преобразователь, такой же, как и 3,3-вольтовый, только настроенный на 5 В на тот случай, если усилителю понадобится немного больше энергии.
Звуковое оборудование
Я нашел проект на github, в котором описывалось, что я хочу сделать с ESP32, и увидел, что он рекомендует I2S для аудиовыхода микроконтроллера. ESP32 имеет встроенный двухканальный ЦАП, но его качество не рекомендуется для аудиоприложений, поскольку разрешение ограничено 8 битами (для сравнения, ЦАП, упомянутый позже, имеет 24 бита).
ЦАП
Зная протокол, я нашел UDA1334, который используется в некоторых аудиошапках для raspberry pi. Позже я также обнаружил еще один проект hackaday.io (Professional Audio On An ESP32), который успокоил меня в выборе ЦАП. Устройство, продаваемое adafruit, поставляется с припаянным разъемом для наушников, что удобно как для того, чтобы показать его при окончательной настройке, так и для отладки соединений позже: D. Он обеспечивает декодирование стереозвука, хотя этот проект использует только один канал, 24-битное разрешение и может быть отключенным от источника питания 3,3 В.
Динамик
Оригинальный динамик Я начал этот проект, он был у меня с бабушкиного радио (70-е годы) и оказался основной причиной очень плохого качества звука. Это занимало меня в течение нескольких недель, заставляя меня менять несколько аудиоусилителей и просто доставляя мне много головной боли, прежде чем я признал себя, что это должно быть так, и пошел за новым динамиком. Но урок усвоен 🙂 Visatone FRS7 оказался в финальной сборке.
Усилитель
Изначально я был настолько наивен, что попытался самостоятельно собрать транзисторный усилитель. Обнаружив, что то, что я ищу, является усилителем класса AB, я нашел несколько конструкций с компонентами, которые были у меня под рукой:
https://www.onetransistor.eu/2018/01/audio-amplifier-common-transistors.html
http://electronics-diy. com/4×4.php
https://electronics.stackexchange. com/questions/67369/simple-amplifier-cuircuit
Динамик играл музыку, но качество было ужасным. После нескольких выходных, проведенных взад и вперед, я признал свое поражение и вместо этого решил приобрести специальный аудиоусилитель. LM386 кажется очень распространенным, поэтому я заказываю несколько микросхем и комплект. Еще раз, звук был в лучшем случае посредственным. По какой-то причине я попробовал еще один усилитель, плату HXJ8002, без существенных улучшений. В этот момент я отказался от старого динамика.
Наконец…
…Я остановился на компонентах и соединил их вместе. Ниже приведена блок-схема установки
Помимо проблем с динамиком, я также заметил некоторые проблемы с I2S, к счастью, у меня был разъем для наушников, чтобы проверить эту часть связи. При поиске в Интернете кажется, что I2S иногда нужны последовательные резисторы на пути, поэтому 3 резистора по 100 Ом
После небольшого поиска я наткнулся на проект Ka-Radio32 от karawin, который реализует очень многофункциональное интернет-радио на ESP32. Поддерживает различные режимы вывода звука с ESP32, ЖК-дисплея, нескольких ручек, ИК-приемника и даже веб-страницы, размещенной на самом контроллере, откуда вы можете добавлять новые станции, менять точку доступа, управлять музыкой и т. д. Все, кроме функций Bluetooth, для которых они предоставить некоторые файлы в репо, но без документации. Наконец, я нашел еще один репозиторий, который выглядит как ранняя версия Ka-Radio32 с базовым интернет-радио, но поддерживает Bluetooth.
Конечный результат: объединить два режима в нечто, поддерживающее оба и позволяющее плавно переключаться между режимами. Разветвляя более развитое интернет-радио Ka-Radio32, я просто объединил часть bluetooth. Проблема, однако, в том, что после компиляции проекта полученный двоичный файл слишком велик для загрузки и запуска на стандартном ESP32 с 4 МБ флэш-памяти и 512 КБ ОЗУ. Двоичный файл весит около 2 МБ и должен быть загружен в двух экземплярах — вероятно, по одному на ядро, я недостаточно хорошо в этом разбираюсь. Я предпринял несколько попыток удалить код ЖК-дисплея и некоторых других компонентов, которые я не использую, что сделало двоичный файл загружаемым во флэш-память 4 МБ, но затем это вызывало ошибки времени выполнения, вероятно, связанные с ОЗУ. Все эти проблемы исчезли после перехода на устройство с большим объемом памяти (16 МБ флэш-памяти, 8 МБ PSRAM).
Подтвердив, что все работает на макетной плате, конструкция была подключена и помещена в корпус, напечатанный на 3D-принтере.
Одной частью корпуса была «оболочка», в которой находилась большая часть электроники и вырез сзади для воздуха, а также разъем для зарядки и наушников по бокам. Шесть небольших квадратных опор служили точкой крепления Г-образной крышки, удерживающей динамик, кнопку питания и ручку. Все укладывается в коробку 140х85х65мм.
Нижняя часть корпуса. Вентиляционное отверстие в задней части, квадратный вырез для порта зарядки micro USB и отверстие для разъема для наушников Г-образная верхняя крышка с (слишком) большим вырезом для динамика, кнопки питания и ручки
Оригинальный динамик был намного шире, чем тот, который я в итоге использовал, поэтому отверстие излишне широкое. Но так как он скрыт под слоем ткани, это не так уж и важно.
Пользовательский интерфейс
Пользовательский интерфейс очень минималистичный. После нажатия кнопки питания в режиме радио доступно следующее:
- Воспроизведение/остановка радиостанции нажатием кнопки энкодера
- Отрегулируйте громкость вращением поворотного энкодера
- Перемещайтесь между станциями, нажимая энкодер примерно на секунду, а затем вращая его, удерживая нажатым. Вращение против часовой стрелки переходит к следующей станции в списке, а против часовой стрелки — к предыдущей станции
- Быстро дважды щелкните энкодер, чтобы перейти в режим динамика Bluetooth
И в режиме динамика Bluetooth:
- Отрегулируйте громкость, поворачивая поворотный энкодер
- Быстро дважды щелкните энкодер, чтобы перейти в режим радио
Интернет-радио ESP32 | Полный проект электроники своими руками
— Реклама —
Сообщается, что дешевый процессор кодека MP3 VS1053 от aliexpress. com способен декодировать различные музыкальные форматы, включая аудио Ogg Vorbis/MP3/AAC/WMA/MIDI. VS1053 также может записывать в файл Ogg Vobis, но все рекомендации, доступные в Интернете, относятся либо к проприетарным платам, либо к ESP32-IDF, которые не рекомендуется использовать из-за чрезмерного кодирования. Кода более чем в 20 строк достаточно, чтобы выгнать меня на 100 миль!
Давайте создадим интернет-радио ESP32.
Идея Интернет-радио ESP32
Принцип проекта заключается в том, что если мы можем доставить на плату кусок потоковых данных в точном количестве 32 байта в виде потока, он просто продолжит воспроизведение.
— Advertisement —
Это означает, что 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-дисплеем и нажимным переключателем для переключения станции.