Аудиоплеер на основе модуля ESP32


Музыкальные аудиоплееры – одни из популярных самодельных проектов, реализуемых начинающими радиолюбителями. Ранее на нашем сайте мы уже рассматривали проект аудиоплеера на основе платы Arduino, в этой же статье мы рассмотрим создание аудиоплеера на основе модуля ESP32 и модуля усилителя LM386 (на нашем сайте вы можете посмотреть все проекты с использованием данного усилителя). Аудиоплеер будет работать на внешний громкоговоритель.

Внешний вид аудиоплеера на основе модуля ESP32

Возможно, громкость звука рассматриваемого в этом проекте аудиоплеера покажется вам не очень громкой, но ее можно повысить подключением более мощного усилителя. Цель данного проекта – продемонстрировать возможности модуля ESP32 по воспроизведению аудио файлов.

Ранее на нашем сайте мы рассматривали проект простого аудиоплеера и усилителя на Arduino Uno.

Необходимые компоненты

  1. Модуль ESP32 (купить на AliExpress).
  2. Модуль усилителя LM386 (купить на AliExpress).
  3. 8-омный громкоговоритель.
  4. Соединительные провода.

Реклама: ООО "АЛИБАБА.КОМ (РУ)" ИНН: 7703380158

Схема проекта

Схема аудиоплеера на основе модуля ESP32 представлена на следующем рисунке.

Схема аудиоплеера на основе модуля ESP32

Для проигрывания звуков нам нужен громкоговоритель (динамик). В нашем проекте он подключен к модулю ESP32 через усилитель LM386. Контакты Vcc и GND модуля усилителя LM386 подключены к контактам VIN и GND модуля ESP32, а контакт IN модуля LM386 подключен к контакту 25 модуля ESP32, который является одним из двух контактов цифро-аналогового преобразования (ЦАП, на англ. DAC – Digital to Analog Converter) в данном модуле.

Внешний вид собранной конструкции аудиоплеера показан на следующем рисунке.

Внешний вид собранной конструкции аудиоплеера

Подготовка модуля ESP32 для работы с аудио файлами

Для того, чтобы воспроизводить звуки с помощью модуля ESP32, нам необходимы аудиофайлы в формате .wav, потому что модуль ESP32 может работать только с аудиофайлами такого формата.

Чтобы получить аудиофайл .wav формата, вам необходимо скачать и установить приложение Audacity Audio Editor. Данное приложение позволяет изменять тип аудиофайла, его частоту дискретизации (Sample Rate) и другие его свойства.

После установки приложения Audacity выберите в нем пункт меню Open и откройте аудиофайл, который вы хотите изменить.

Первую вещь, которую вам необходимо изменить, изменить частоту дискретизации (sampling rate) файла. Для проигрывания аудиофайла с помощью модуля ESP32 его частота дискретизации должна лежать в диапазоне от 8000 до 16000 Гц поскольку у модуля ESP32 не так много памяти чтобы поддерживать более высокие частоты дискретизации. Мы использовали частоту дискретизации 16000 Гц.

Изменение частоты дискретизации в приложении Audacity

После этого выберите пункт меню File > Export > Export as WAV чтобы сохранить аудиофайл в формате .wav.

Экспорт аудиофайла в формате .wav в приложении Audacity

В следующем открывшемся окне выберите в качестве типа файла WAV (Microsoft) и Unsigned 8-bit PCM в качестве формата кодирования (Encoding format) и нажмите на Save.

Выбор типа файла и формата кодирования в приложении Audacity

Далее нам будет необходим генератор шестнадцатеричных кодов (Hex Editor) для формирования шестнадцатеричных кодов для аудиофайла. Скачайте данный редактор по следующей ссылке – Hex Editor (HxD). Запустите его и в нем выберите пункт File > open, после чего откройте файл .wav. В результате этого для .wav файла будет сгенерирован шестнадцатеричный код (Hex code).

Сгенерированный шестнадцатеричный код для аудиофайла

Выделите весь этот код, нажав комбинацию клавиш ctrl+A, затем выберите в редакторе Hex Editor пункт меню Edit > Copy as > C чтобы скопировать выделенный код в формат языка C.

Конвертирование шестнадцатеричного кода в формат языка C

Затем вставьте этот код в Arduino IDE.

Объяснение программы для модуля ESP32

Полный код программы приведен в конце статьи, здесь же мы кратко рассмотрим его основные фрагменты.

В нашей программе мы будем использовать библиотеку для работы с аудиофайлами XT DAC Audio от компании XTronical. Саму библиотеку можно скачать по следующей ссылке.

Первым делом в программе мы подключим используемые библиотеки. Файл SoundData.h содержит шестнадцатеричный код .Wav файла, который мы будем воспроизводить с помощью модуля ESP32.

Далее создадим объект класса XT_Wav_Class, который используется аудиоклассом DAC, передающим данные .wav в качестве параметра. Dac Audio - это объект класса основного проигрывателя, в котором 25 - это номер контакта модуля ESP32, к которому подключен модуль усилителя.

Внутри функции setup() мы инициализируем последовательную связь со скоростью 115200 для целей отладки.

Внутри функции loop() мы будем заполнять буфер данных со звуками и проверять проигрывается ли звук или нет. Если нет, то мы будем воспроизводить звук в цикле.

Тестирование работы аудиоплеера

Подключите динамик (громкоговоритель) к контакту GPIO 25 модуля ESP32 через LM386 или другой подходящий модуль усилителя. Затем подключите модуль ESP32 к компьютеру и загрузите в модуль код программы. После загрузки кода программы в модуль ESP32 он начнет воспроизводить аудиофайл, записанный в файле SoundData.h. Громкость воспроизведения файла можно изменить с помощью потенциометра на модуле усилителя.

Более подробно работу проекта вы можете посмотреть на видео, приведенном в конце статьи.

Исходный код программы (скетча)

Видео, демонстрирующее работу проекта

Источник статьи

(Проголосуй первым!)
Загрузка...
4 344 просмотров

Комментарии

Аудиоплеер на основе модуля ESP32 — 10 комментариев

  1. не получается вот такие ошибки
    exit status 1
    'class XT_Wav_Class' has no member named 'Completed'

    • Наверное, библиотеки с момента написания статьи немного изменились. Вы пробовали код, предложенный ниже в комментариях пользователем Rust?

  2. Тоже проблема , Ошибка компиляции для платы ESP32 Dev Module. Пробовал разные платы в настройках ничего не меняется. Другие примеры работают нормально.

    • Наверное, что то с момента написания оригинала данной статьи изменилось в подключаемых в данном проекте библиотеках. К сожалению, пока не могу помочь в данном вопросе

  3. При компиляции скетча из примера выдает ошибку exit status 1 "Sample" was not declared in this scope

        • Сожалею. Но пока что не могу больше ничем помочь потому что нахожусь в отпуске

        • \\вот так всё работает

          #include "SoundData.h";
          #include "XT_DAC_Audio.h";

          XT_Wav_Class ForceWithYou(Force);

          XT_DAC_Audio_Class DacAudio(25,0);

          void setup() {
          Serial.begin(115200);
          }

          void loop() {
          static uint32_t i=0;
          if(ForceWithYou.Completed)
          DacAudio.PlayWav(&ForceWithYou);
          Serial.println(i);
          i++;

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *