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

.Урок 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) Ардуино.

Код с выводом отладочной информацией будет вот таким. Данный код взят с сайта библиотеки DFRobotDFPlayerMini. Также нам понадобится библиотека для работы спрограммным UART портом SoftwareSerial.Скачать библиотеки можно внизу статьи, в разделе материалы для скачивания.

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

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

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

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

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


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

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

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

#include "DFRobotDFPlayerMini.h"
// библиотека для эмуляции Serial порта
#include <SoftwareSerial.h>
// создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
// RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
// TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini 
DFRobotDFPlayerMini myDFPlayer;
int buttonNext = 2;   // кнопка следующий трек
int buttonPause = 3;  // кнопка пауза/ пуск
int buttonPrevious = 4; // кнопка предыдущий трек 
int buttonVolumeUp = 5; // кнопка увеличение громкости
int buttonVolumeDown = 6; // кнопка уменьшение громкости
boolean isPlaying = false; // статус воспроизведения/пауза
void setup() {
  pinMode(buttonPause, INPUT_PULLUP); 
  pinMode(buttonNext, INPUT_PULLUP);
  pinMode(buttonPrevious, INPUT_PULLUP);
  pinMode(buttonVolumeUp, INPUT_PULLUP);
  pinMode(buttonVolumeDown, INPUT_PULLUP);
  mySoftwareSerial.begin(9600); 
  Serial.begin(9600);
  delay(1000);
  Serial.println();
  Serial.println("DFPlayer Mini Demo");
  Serial.println("Initializing DFPlayer...");
  if (!myDFPlayer.begin(mySoftwareSerial)) {
    Serial.println("Unable to begin:");
    Serial.println("1.Please recheck the connection!");
    Serial.println("2.Please insert the SD card!");
    while (true);
  }
  Serial.println(F("DFPlayer Mini online."));
  myDFPlayer.setTimeOut(300);
  //----Set volume----
  myDFPlayer.volume(15); //Set volume value (0~30).
  //----Set different EQ----
  myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
  myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
  myDFPlayer.play(1); //Воспроизведение первого mp3
  isPlaying = true; // воспроизводим
  Serial.println("Playing..");
  //----Читать информацию----
  Serial.println(myDFPlayer.readState()); //читать состояние mp3
  Serial.println(myDFPlayer.readVolume()); //Текущая громкость 
  Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
  Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
  Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
}
void loop() {
  if (digitalRead(buttonPause) == LOW) {
    if (isPlaying) { // если было воспроизведение трека
      myDFPlayer.pause(); // пауза
      isPlaying = false; // пауза
      Serial.println("Paused..");
    } else {        // иначе
      isPlaying = true; // воспроизводим
      myDFPlayer.start(); //запускаем mp3 с паузы
    }
    delay(500);
  }
  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonPrevious) == LOW) {
    if (isPlaying) {
      myDFPlayer.previous(); //Previous Song
      Serial.println("Previous Song..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeUp) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeUp(); //Volume Up
      Serial.println("Volume Up..");
    }
    delay(500);
  }
  if (digitalRead(buttonVolumeDown) == LOW) {
    if (isPlaying) {
      myDFPlayer.volumeDown(); //Volume Down
      Serial.println("Volume Down..");
    }
    delay(500);
  }
}

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

  if (digitalRead(buttonNext) == LOW) {
    if (isPlaying) {
      myDFPlayer.next(); //Next Song
      Serial.println("Next Song..");
    }
    delay(500);
  }

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

  myDFPlayer.previous();  // Воспроизвести предыдущий mp3
  myDFPlayer.play(1);  //Воспроизведение первого mp3
  myDFPlayer.loop(1);  //зациклить первый mp3
  myDFPlayer.pause();  //приостановить mp3
  myDFPlayer.start();  //запускаем mp3 с паузы
  myDFPlayer.playFolder(15, 4);  //воспроизводить определенный mp3 в SD: /15/004.mp3; Имя папки (1 ~ 99);
  myDFPlayer.enableLoopAll(); //зациклить все mp3 файлы.
  myDFPlayer.disableLoopAll(); //остановить цикл всех mp3 файлов.
  myDFPlayer.playMp3Folder(4); //воспроизводить конкретный mp3 в SD: /MP3/0004.mp3; Имя файла (0 ~ 65535)
  myDFPlayer.advertise(3); //рекламируем конкретный mp3 в SD: /ADVERT/0003.mp3; Имя файла (0 ~ 65535
  myDFPlayer.playLargeFolder(2, 999); //воспроизводить конкретный mp3 в SD: /02/004.mp3; Имя папки (1 ~ 10); Имя файла (1 ~ 1000)    
  myDFPlayer.loopFolder(5); //зациклить все mp3 файлы в папке SD: / 05.
  myDFPlayer.randomAll(); //Произвольное воспроизведение всех mp3.  
  myDFPlayer.enableLoop(); //включить цикл.
  myDFPlayer.disableLoop(); //отключить цикл

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

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

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

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

Всем Пока-Пока.

И до встречи в следующем уроке.

Понравилась статья? Поделитесь ею с друзьями:

Файлы для скачивания

MP3-плеер на DFPlayer Mini и Arduino MP3-плеер на DFPlayer Mini и Arduino.ino4 Kb 2399 Скачать
DFRobotDFPlayerMini DFRobotDFPlayerMini.zip763 Kb 2765 Скачать
SoftwareSerial SoftwareSerial.zip11 Kb 2279 Скачать
mp3 mp3.zip19890 Kb 2468 Скачать
Вернуться в раздел: Уроки Arduino: Подключение датчиков и модулей к Arduino Дата публикации 28 февраля , 2020

Комментарии

Войдите или Зарегистрируйтесь И Вы сможете общаться на форуме и оставлять комментарии без капчи.

Максим
#5 Гость: Максим (10 мая, 2022 в 10:03)

Здравствуйте. Может кто подсказать как сделать несколько функций на 1 кнопку в данном проекте? Например я хочу на 1 кнопку при обычном клике играть следующую мелодию, а при зажатии кнопки повышать громкость

Денис
#4 Гость: Денис (30 июня, 2020 в 20:50)

на основе статьи сделал мелкому игрушку. заказчик доволен.

Mark
#3 Mark (19 марта, 2020 в 01:11)
Общий вид сборки
Вид на плату

Здравствуйте!
Собираю игрушку, но при реализации возникает ошибка.
Скетч (копипаст скетча проекта) проверен – компиляция завершена. Успешно загружается на Arduino Uno. Но после загрузки в мониторе порта отображается ошибка: 1.Please recheck the
connection! 2.Please insert the SD card! На нажатие кнопок плеер не реагирует.
При подключении пинов № 10 и 11 к плееру напрямую (к TX и RX), минуя резисторы, и перезагрузке платы, плеер инициализируется в мониторе порта и начинает вести себя согласно
скетчу. Но при этом звук воспроизводится с громким дребезгом (независимо от
уровня установленной в скетче громкости).
Однако если в момент воспроизведения извлечь провод RX, то шум исчезает. Но плеер естественно перестает отвечать на команды, пока RX не будет обратно на месте.
Плеер отвечает на команды и хорошо воспроизводит звук в томслучае, если в момент, когда он работает и определен в мониторе порта, провода
от пинов 10 и 11 Arduino подключить к TX и RX через резисторы 220 Ом.
Однако если повторно открыть монитор порта или перезапустить плеер, то появляется ошибка: 1.Please recheck the connection! 2.Please insert
the SD card! На нажатие кнопок плеер не реагирует. После перезапуска платы в
динамике слышен однократный щелчок и дважды моргает диод RX на плате.
Ситуация исправляется только повторным подключением пинов №10 и 11 к TX и RX с кратковременным извлечением кабеля USB.
Почему может возникать такая нестабильность в работе? 2 вечера поисков не дали ответа.
Заранее благодарю за помощь.
jktu
#1 jktu (14 марта, 2020 в 09:15)
Можно ли на этом скетче подключить голосовой mp3 модуль? JR6001

Cлучайные товары

Посмотреть товар в Магазине »

Мы в соц сетях

Подпишись на канал Telegram

Portal-PK (Портал ПК) © 2015 - 2024
Разработка проектов
AT Block
DWIN Box