Рубрики
Проекты на ESP32

Интернет радио на ESP32 и модуле MAX98357A

Обычное аналоговое радио, достигнув пика своего развития в конце XX века, в настоящее время стало постепенно сдавать свои позиции Интернет радио, которое доступно в любой точке земного шара, где есть Интернет-соединение.

Интернет радио (Internet Radio), также известное как стриминговое (streaming), web, IP или онлайн-радио обычно используется для трансляции сообщений, музыки, обсуждений и т.д. в форме аудио сигналов. По другому говоря, это цифровой аудио сервис, транслируемый через сеть Интернет.

Интернет радио можно создать с помощью устройства, подключенного к сети Интернет, или с помощью программного обеспечения, установленного на персональном компьютере (ноутбуке). В данной статье мы его создадим на основе модуля ESP32 и плате усиления MAX98357A, работающей по протоколу I2S.

Ранее на нашем сайте мы рассматривали проект интернет радио на основе платы Raspberry Pi. Если же вас интересует обычное FM радио, то его достаточно просто создать на основе платы Arduino и модуля RDA5807.

Необходимые компоненты

  1. Модуль ESP32 Devkit (купить на AliExpress).
  2. Плата усиления MAX98357A I2S (купить на AliExpress).
  3. 8-омный громкоговоритель (динамик).
  4. USB кабель.
  5. Адаптер 5V 1A.
  6. Активное Интернет-соединение

Интерфейс I2S в модуле ESP32

Как известно, ESP32 представляет собой дешевый модуль с низким энергопотреблением, но внушительным функционалом, включающим в себя поддержку технологий Wi-Fi и Bluetooth. Но, в отличие от других подобных модулей, ESP32 обладает еще и интерфейсом I2S. А во многих популярных сейчас микроконтроллерах такого интерфейса, к примеру, нет.

Почему поддержка интерфейса I2S так важна в современной электронике? Интерфейс I2S (Integrated Inter-IC Sound Bus) представляет собой последовательную шину для соединения цифровых аудиоустройств (плееров компакт-дисков, цифровых аудиопроцессоров и т. п.). Он разработан фирмой Philips Semiconductor. Данный интерфейс обычно используется компонентами АЦП и ЦАП. Более подробно про принципы работы протокола I2S вы можете прочитать в этой статье.

Поскольку в нашем интернет радио нам необходимо воспроизведение звука с помощью громкоговорителя (динамика), то нам нужен аналоговый выход, то есть необходим ЦАП (цифро-аналоговый преобразователь). И здесь мы видим самую интересную часть нашего проекта – это модуль MAX98357A, который представляет собой цифровой усилитель класса D, который использует интерфейс I2S для обмена данными с современными микроконтроллерами.

Достоинства модуля MAX98357A I2S:

  1. КПД 92%.
  2. Выходная мощность 3,2 Вт на 4-омном динамике при 5V.
  3. Уменьшение мощности шумов.
  4. Защита от короткого замыкания и перегрева.
  5. Поддержка левого, правого или Left/2 + Right/2 выхода.
  6. Работа от напряжения в диапазоне от 2.5V до 5.5V.

Внешний вид модуля MAX98357A I2S, использованного в нашем проекте, показан на следующем рисунке.

Схема проекта

Схема интернет радио на ESP32 и модуле MAX98357A I2S представлена на следующем рисунке.

Как видите, схема соединений достаточно проста. Поскольку контакт Gain модуля MAX98357A подключен к земле (GND), то коэффициент усиления модуля составляет 12dB.

Объяснение программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

Для данного проекта нам понадобится библиотека ESP32 Audio I2S. Скачайте ее по приведенной ссылке с GitHub и добавьте ее в Arduino IDE.

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

Далее объявим контакты модуля ESP32, к которым в нашей схеме подключен модуль MAX98357A.

Затем укажем параметры доступа к сети Wi-Fi – ее имя (SSID) и пароль, что позволит модулю ESP32 подключаться к сети интернет.

Далее укажем контакты, к которым подключен модуль MAX98357A, в функции audio.setPinout, и установим уровень звука на максимум с помощью функции audio.setVolume.

Затем укажем URL, с которого будет производиться трансляция. Вы можете указать любой необходимый вам URL или, к примеру, использовать потенциометр для переключения между несколькими каналами трансляции.

Далее, в функции void loop(), нам остается только поставить аудио плеер на непрерывное воспроизведение.

Тестирование работы интернет радио плеера

После сборки схемы проекта загрузите программу в модуль ESP32. После того как он успешно подсоединится к сети Wi-Fi, начнется трансляция аудио с URL, указанного в программе.

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

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

20 ответов к “Интернет радио на ESP32 и модуле MAX98357A”

Вы бы библиотеку или прикрепляли или писали номер … пол дня не могу скомпилить

В статье приведена ссылка на эту библиотеку на гитхабе. Не совсем понял, а что еще нужно?

А в настройках Arduino IDE у вас точно выставлен модуль ESP32? Не может быть у вас там в настройках выставлена Arduino Micro у которой памяти кот наплакал?
Проблема, конечно, не очевидна на первый взгляд, причин у нее может быть много. Один из способов ее решения — просто «выдернуть» из библиотеки именно те функции, которые нужны вам в проекте, и вставить их в код своей программы. Тогда всю библиотеку к проекту можно не подключать, соответственно, и компилироваться в этом случае она не будет

На Gite ссылка на библиотеку под esp32 S3 . бесит :
Arduino: 1.8.18 (Windows 10),
Плата:»ESP32 Dev Module, Disabled, Disabled, Default 4MB with spiffs (1.2MB APP/1.5MB SPIFFS), 240MHz (WiFi/BT), QIO, 80MHz, 4MB (32Mb), 921600, Core 1, Core 1, None, Disabled, Disabled»

text section exceeds available space in boardСкетч использует 1440165 байт (109%) памяти устройства. Всего доступно 1310720 байт.

Глобальные переменные используют 53412 байт (16%) динамической памяти, оставляя 274268 байт для локальных переменных. Максимум: 327680 байт.

Sketch too big; see https://support.arduino.cc/hc/en-us/articles/360013825179 for tips on reducing it.

Ошибка компиляции для платы ESP32 Dev Module.
Этот отчёт будет иметь больше информации с
включенной опцией Файл -> Настройки ->
«Показать подробный вывод во время компиляции»

Ну он ругается на то, что код библиотеки очень большой? Там нет информации про то, какие участки кода весят много, а какие мало? Код самого скетча то совсем маленький

Доброго дня.
Не могли бы вы «прикрутить» к этому проекту простой web интерфейс для замены:
— url трансляции
— регулировки громкости

Добрый вечер. К сожалению нет, уже не могу, нет доступа к этим инструментам

Здравствуйте, возможно ли сделать почти тоже самое, но используя телефон передавать по wifi на esp32 mp3 файл который она будет воспроизводить?

Добрый день, для этого на смартфон необходимо установить приложение, которое будет эмулировать подобный музыкальный ресурс, но конкретно я не знаю как это сделать, не работал никогда с подобными приложениями

Я просто хочу повторить один проект и заодно усовершенствовать. С помощью телефона воспроизводить mp3 файл на esp32 одновременно с дрыганьем сервопривода в такт музыке. Если интересно я могу вам на почту скинуть видео с работой этой штуки. Может вы тоже захотите повторить. Можете дать свою почту?

Ну а у вас только видео с его работой или и принцип работы описан? Просто я пока что то не могу сообразить какой способ лучше всего подойдет для передачи файла mp3 со смартфона на модуль esp32. Особенно учитывая тот факт, что из сети модуль esp32 может звук в формате mp3 воспроизводить, а из собственной памяти нет, его нужно перекодировать в более простой формат

А я только-только подумал что можно было-бы пару (сжатых mp3) песен непосредственно из памяти esp32 воспроизводить, а это видимо работать не будет(
Вот ссылка на видео с рабой этого устройства: https://youtube.com/shorts/nDr3DISrQSU?feature=share
Автор этой самоделки не хочет делиться прошивкой и принципом работы, говорит что всё и так легко, но что-то мне так не кажется).
Так как, стоит цель сделать этот проект без использования внешней памяти и плееров, то пытаюсь понять как транслировать аудио и одновременно команды для серво в режиме онлайн по wifi. Основу можно взять с проекта WiFi-радио, но почему то за всё время существования esp32 никто не воспроизводил аудио именно с телефона на саму esp по wifi (или я не нашёл просто такой реализации), хотя судя по всему это вполне реально сделать, но у меня недостаточно знаний для этого. Поэтому ищу решения в интернете чтоб разобраться)

Может автор того проекта что то недоговаривает. В этой статье про аудиоплеер на esp32 указано, что модуль esp32 может воспроизводить аудиофайлы только в формате .wav если они записаны в его памяти. Но с интернет адреса он может воспроизводить и mp3. Поэтому, насколько я понимаю, вам достаточно на смартфоне сымитировать веб-ресурс с проигрыванием песен в формате mp3, а потом по WiFi подключить к нему модуль esp32 и проигрывать с него песни как и описано в приведенной здесь статье. Поэтому вам, я думаю, стоит поискать в сети именно решение этой проблемы.
А зачем вам со смартфона передавать на модуль esp32 команды для сервомотора? Мне кажется вы сами должны их формировать в модуле esp32.

Разобрались?

От админа: к сожалению пока нет

Добрый день. Нет, к сожалению нет. Но сейчас модули ESP32 достаточно дешево стоят (от 280 руб.), есть ли смысл использовать esp8266?

Здравствуйте. Почему у esp8266 нету поддержки l2S? Я не специалист но люди же пишут и делают проекты. Вот например electronics.inf.ua/P40.html пробовал подключать MAX98357A и все работает. Вот только наверное моей сети не хватает и заикается… впрочем он и без нее заикается…

Добрый день. Да, в современных версиях esp8266 действительно есть поддержка l2S, я посмотрел даташит. Сейчас исправлю статью

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *