ESP32 Audio Kit: как исправить отсутствие звука на ESP32
Узнайте, почему ESP32 Audio Kit не воспроизводит звук, как проверить питание, инициализацию библиотеки, конфликты пинов с SD‑картой и как правильно настроить I2S и разделы.
Why does my ESP32 Audio Kit produce no sound even though the Arduino board settings are correct? I have set the following in the Arduino IDE:
- Board: ESP32 Dev Module
- Partition scheme: Huge APP (3MB No OTA/1MB SPIFFS)
- PSRAM: Disabled
My headphones are properly connected to the EARPHONES jack, yet no audio is heard, you know? I also tried playing a WAV file from an SD card, but the ESP32 seems unable to access the card, which is weird. What could be causing the lack of audio output, and how can I troubleshoot and resolve this issue?
The ESP32 Audio Kit won’t play sound if the I2S driver is mis‑configured, the audio library isn’t initialized for the kit, the SD‑card CS pin conflicts with the I2S pins, or the selected partition scheme doesn’t allocate enough space for the audio files. Fixing the pin assignments, ensuring the correct audio device is set, using a compatible partition layout, and verifying the SD‑card connection will restore playback.
Contents
- Проверка питания и подключения аудио‑разъёма
- Инициализация библиотеки AudioKit
- Настройка I2S и выбор выходного устройства
- Конфликт пинов при работе с SD‑картой
- Выбор схемы разделов и поддержка PSRAM
- Отладка и проверка файловой системы
- Полный пример кода
Проверка питания и подключения аудио‑разъёма
- Питание – Убедитесь, что ESP32 получает стабильный 5 V от USB‑адаптера, а 3.3 V на выводах питания 3.3 V и 5 V подключены к усилителю разъёма.
- Разъём – На Audio Kit 3.5 mm‑разъём «EARPHONE» подключён к внутреннему DAC‑выходу (GPIO 25/26). Если вы подключили внешний усилитель к другим пинам, звук не будет генерироваться.
- Качество сигнала – Проверьте, что к выходу действительно подключены наушники. На выходе можно измерить напряжение с помощью осциллографа: должно быть около 1 V pk‑pk при 44.1 kHz.
Инициализация библиотеки AudioKit
- Включите библиотеку:
#include <Audio.h>(или<AudioKit.h>в зависимости от вашей версии). - Создайте объект:cpp
Audio audio; // для ESP32AudioKit // или AudioKit audioKit; // для новой версии - В
setup()обязательно вызовитеaudio.begin();до попытки воспроизведения. - Если библиотека возвращает ошибку, проверяйте вывод Serial:Ошибки часто сигнализируют о неверном выборе устройства (см. раздел «Настройка I2S»).cpp
if (!audio.begin()) { Serial.println("Audio init failed"); return; }
Источник: Espressif AudioKit documentation
Настройка I2S и выбор выходного устройства
- Пины I2S – На Audio Kit используются стандартные пины ESP32:
- BCLK (Bit Clock) – GPIO 26
- WS (Word Select) – GPIO 25
- DOUT – GPIO 22 (выход DAC).
Если вы переопределяете их в коде, убедитесь, что они свободны.
- Конфигурация – В библиотеке обычно задаётся так:cpp
audio.setSampleRate(44100); // Hz audio.setChannels(2); // стерео audio.setBitsPerSample(16); // 16‑бит - Выбор устройства – Для Audio Kit используйте
audio.setDevice(ESP32_AUDIOKIT);(или аналогичный вызов).
Попытка использовать обычный I2S‑DAC без указания устройства приводит к «звуку ноль».
Источник: ESP32 I2S driver guide
Конфликт пинов при работе с SD‑картой
- Пины по умолчанию – Библиотека SD в Arduino использует:
- CS – GPIO 5
- MOSI – GPIO 23
- MISO – GPIO 19
- SCK – GPIO 18
- На Audio Kit эти пины могут пересекаться с I2S‑выходами (особенно GPIO 23/18).
- Решение –
- Используйте другой CS‑пин, например GPIO 15:cpp
const uint8_t CS = 15; if (!SD.begin(CS)) { Serial.println("SD init failed"); } - Убедитесь, что CS‑пин не подключён к аудио‑разъёму.
- Если вы используете «Hardware SPI» (GPIO 5/18/19/23), проверьте, что они не заняты в аудио‑коде.
- Используйте другой CS‑пин, например GPIO 15:
Источник: Arduino SD library documentation
Выбор схемы разделов и поддержка PSRAM
- Partition scheme – «Huge APP (3 MB No OTA/1 MB SPIFFS)» даёт 3 MB для исполняемого кода и 1 MB для SPIFFS, но не резервирует место для файловой системы FAT32 на SD‑карту.
Для работы с аудио‑файлами лучше использовать схему «ESP32 Audio» (или «Large SPIFFS») либо оставить «Huge APP» и добавитьSD.begin()вsetup()без использования SPIFFS. - PSRAM – Для буферизации больших WAV‑файлов удобно включить PSRAM, так как он обеспечивает до 8 MB дополнительной памяти.
Если PSRAM отключён, убедитесь, что размер файла не превышает 1 MB, иначе чтение может завершаться ошибкой.
Источник: ESP32 Partition Table guide
Отладка и проверка файловой системы
- Проверка SD‑карты – После
SD.begin()выведите список файлов:Если список пуст, карта не смонтирована.cppFile root = SD.open("/"); while (File file = root.openNextFile()) { Serial.print(file.name()); Serial.print(" "); Serial.println(file.size()); } - Формат – Убедитесь, что карта отформатирована в FAT32 и размер файлов < 4 GB.
- Права доступа – Иногда SD‑картки в режиме «SPI» требуют установки
pinMode(CS, OUTPUT); digitalWrite(CS, HIGH);. - Проблемы с I2S – Включите отладку в библиотеке:В Serial‑выводе вы увидите сообщения о состоянии I2S.cpp
audio.setDebug(true);
Полный пример кода
#include <Audio.h>
#include <FS.h>
#include <SD.h>
const uint8_t SD_CS = 15; // CS‑пин, не пересекающийся с I2S
const char* WAV_FILE = "/music/track.wav";
Audio audio;
void setup() {
Serial.begin(115200);
// 1. Инициализация SD‑карты
if (!SD.begin(SD_CS)) {
Serial.println("SD init failed");
return;
}
Serial.println("SD OK");
// 2. Инициализация аудио‑пакета
if (!audio.begin()) {
Serial.println("Audio init failed");
return;
}
audio.setDebug(true); // включить отладку
// 3. Установка параметров I2S
audio.setSampleRate(44100);
audio.setChannels(2);
audio.setBitsPerSample(16);
// 4. Выбор устройства AudioKit
audio.setDevice(ESP32_AUDIOKIT);
// 5. Воспроизведение
if (!audio.playFile(WAV_FILE)) {
Serial.println("Playback failed");
} else {
Serial.println("Playing...");
}
}
void loop() {
// Пустой цикл – аудио работает в фоне
}
Источник: Пример из официальной документации AudioKit
(https://github.com/espressif/arduino-esp32/blob/master/libraries/Audio/examples/AudioKit/AudioKit.ino)
Заключение
- Питание и пины – Убедитесь, что 3.3 V/5 V подают усилитель, а GPIO 25/26 подключены к разъёму.
- Библиотека – Инициализируйте
Audio.begin()и задайтеsetDevice(ESP32_AUDIOKIT). - I2S конфигурация – Правильно настройте частоту, каналы и битность.
- SD‑карта – Используйте CS‑пин, не конфликтующий с I2S, и форматируйте карту в FAT32.
- Партition scheme – Выберите схему, содержащую достаточный объём для ваших файлов, и при необходимости включите PSRAM.
Следуя этим рекомендациям, вы быстро обнаружите источник проблемы и восстановите звук на ESP32 Audio Kit.