Радио на ESP32 — это интернет-радиоприёмник с возможностью воспроизведения FM-диапазона (при подключении дополнительного модуля), построенный на базе микроконтроллера ESP32. Устройство использует встроенный Wi-Fi для потокового приёма тысяч онлайн-станций, аппаратный I²S-интерфейс для вывода качественного аудио и управляется кнопками, энкодером или через веб-интерфейс.
Общая архитектура проекта
Система собирает аудиопоток по HTTP/HTTPS из плейлистов интернет-радио, декодирует форматы MP3, AAC или OGG с помощью программного кодека, встроенного в популярные библиотеки, и направляет цифровой звук на внешний ЦАП через шину I²S чтобы можно было радио слушать онлайн бесплатно прямой эфир. Управление громкостью, выбор станции и отображение метаданных реализуется через локальный веб-сервер, физические кнопки или сенсорный дисплей.
Необходимые компоненты
Основой служит отладочная плата ESP32 (DevKit V1, NodeMCU-32S и аналоги). Поскольку встроенный ЦАП ESP32 обладает недостаточным качеством для музыкального воспроизведения, обязательным элементом является внешний I²S-аудиомодуль. Ниже представлена типовая спецификация для сборки базовой версии.
| Компонент | Модель / Характеристика | Назначение |
|---|---|---|
| Микроконтроллер | ESP32 DevKit V1 (ESP-WROOM-32) | Приём и декодирование потока, управление |
| Аудио-ЦАП (I²S) | PCM5102A или MAX98357 (с усилителем) | Цифро-аналоговое преобразование с низким шумом |
| Усилитель (опционально) | PAM8403 или встроенный в MAX98357 | Усиление до уровня пассивных колонок |
| Динамик | 3…5 Вт, 4 или 8 Ом | Воспроизведение звука |
| Дисплей | OLED 0.96″ (SSD1306) или TFT ILI9341 | Отображение станции, названия трека |
| Энкодер / кнопки | EC11 или тактовые кнопки | Ручная навигация и громкость |
| Блок питания | 5 В / 2 А через Micro-USB или внешний | Питание контроллера, ЦАП и усилителя |
| Дополнительно (FM) | Тюнер RDA5807M, TEA5767 или Si4703 | Приём местных FM-станций |
Сборка и подключение
Все соединения выполняются на макетной плате или компактно спаиваются на монтажной пластине. Главное внимание уделяется шине I²S: ошибки в назначении пинов приведут к отсутствию звука или цифровому треску.
- Подключите ЦАП PCM5102A к ESP32:
- VCC → 5 В (или 3.3 В на некоторых модулях) и GND → общий провод.
- SCK (BCK) → GPIO 26
- LCK (WS) → GPIO 25
- DIN → GPIO 22
Если используется MAX98357, добавляется GAIN (установка усиления) и SD (выключение).
- К выходам ЦАП или усилителя подключите динамик. Для MAX98357 динамик подсоединяется напрямую.
- Подключите дисплей SSD1306 по I²C (SDA → GPIO 21, SCL → GPIO 22) или по SPI для TFT.
- Подключите энкодер: центральный контакт — GND, боковые — на GPIO 34 и 35 (с подтяжкой), кнопка — на GPIO 33.
- Убедитесь, что питание 5 В подаётся на все элементы. Используйте источник с низким уровнем пульсаций, иначе в динамике будет слышен фоновый шум.
Программное обеспечение
Прошивка наиболее удобна в среде Arduino IDE или PlatformIO с использованием библиотеки ESP32-AudioI2S от schreibfaul1, которая берёт на себя буферизацию, декодирование множества форматов и управление I²S-периферией.
- Установите плату ESP32 в менеджере плат Arduino (URL:
https://raw.githubusercontent.com/espressif/arduino-esp32/gh-pages/package_esp32_index.json). - Установите библиотеку «ESP32-audioI2S» через менеджер библиотек.
- Базовый код инициализирует Wi-Fi, создаёт объект Audio, подключает поток и запускает воспроизведение в цикле
audio.loop(). - Пример потока:
audio.connecttohost("http://icecast.radiofrance.fr/fip-midfi.mp3"). - Для отображения названия трека используйте колбэк
audio.setMetadataCallback(...), передающий строку на дисплей. - Обработка кнопок или энкодера реализуется опросом GPIO; переключение станций — смена URL и вызов
audio.connecttohost.
Настройка и калибровка
После загрузки скетча откройте последовательный монитор (115200 бод). При успешном подключении к Wi-Fi устройство начнёт проигрывание. Для устранения типичных проблем:
- Нет звука — проверьте мультиметром сигнал I²S. Убедитесь, что в коде используется конфигурация пинов, соответствующая вашей распайке. Проверьте подачу питания на PCM5102: очень часто требуется 5 В, а не 3.3 В.
- Заикания — увеличьте размер буфера в библиотеке или смените канал Wi-Fi роутера на наименее зашумлённый.
- Треск/щелчки — добавьте электролитический конденсатор 100–470 мкФ по питанию ЦАП, а также керамический 100 нФ параллельно.
Пути улучшения устройства
Когда базовая версия собрана и работает, можно последовательно усложнить проект, следуя приведённым инструкциям.
1. Добавление локального FM-приёмника
Встроенного аналогового радио в ESP32 нет, но плата легко сопрягается с дешёвым чипом RDA5807M, управляемым по I²C. Инструкция:
- Подключите модуль RDA5807M: питание 3.3 В, SDA → GPIO 21, SCL → GPIO 22. Антенну выполните куском провода 30–50 см.
- Установите библиотеку RDA5807 (автор pu2clr). В скетче инициализируйте тюнер, настройте частоту методом
rda.setFrequency(104600); // 104,6 МГц. - Аналоговый аудиовыход RDA подаётся на свободный АЦП ESP32 или аналоговый коммутатор; программно переключайте источник в библиотеке Audio. Более простой вариант — использовать плату ESP32-A1S (ESP32 Audio Kit), которая уже содержит аудиокодек и вход для FM.
2. Разработка веб-интерфейса управления
Веб-интерфейс делает устройство полностью независимым от физических кнопок: можно менять громкость и станции с телефона. Порядок реализации:
- В коде добавьте асинхронный веб-сервер (библиотека ESPAsyncWebServer).
- Создайте HTML-страницу, хранящуюся в PROGMEM или на SPIFFS. Разместите на ней слайдер громкости и список станций. Используйте AJAX-запросы к端点 типа
/api?volume=50. - В обработчике вызывайте
audio.setVolume(значение)или меняйте URL станции и переподключайтесь. - Для автообнаружения в локальной сети настройте mDNS-имя (
radio.local).
3. Повышение качества звука и расширение функционала
Критичным для аудиосистем является подавление питания и экранирование, особенно при установке в деревянный или металлический корпус. Инструкция по доработке:
- Замените линейный стабилизатор на малошумящий LDO (например, MIC5219) для питания ЦАП отдельно от ESP32. Это исключает проникновение цифровых наводок.
- Встройте FM-антенну из ферритового стержня или телескопический штырь. Для интернет-радио качество Wi-Fi повышают внешняя антенна с разъёмом U.FL на модуле ESP32 и вынос точки доступа ближе.
- Реализуйте будильник и таймер сна через NTP-клиента; добавьте сохранение избранных станций в энергонезависимую память (Preferences или файлы LittleFS). Также можно настроить отображение спектроанализатора на TFT-дисплее в реальном времени, используя алгоритм БПФ над выборками аудиопотока.








