Как на ардуино воспроизвести mp3 файл

Обновлено: 14.07.2024

Модули Ардуино позволяют создать множество различных электронных устройств, которые будут работать по несложным программам. Одним из таких устройств является компактный плеер. Ардуино плеер, проигрывающий WAV и МР3 файлы, может быть реализован на базе любого контроллера (Uno, Nano, Mega и т.п.) с помощью адаптера micro-SD, который позволяет записывать и считывать музыкальные файлы.

Формирование звука на Arduino

Arduino UNO

Так же данные могут поступать на микроконтроллер через первый разряд порта ввода/вывода. Аналого-цифровой преобразователь позволяет точно оцифровывать входной сигнал с разрешением до 10 бит. Оцифровка может выполняться на более высокой скорости преобразования, но при этом уменьшается точность, так как два младших бита игнорируются. После того как входной сигнал был оцифрован и прошёл необходимые преобразования он может быть конвертирован в аналоговую форму через блок ШИМ. Амплитуда сигнала кодируется через соотношение длительностей логического нуля и логической единицы. Важным этапом обработки выходного сигнала является фильтрация, удаляющая высокочастотные компоненты модуляции. Так же фильтры ограничивают частотный диапазон звукового сигнала.

Для воспроизведения отдельных частот звукового диапазон можно использовать внутренний генератор Arduino. Для этого достаточно подключить к плате пьезоэлектрический динамик и задать простую функцию. Динамик подключается между контактами GND и «2» разъема Digital. Динамик нужно подключать через резистор 100 Ом. Далее задаётся конкретная функция. Выбирается контакт const byte dinPin = 2; Контакт настраивается как выходной pinMode (dinPin, output); //. Затем командой tone можно включить генератор с заданной частотой. Команда выглядит следующим образом: tone ( dinPin, 440 ) ; // Получился электронный камертон генерирующий ноту Ля первой октавы. Нота будет звучать до тех пор, пока генерация не прекратится командой noTone ( dinPin ); //

Плеер для Ардуино

Схема для несложного плеера на Ардуино

Простейший плеер можно собрать буквально за 20 минут. Для этого потребуются следующие элементы:

  • Адаптер для карт памяти.
  • Соединительные провода.
  • Динамик 8 Ом.
  • Транзистор BC 546 B.
  • CS – 10 контакт.
  • MOSI –11 – “ – “.
  • MISO –12 – “ – “.
  • CLK – 13 – “ – “.
  • GND – земля.
  • 5 V – питание + 5 В.

Для работы устройства следует загрузить библиотеку TMRpcm-Arduino, которая предназначена для чтения файлов в формате wav непосредственно с карты памяти. Библиотека поддерживает все модули, выполненные на микроконтроллере ATmega328.

Модуль МР3 для ардуино

Модуль MP3 для ардуино

Более сложной модификацией плеера является вариант с использованием отдельного устройства, где датчик МР3 позволяет воспроизводить файлы именно в этом формате. Обычным носителем информации в мини плейерах является твердотельный накопитель информации или карата памяти micro-SD. На ней располагаются звуковые файлы определённого формата. Чаще всего используются карты с ёмкостью, не превышающей 32 Гб. Для подключения к Arduino удобно использовать DF Player Mini MP3. Он представляет собой компактную плату, на которой находятся следующие компоненты:

  • Слот для установки карты.
  • Усилитель звуковой частоты.
  • Дискретные элементы.

Питание модуля осуществляется от источника постоянного тока с напряжением 3,5-5,0 В. Плейер поддерживает форматы MP3, WAV, WMA и TF карты с системами FAT16 и FAT32. В устройстве имеется возможность управлять уровнями громкости от 0 до 30 и включать одну из 6 предустановленных настроек эквалайзера. Подключение плеера к ардуино выполняется следующим образом:

  • VCC – + 5 V
  • RX – RX
  • TX – TX
  • SPK 1 – динамик
  • SPK 2 – динамик
  • GND – GND

Линии RX и TX подключаются через резисторы 1 кОм. Для того чтобы устройство заработало нужно загрузить библиотеку Mini mp3 Arduino Library V2.0. Основной набор команд, выполняемых плеером:

  • Mp3_play (0002) – воспроизведение файла с указанным номером.
  • Mp3_stop – остановка воспроизведения.
  • Mp3_next – следующий файл.
  • Mp3_prev – предыдущий файл.
  • Mp3_set_volume – выбор уровня громкости.
  • Mp3_set_EQ (0-5) – выбор предустановки эквалайзера.

Если подключить к плееру USB порт через контакты USB «+» и «–», то можно воспроизводить звуковые файлы, записанные на флэш-карте.

В этой статье пойдет речь о воспроизведении аудиофайлов с помощью одной лишь Ардуино.

Иногда в проектах, построенных на основе микроконтроллера arduino присутствует необходимость в воспроизведении неких аудиофайлов. Если эти файлы являются набором нот или частотой колебания, то нет проблем – в примерах самой arduino IDE есть несколько примеров проигрывания нот и «пищания» на разных тонах.


Если же нам нужно воспроизвести речь или музыкальную запись, встроенных средств будет недостаточно. Самым банальным решением будет поставить сторонний плеер и отправлять ему команды на включение того или иного трека, есть еще вариант подключить CD – карту и читать файлы с нее (примеров этого в интернете много).

Эти варианты подходят для воспроизведения большого числа треков разных размеров, но если вам нужно воспроизводить небольшие аудиофайлы, и вы не хотите тратиться на сторонние модули, то можно залить их в саму плату arduino. Так как же это сделать? Читайте далее!

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

Теперь нужно выбрать подходящий аудиофайл. При его выборе нужно понимать, что памяти у Arduino мало и большой трек вы туда не сможете засунуть, так же не стоит надеяться на высокое качество звука (для того, чтобы аудиофайл влез во встроенную память Arduino его придется ужать, для обычной речи это незаметно, а вот на некоторой музыке скажется значительно).



Перетаскиваем скачанный аудиофайл в поле с облачком.


Выбираем настройки как на скриншоте ниже и жмем кнопочку «Начать конвертирование». В графе каналов можно выбрать и стерео, но тогда вес сконвертированного файла будет раза в два больше.

Справка. Для тех, кто не в курсе: моно это одна аудиодорожка, а стерео – две, следовательно, для воспроизведения моно необходим только один динамик, а для стерео два независимых динамика (можно воспроизводить и на одном, но тогда аудиодорожка все равно сольется в моно).

Поскольку мы используем только один динамик, разницы между стерео и моно не почувствуем, так что лучше сэкономить память.


После окончания конвертирования скачиваем получивший файл.


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


Затем открываем программу wav2asm_c, выбираем нужный файл, ставим настройки как на скриншоте (название роли играть не будет, поэтому там как хотите, с числом байт в строке тоже самое) и жмем кнопочку создать.


Получим следующий файл:




В папке проекта программы нужно создать библиотеку – файл с разрешением «.h» и названием sounddata.


Только после этого можно запускать Arduino IDE, созданный файл откроется автоматически рядом со скетчем. Заходим в него и прописываем следующее:


Важно! Все названия и типы данных должны в точности совпадать со скриншотом.

Переменной sounddata_length присваиваем длину массива, хранящего запись аудиофайла, длину массива так же указываем явно. Она записана в файле, сгенерированном программой wav2asm_c между /* и */ .

Теперь копируем содержание массива из сгенерированного файла в библиотеку. Библиотеку можно редактировать не только через Arduino IDE, но и через другие текстовые редакторы, поддерживающие данное расширение файла, тут уже кому как удобнее.



Динамик элемент не полярный, поэтому один его контакт подключаем к 11 пину, а другой к GND. Скорость воспроизведения (SAMPLE_RATE) нужно подобрать под себя. Если вы выбрали при первой конвертации стерео, то она должна быть в 2 раза больше, чем при моно. Если все было сделано правильно, то Arduino скажет нам «that’s good!».

DFPlayer Mini для Ардуино

DFPlayer Mini — это миниатюрный MP3 проигрыватель для плат Arduino. Недорогой MP3 модуль может работать без контроллера автономно с аккумулятором или в сочетании с Arduino UNO и другими платами Arduino.

Спецификация модуля

  • Поддерживаемые частоты дискретизации (кГц): 8/11.025/12/16/22.05/24/32/44.1/48
  • 24-битный выход ЦАП
  • Поддержка динамического диапазона 90дБ, поддержка SNR 85дБ
  • Полностью поддерживает файловую систему FAT16 и FAT32
  • Максимальный объем памяти SD карт 32ГБ, 64MБ NORFLASH
  • Различные режимы управления:
    • режим управления вводом / выводом
    • последовательный режим
    • режим управления кнопкой

    Применение DFPlayer Mini

    • Озвучивание событий и действий контроллеров Arduino;
    • Голосовые подсказки сигнализаций и при тревоге;
    • Голосовые функции игрушек;
    • Проигрывание музыки со вставками рекламы;
    • Автоматическое циклическое оповещение.

    Распиновка

    Распиновка DFPlayer Mini спереди \ Распиновка DFPlayer Mini сзади

    Как вставить MicroSD в DFPlayer Mini

    Как правильно вставить MicroSD карту в DFPlayer Mini

    Рабочие режимы

    1. Serial Mode (Управление с контроллера)

    Режим работы заключается в управлении модулем DFPlayer Mini при помощи плат Arduino. Существует специальная библиотека для Arduino IDE.

    2. AD Key Mode (Управление кнопками)

    Используя всего два входа ADKEY1 и ADKEY2 мы можем подключить 20 кнопок, которые позволят воспроизводить произвольно 14 файлов и управлять громкостью.

    Схема подключения кнопок к DFPlayer Mini

    Схема подключения кнопок к DFPlayer Mini

    3. I/O Mode (Упрощенный режим)

    Это самый простой способ управления модулем. Он, как и AD Key Mode, не требует контроллера. Нужно подключить только динамик, 4 кнопки и подать питание от 3.3 до 5 Вольт.

    Примечание: Обычное нажатие на Pre/Vol+ (Next/Vol-) означает предыдущий или следующий трек, длинное нажатие и удержание — громкость больше или меньше.

    Упрощенная схема DFPlayer Mini

    Упрощенная схема DFPlayer Mini

    Подключения DFPlayer Mini к Arduino

    Подготовка MP3 файлов для SD карты

    ПРИМЕЧАНИЕ: Порядок, в котором вы копируете MP3 на карту MicroSD, влияет на порядок воспроизведения MP3 файлов, а это означает, что функция Play(1) будет воспроизводить первый MP3 файл скопированный на карту MicroSD.

    .Урок 19. Делаем MP3-плеер на DFPlayer Mini и Arduino.

    Как воспроизвести аудиофайлы в формате wav я уже рассказывал в уроке: Arduino SD карта. Воспроизводим звуки и музыку в wav формате. Данный способ подходит, когда нужно воспроизвести файлы не очень высокого качества, например, уведомления, оповещение и пр. Если же надо воспроизводить файлы в формате mp3, нам поможет модуль DFPlayer Mini.

    модуль DFPlayer Mini

    MP3-плеер DFPlayer Mini позволяет воспроизводить аудиофайлы, записанные на карту памяти формата microSD. С помощью этого плеера можно управлять музыкой: приостановка и возобновление воспроизведения аудиофайла. А также можно установить громкость из 30-ти уровней громкости и одни из 6-ти режимов эквалайзера.

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

    Характеристики DFPlayer MP3 mini:

    Характеристики DFPlayer MP3 mini:

    • Напряжение питания: 3,3–5 В
    • Количество каналов: 1 моно, 3 Вт + 2 стерео, без усилителя
    • Поддерживаемые частоты дискретизации: 8, 11, 12, 16, 22, 24, 32, 44,1, 48 кГц
    • Разрядность ЦАП: 24 бита
    • Поддерживаемые файловые системы: FAT16, FAT32
    • Максимальный объём SD-карты: 32 ГБ
    • Количество каталогов композиций: до 100
    • Количество композиций в каталоге: до 255
    • Форматы аудиофайлов: MP3, WAV, WMA
    • Кол-во уровней громкости: 30
    • Режимов эквалайзера: 6 (Normal/Pop/Rock/Jazz/Classic/Base)

    Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino. Достаточно подключить несколько кнопок вот по такой схеме.

    Для реализации самого простого плеера не нужно подключать DFPlayer к Arduino.

    Но у нас уроки про Arduino, поэтому рассмотрим простой пример подключения MP3-плеер к Arduino, который подключается по аппаратному или программному UART порту (пины RX и TX) Ардуино.

    Для воспроизведения аудиофайла необходимо поместить на карту памяти microSD один трек. Файлы рекомендуется помещать в папку mp3 и называть порядковыми номерами вот в таком формате 0001.mp3. Мой опыт показывает, что можно скидывать файлы с любым названием и помещать в корень флешки, но воспроизводиться файлы будут в том порядке, в каком их загрузилина карту памяти. При пакетной загрузке одни файлы загружаются быстрее, а другие медленнее, из-за чего воспроизведение треков идет в хаотичном порядке.

    Пример MP3-плеера на DFPlayer Mini и Arduino с возможностью выбора трека и изменением громкости.

    Давайте сделаем полноценный MP3-плеера на Arduino. Для этого нам понадобится:

    5. Динамик. Я использую от ноутбука.

    6. 2 резистора на 10 кОм.

    Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.

    Все компоненты нашего будущего MP3-плеера на DFPlayer соединяем по схеме.

    Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube, чтобы можно было воспроизводить музыку в видеоролике и не получить бан. Архив с треками можно скачать внизу статьи, в разделе материалы для скачивания.

    Загрузим файлы с треками на карту памяти microSD, я использую 3 трека с YouTube

    Код для MP3-плеера на DFPlayer Mini и Arduino с возможностью выбора трека и изменением громкости будет вот такой.

    У платы Arduino NANO всего один аппаратный Serial Port, поэтому будем использовать программный порт. Для этого нужно установить и подключить библиотеку SoftwareSerial.h.

    подключить библиотеку SoftwareSerial.h.

    Чтоб проверить, подключен или нет DFPlayer используется условие:

    Чтоб проверить, подключен или нет DFPlayer используется условие:

    Если в мониторе порта мы видим надпись «DFPlayer Mini online.» все подключено правильно и работает.

    Данные строки кода

    Включают первый трек. И выводят в монитор порта информацию об этом.

    Включают первый трек. И выводят в монитор порта информацию об этом.

    Строки ниже выводят в монитор порта полезную информацию о статусе работы.

    Строки ниже выводят в монитор порта полезную информацию о статусе работы.

    Первая строчка выводит статус: цифра с кодом.

    Вторая строчка выводить уровень текущей громкости от 0 до 30

    Третья выводит настройки эквалайзера, также в цифровом значении.

    Четвертая выводит, сколько треков найдено на карте памяти.

    Последняя стока выводит, какой трек воспроизводится сейчас.

    В мониторе порта это будет выглядеть вот так:

    В мониторе порта это будет выглядеть вот так:

    В основном цикле loop выводим условия проверки нажатия той или иной кнопки. И выполняем нужную команду.

    Это одно условие для примера, остальные устроены аналогично, их рассматривать не будем. Список команд для работы с DFPlayer Mini myDFPlayer.next(); // Воспроизвести следующий mp3

    Как видите, не так много кода и алгоритм работы достаточно несложный. Планирую реализовать пару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте. Благо, опыт работы с этим модулем и данными платформами есть.

    ару проектов с использованием модуля DFPlayer Mini и Arduino, ESP8266, ESP32 для публикации на сайте.

    Пишите ваши предложения и пожелания в комментариях. Чем больше будет откликов, тем чаше будут выходить проекты и уроки на сайте.

    Не забывайте подписываться на канал Youtube и вступайте в группы в Вконтакте и Facebook.

    Читайте также: