Если интернет-радио на базе ESP32 заикается, буферизует поток или вообще не подключается к станции, в большинстве случаев причина кроется в трёх местах: недостаточном размере буфера в прошивке, нестабильном Wi-Fi-сигнале или битой ссылке на поток. Проверить это можно за несколько минут ещё до перепрошивки. Но обо всём по порядку — начнём с выбора железа.
Проект интернет-радио на ESP32 — один из самых популярных среди радиолюбителей: плата стоит недорого, имеет встроенный Wi-Fi, достаточную вычислительную мощность для декодирования MP3 и AAC-потоков, а сообщество разработало несколько зрелых открытых прошивок. В этой статье разберём схему, выбор компонентов, прошивку и типичные проблемы.
Как работает интернет-радио на ESP32
Принцип прост: микроконтроллер подключается к домашней сети Wi-Fi, запрашивает аудиопоток по HTTP у сервера радиостанции и декодирует его в реальном времени. Цифровой звук выводится либо через встроенный ЦАП (качество посредственное), либо — что правильнее — через внешний модуль по шине I2S.
Наиболее распространённая связка — ESP32 DevKit плюс ЦАП на базе PCM5102 или MAX98357A. Первый даёт линейный выход для усилителя или активных колонок, второй — это уже ЦАП со встроенным усилителем класса D, способный напрямую раскачать небольшой динамик.
Управление обычно реализовано через веб-интерфейс: открываете в браузере IP-адрес устройства и переключаете станции, регулируете громкость, редактируете плейлист. Дополнительно подключают дисплей и энкодер для автономного управления.
Выбор компонентов для сборки
Базовый набор для рабочего устройства невелик. Вот что потребуется:
- 📻 Плата ESP32 DevKit V1 или аналог на чипе ESP32-WROOM-32 — «мозг» проекта с Wi-Fi на борту.
- 🎧 ЦАП PCM5102 (линейный выход) или MAX98357A (выход на динамик) — качественный звук по I2S.
- 🖥️ Дисплей ST7735, ILI9341 или OLED SSD1306 — отображение станции и громкости.
- 🎛️ Энкодер с кнопкой и/или несколько тактовых кнопок — управление без браузера.
- 🔌 Блок питания 5 В с запасом по току — от него зависит стабильность работы.
Обратите внимание на питание. ESP32 при передаче по Wi-Fi потребляет заметные импульсные токи, и слабый или «проседающий» источник вызывает перезагрузки, щелчки в звуке и обрывы потока. Питание от USB-порта компьютера — частый источник подобных проблем.
| Компонент | Назначение | Примечание |
|---|---|---|
| ESP32 DevKit | Приём потока, декодирование | Любая плата на ESP32-WROOM-32 |
| PCM5102 | ЦАП, линейный выход | Для подключения к усилителю |
| MAX98357A | ЦАП + усилитель | Напрямую на динамик 4–8 Ом |
| ILI9341 | Дисплей | Цветной, хорошо читается |
| Энкодер | Громкость, переключение станций | С встроенной кнопкой |
⚠️ Внимание: модули PCM5102 с китайских площадок иногда имеют нераспаянные перемычки конфигурации (SCK, FMT и др.). Если звука нет при правильной схеме — проверьте эти площадки на плате ЦАПа и сверьтесь с документацией продавца.
Схема подключения ЦАПа по I2S
Шина I2S использует три основных сигнала: BCK (тактирование битов), LRCK/WS (выбор канала) и DIN (данные). Номера GPIO можно назначать в прошивке, но классическое распределение для популярных проектов выглядит так:
ESP32 GPIO26 → BCK (PCM5102)ESP32 GPIO25 → LRCK/WS
ESP32 GPIO22 → DIN
GND → GND, VCC → 5V или 3.3V (по плате ЦАПа)
Дисплей подключается по SPI: сигналы MOSI, SCLK, CS, DC, RST. Следите, чтобы выбранные пины не пересекались с I2S и не попадали на strapping-пины ESP32 (например, GPIO0, GPIO2, GPIO12), иначе плата может не стартовать при подключенной периферии.
Для MAX98357A схема идентична, плюс вывод SD (shutdown) — его подтягивают к питанию или заводят на GPIO для программного отключения усилителя. Динамик подключается напрямую к выходным клеммам модуля.
📊 Какой ЦАП вы используете или планируете для интернет-радио на ESP32?