Универсальная библиотека для ESP32 (Arduino IDE), объединяющая в себе функции Bluetooth A2DP Sink (приемник), Bluetooth A2DP Source (передатчик), интернет-радио и AUX-выход (аудиопоток через I2S), дополненная программным эквалайзером.
- Bluetooth Sink (
AUDIO_MODE_BT_SINK): Превращает ваш ESP32 в Bluetooth-динамик (стриминг музыки со смартфона на I2S ЦАП). - Bluetooth Source (
AUDIO_MODE_BT_SOURCE): Позволяет транслировать интернет-радиопоток или аудио с ESP32 на внешнюю Bluetooth-колонку. - AUX Out / Web Radio (
AUDIO_MODE_AUX_OUT): Воспроизведение интернет-радиостанций по URL (потоковое аудио) напрямую через внешний I2S ЦАП. - Эквалайзер: Предустановленные пресеты (Pop, Jazz, Rock, Classic, Vocal) и настраиваемый Пользовательский эквалайзер (
EQ_CUSTOM) с регулировкой басов, средних и высоких частот. - Гибкое управление режимами: Безопасное переключение между режимами «на лету» с полным очищением и освобождением ресурсов памяти и пинов.
Поскольку проект использует современные стандарты библиотек для ESP32 (включая Arduino ESP32 Core v3.0.0+), для сборки требуются следующие библиотеки:
- ESP32-A2DP (для Bluetooth A2DP Sink/Source)
- ESP32-audioI2S (для воспроизведения интернет-радио и эквалайзера)
- ESP_I2S (встроена в ядро ESP32 Arduino Core v3.0.0+)
Из-за больших размеров стека Bluetooth и аудиобиблиотек стандартный размер разделов памяти вызовет ошибку компиляции (секция текста превышает доступное пространство).
Обязательно измените настройки разметки памяти в Arduino IDE:
- Перейдите в меню Tools (Инструменты) -> Partition Scheme (Схема разделов).
- Выберите вариант:
Huge APP (3MB No OTA/1MB SPIFFS).
- Скачайте или клонируйте репозиторий библиотеки в папку с библиотеками Arduino:
Documents/Arduino/libraries/GS32AudioI2S - Убедитесь, что у вас установлены все зависимости (
ESP32-A2DPиESP32-audioI2S). - Перезапустите Arduino IDE.
#include <GS32AudioI2S.h>
GS32AudioI2S audioSystem;
// Пины шины I2S (зависит от вашего аппаратного подключения ЦАП, например PCM5102)
const uint8_t PIN_BCK = 14;
const uint8_t PIN_LRCK = 15;
const uint8_t PIN_DIN = 22;
void setup() {
Serial.begin(115200);
// Инициализация пинов I2S
audioSystem.begin(PIN_BCK, PIN_LRCK, PIN_DIN);
// Установка громкости (от 0 до 21)
audioSystem.setVolume(15);
// Выбор режима работы: Bluetooth Приемник (Колонка)
audioSystem.setMode(AUDIO_MODE_BT_SINK);
// Или режим интернет-радио / AUX:
// audioSystem.setMode(AUDIO_MODE_AUX_OUT);
// audioSystem.playRadio("http://stream.sberbeat.ru/sber_chill");
}
void loop() {
// Обязательный вызов функции tick() для обработки сетевых буферов аудио
audioSystem.tick();
}void begin(uint8_t bckPin, uint8_t lrckPin, uint8_t dinPin)— Инициализирует и сохраняет номера пинов шины I2S.void setMode(GS32AudioMode mode)— Переключает режим работы (AUDIO_MODE_OFF,AUDIO_MODE_BT_SINK,AUDIO_MODE_BT_SOURCE,AUDIO_MODE_AUX_OUT). Предыдущий режим корректно останавливается и выгружается из памяти.GS32AudioMode getMode() const— Возвращает текущий активный режим.void releaseAll()— Полная остановка всех активных процессов и освобождение памяти.
void setBtSinkConfig(String name, String pin, bool discoverable)— Устанавливает имя устройства, пин-код и видимость для режима Sink.void setBtSourceTarget(String targetName)— Задает имя Bluetooth-колонки, к которой нужно подключиться в режиме Source.
void playRadio(String url)— Запускает воспроизведение интернет-потока по прямой ссылке (в режимахAUX_OUTиBT_SOURCE).void setVolume(uint8_t volume)— Установка громкости (0–21).void stop()— Остановка воспроизведения потока.
void setEqualizer(GS32EqualizerPreset preset)— Установка пресета эквалайзера (EQ_POP,EQ_JAZZ,EQ_ROCK,EQ_CLASSIC,EQ_VOCAL,EQ_DEFAULT).void setCustomEqualizer(int8_t gainLow, int8_t gainMid, int8_t gainHigh)— Установка индивидуальных значений усиления (диапазон от -12 до 12 дБ) для низких, средних и высоких частот.GS32EqualizerPreset getEqualizerPreset() const— Возвращает текущий пресет эквалайзера.
void tick()— Метод фоновой обработки аудиоплеера, должен вызываться в циклеloop().
Этот проект является частью экосистемы GS32Bios и распространяется под лицензией MIT. Вы можете свободно использовать, модифицировать и распространять данный код в своих некоммерческих и коммерческих проектах.