Обычное аналоговое радио, достигнув пика своего развития в конце XX века, в настоящее время стало постепенно сдавать свои позиции Интернет радио, которое доступно в любой точке земного шара, где есть Интернет-соединение.
Интернет радио (Internet Radio), также известное как стриминговое (streaming), web, IP или онлайн-радио обычно используется для трансляции сообщений, музыки, обсуждений и т.д. в форме аудио сигналов. По другому говоря, это цифровой аудио сервис, транслируемый через сеть Интернет.
Интернет радио можно создать с помощью устройства, подключенного к сети Интернет, или с помощью программного обеспечения, установленного на персональном компьютере (ноутбуке). В данной статье мы его создадим на основе модуля ESP32 и плате усиления MAX98357A, работающей по протоколу I2S.
Ранее на нашем сайте мы рассматривали проект интернет радио на основе платы Raspberry Pi. Если же вас интересует обычное FM радио, то его достаточно просто создать на основе платы Arduino и модуля RDA5807.
Необходимые компоненты
- Модуль ESP32 Devkit (купить на AliExpress).
- Плата усиления MAX98357A I2S (купить на AliExpress).
- 8-омный громкоговоритель (динамик).
- USB кабель.
- Адаптер 5V 1A.
- Активное Интернет-соединение
Интерфейс I2S в модуле ESP32
Как известно, ESP32 представляет собой дешевый модуль с низким энергопотреблением, но внушительным функционалом, включающим в себя поддержку технологий Wi-Fi и Bluetooth. Но, в отличие от других подобных модулей, ESP32 обладает еще и интерфейсом I2S. А во многих популярных сейчас микроконтроллерах такого интерфейса, к примеру, нет.
Почему поддержка интерфейса I2S так важна в современной электронике? Интерфейс I2S (Integrated Inter-IC Sound Bus) представляет собой последовательную шину для соединения цифровых аудиоустройств (плееров компакт-дисков, цифровых аудиопроцессоров и т. п.). Он разработан фирмой Philips Semiconductor. Данный интерфейс обычно используется компонентами АЦП и ЦАП. Более подробно про принципы работы протокола I2S вы можете прочитать в этой статье.
Поскольку в нашем интернет радио нам необходимо воспроизведение звука с помощью громкоговорителя (динамика), то нам нужен аналоговый выход, то есть необходим ЦАП (цифро-аналоговый преобразователь). И здесь мы видим самую интересную часть нашего проекта – это модуль MAX98357A, который представляет собой цифровой усилитель класса D, который использует интерфейс I2S для обмена данными с современными микроконтроллерами.
Достоинства модуля MAX98357A I2S:
- КПД 92%.
- Выходная мощность 3,2 Вт на 4-омном динамике при 5V.
- Уменьшение мощности шумов.
- Защита от короткого замыкания и перегрева.
- Поддержка левого, правого или Left/2 + Right/2 выхода.
- Работа от напряжения в диапазоне от 2.5V до 5.5V.
Внешний вид модуля MAX98357A I2S, использованного в нашем проекте, показан на следующем рисунке.
Схема проекта
Схема интернет радио на ESP32 и модуле MAX98357A I2S представлена на следующем рисунке.
Как видите, схема соединений достаточно проста. Поскольку контакт Gain модуля MAX98357A подключен к земле (GND), то коэффициент усиления модуля составляет 12dB.
Объяснение программы для модуля ESP32
Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.
Для данного проекта нам понадобится библиотека ESP32 Audio I2S. Скачайте ее по приведенной ссылке с GitHub и добавьте ее в Arduino IDE.
Первым делом в программе мы подключим используемые библиотеки.
1 2 3 |
#include "Arduino.h" #include "WiFi.h" #include "Audio.h" |
Далее объявим контакты модуля ESP32, к которым в нашей схеме подключен модуль MAX98357A.
1 2 3 4 |
#define MAX98357A_I2S_DOUT 25 #define MAX98357A_I2S_BCLK 27 #define MAX98357A_I2S_LRC 26 Audio audio; |
Затем укажем параметры доступа к сети Wi-Fi – ее имя (SSID) и пароль, что позволит модулю ESP32 подключаться к сети интернет.
1 2 |
String ssid = "Your User Id"; String password = "Your Password"; |
Далее укажем контакты, к которым подключен модуль MAX98357A, в функции audio.setPinout, и установим уровень звука на максимум с помощью функции audio.setVolume.
1 2 |
audio.setPinout(MAX98357A_I2S_BCLK, MAX98357A_I2S_LRC, MAX98357A_I2S_DOUT); audio.setVolume(100); |
Затем укажем URL, с которого будет производиться трансляция. Вы можете указать любой необходимый вам URL или, к примеру, использовать потенциометр для переключения между несколькими каналами трансляции.
1 2 |
audio.connecttohost("http://vis.media-ice.musicradio.com/CapitalMP3"); } |
Далее, в функции void loop(), нам остается только поставить аудио плеер на непрерывное воспроизведение.
1 2 3 4 |
void loop() { audio.loop(); } |
Тестирование работы интернет радио плеера
После сборки схемы проекта загрузите программу в модуль ESP32. После того как он успешно подсоединится к сети Wi-Fi, начнется трансляция аудио с URL, указанного в программе.
Вы можете обнаружить, что звук достаточно чистый и проект не нуждается ни в каких промежуточных усилителях. Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.
Исходный код программы (скетча)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
#include "Arduino.h" #include "WiFi.h" #include "Audio.h" #define I2S_DOUT 25 #define I2S_BCLK 27 #define I2S_LRC 26 Audio audio; String ssid = "Sourav"; String password = "87654321"; void setup() { WiFi.disconnect(); WiFi.mode(WIFI_STA); WiFi.begin(ssid.c_str(), password.c_str()); while (WiFi.status() != WL_CONNECTED) delay(1500); audio.setPinout(I2S_BCLK, I2S_LRC, I2S_DOUT); audio.setVolume(100); audio.connecttohost("http://vis.media-ice.musicradio.com/CapitalMP3"); } void loop() { audio.loop(); } |
Здравствуйте. Почему у esp8266 нету поддержки l2S? Я не специалист но люди же пишут и делают проекты. Вот например electronics.inf.ua/P40.html пробовал подключать MAX98357A и все работает. Вот только наверное моей сети не хватает и заикается... впрочем он и без нее заикается...
Добрый день. Да, в современных версиях esp8266 действительно есть поддержка l2S, я посмотрел даташит. Сейчас исправлю статью