Программирование

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


Проверка питания и подключения аудио‑разъёма

  • Питание – Убедитесь, что 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

  1. Включите библиотеку: #include <Audio.h> (или <AudioKit.h> в зависимости от вашей версии).
  2. Создайте объект:
    cpp
    Audio audio;          // для ESP32AudioKit
    // или
    AudioKit audioKit;   // для новой версии
    
  3. В setup() обязательно вызовите audio.begin(); до попытки воспроизведения.
  4. Если библиотека возвращает ошибку, проверяйте вывод Serial:
    cpp
    if (!audio.begin()) {
        Serial.println("Audio init failed");
        return;
    }
    
    Ошибки часто сигнализируют о неверном выборе устройства (см. раздел «Настройка I2S»).

Источник: 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).
  • Решение
    1. Используйте другой CS‑пин, например GPIO 15:
      cpp
      const uint8_t CS = 15;
      if (!SD.begin(CS)) { Serial.println("SD init failed"); }
      
    2. Убедитесь, что CS‑пин не подключён к аудио‑разъёму.
    3. Если вы используете «Hardware SPI» (GPIO 5/18/19/23), проверьте, что они не заняты в аудио‑коде.

Источник: 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


Отладка и проверка файловой системы

  1. Проверка SD‑карты – После SD.begin() выведите список файлов:
    cpp
    File root = SD.open("/");
    while (File file = root.openNextFile()) {
        Serial.print(file.name());
        Serial.print("  ");
        Serial.println(file.size());
    }
    
    Если список пуст, карта не смонтирована.
  2. Формат – Убедитесь, что карта отформатирована в FAT32 и размер файлов < 4 GB.
  3. Права доступа – Иногда SD‑картки в режиме «SPI» требуют установки pinMode(CS, OUTPUT); digitalWrite(CS, HIGH);.
  4. Проблемы с I2S – Включите отладку в библиотеке:
    cpp
    audio.setDebug(true);
    
    В Serial‑выводе вы увидите сообщения о состоянии I2S.

Полный пример кода

cpp
#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.

Авторы
Проверено модерацией
Модерация