У цій інструкції розглянемо, як підключити DAC-модуль PCM5102 до плат ESP32 (на прикладі ESP32 WROOM 32D) через PlatformIO та вирішити поширені проблеми: відсутність звуку (тиша) або поява тріску. Як бонус — важливий лайфхак із перемичками на платі.
Проблема: PCM5102 не працює з ESP32
При спробі використати зв’язку ESP32 WROOM 32D (30 pin) і PCM5102 у середовищі PlatformIO часто замість звуку можна почути або повну тишу, або постійний тріск. Стандартні скетчі можуть не працювати, і в інтернеті не завжди є пряме рішення цієї конкретної проблеми.
Характеристики PCM5102:
- 32-бітний ЦАП може розрізняти понад 4 мільярди рівнів сигналу (2³²). (Приклади: 16-біт — як якість CD. 24-біт — студійна якість.)
- Інтерфейс I2S (вимовляється як «ай-ту-ес») — це спосіб, за допомогою якого мікросхеми передають цифровий звук одна одній.
- Динамічний діапазон: 112 дБ — це дуже хороший показник, адже чим більше число, тим краща якість звуку. (Якість CD — приблизно 96 дБ. Студійні пристрої — від 100 дБ і вище.)
Комплектуючі та підключення
- Плата: ESP32 WROOM 32D (30 pin)
- ЦАП-модуль: PCM5102
Схема підключення PCM5102 до ESP32:
- SCK -> GND
- BCK (BCLK) -> GPIO 26
- DIN (DATA) -> GPIO 22
- LCK (LRCK) -> GPIO 25
- GND -> GND
- VIN -> 3.3V (можна живити від зовнішнього джерела, але спочатку перевірити від ESP32)
І родзинка на торті — щоб цей код запрацював і PCM5102 нарешті почав видавати звук, потрібно на зворотному боці PCM5102 запаяти перемички, як на зображенні нижче.

Код файлу platformio.ini
[env:esp32dev]
platform = espressif32
board = esp32dev
framework = arduino
monitor_speed = 115200
lib_deps =
esphome/ESP32-audioI2S@^2.0.7
Код у main.cpp (зверніть увагу, що main.c перейменовано на main.cpp). У головному файлі програми (main.cpp) необхідно правильно ініціалізувати виводи I2S. Вкажіть піни у такому порядку: BCK, LCK, DIN.
#include <wifi.h>
#include "Audio.h"
const char* ssid = "FIFI NAME";
const char* password = "WIFI PASS";
const char* streamURL = "http://zt01.cdn.eurozet.pl/zet-net.mp3";
Audio audio;
void setup() {
Serial.begin(115200);
Serial.println("Ініціалізація радіо...");
// Підключення до WiFi
Serial.print("Підключаємося до WiFi: ");
Serial.println(ssid);
WiFi.begin(ssid, password);
int wifiTimeout = 20; // таймаут 10 секунд
while (WiFi.status() != WL_CONNECTED && wifiTimeout > 0) {
delay(500);
Serial.print(".");
wifiTimeout--;
}
if (WiFi.status() != WL_CONNECTED) {
Serial.println("\n Помилка підключення до WiFi!");
return;
}
Serial.println("\n WiFi підключено!");
Serial.print(" IP-адреса: ");
Serial.println(WiFi.localIP());
Serial.print(" RSSI: ");
Serial.print(WiFi.RSSI());
Serial.println(" dBm");
// Налаштування аудіо
Serial.println(" Налаштовуємо аудіо...");
audio.setPinout(26, 25, 22);
audio.setVolume(15);
Serial.println(" Гучність: 15/21");
// Запуск потоку
Serial.print(" Запускаємо потік: ");
Serial.println(streamURL);
audio.connecttohost(streamURL);
Serial.println(" Радіо запущено!");
}
void loop() {
audio.loop();
}
// ==================== ОБРОБНИКИ ПОДІЙ ====================
// Викликається при зміні статусу аудіо
void audio_info(const char *info) {
Serial.print(" audio_info: ");
Serial.println(info);
}
// Викликається при зміні ID3 тегів
void audio_id3data(const char *info) {
Serial.print(" ID3: ");
Serial.println(info);
}
// Викликається при отриманні назви станції
void audio_showstation(const char *info) {
Serial.print(" Станція: ");
Serial.println(info);
}
// Викликається при отриманні інформації про потік
void audio_showstreamtitle(const char *info) {
Serial.print(" Трек: ");
Serial.println(info);
}
// Викликається при зміні гучності
void audio_volume(int volume) {
Serial.print(" Гучність: ");
Serial.println(volume);
}
// Викликається при початку відтворення
void audio_eof_mp3(const char *info) {
Serial.print(" Кінець треку: ");
Serial.println(info);
}
// Викликається при помилках
void audio_commercial(const char *info) {
Serial.print(" Помилка: ");
Serial.println(info);
}
Підсумок:
Дотримуючись цих кроків — правильне підключення пінів, налаштування перемичок на платі PCM5102 та використання коректного коду — ви вирішите проблему з відсутністю звуку. Якщо у вас є запитання або доповнення — залишайте їх у коментарях!