DFPlayer Mini — это недорогой компактный модуль с упрощённым аудиовыводом, который можно подключить напрямую к динамику или разъёму наушников.
DFPlayer Mini оснащён разъёмом для карты microSD и поддерживает файловые системы FAT16 и FAT32.Некоторые характеристики модуля DFPlayer Mini:Поддержка частот дискретизации 8 кГц, 11,025 кГц, 12 кГц, 16 кГц, 22,05 кГц, вплоть до 48 кГц.
24‑битный вывод ЦАП, динамический диапазон 90 дБ, отношение сигнал-шум 85 дБ.
Файловые системы FAT16, FAT32; максимальный поддерживаемый объём карт TF — 32 ГБ.
Несколько режимов управления, в том числе через последовательный интерфейс и посредством кнопок через порт для подключения резистивной клавиатуры ADKEY.
Функция вставки объявлений — текущую проигрываемую фоновую музыку можно приостановить на время объявления.
Встроенный усилитель 3 Вт.
Сортировка аудиофайлов по папкам, до 100‑а папок, каждую папку можно связать с 1000 песен.
30 уровней громкости, 10 режимов эквалайзера.
Цель этого руководства — показать, как использовать MP3‑модуль с платформой Arduino. Причём, управлять проигрыванием мы будем посредством кнопок, подключённых к плате Arduino, а плата в свою очередь будет отправлять команды модулю через UART интерфейс.Для этого мы возьмём три кнопки. Первая кнопка послужит для проигрывания предыдущей композиции. Вторая кнопка — для приостановки и возобновления воспроизведения текущего проигрываемого файла. Третья — для проигрывания следующего файла.
НЕОБХОДИМЫЕ ДЛЯ СБОРКИ КОМПОНЕНТЫ
Для проекта понадобятся следующие компоненты.
Модуль DFPlayer Mini
Arduino Uno
Макетная плата
Кнопки
Динамик
Набор резисторов
Провода
Проволочные перемычки
СХЕМА ПОДКЛЮЧЕНИЯ DFPLAYER MINI К ARDUINO
Соедините элементы, как показано на нижеследующей схеме.
Обратите внимание, что между выводом Rx модуля и выводом платы Arduino добавлен резистор 1 кОм, чтобы снизить шум, но в нём нет необходимости, если ваш случай не предполагает шум на линии Rx.Ниже наглядно показана таблица с порядком соединения выводов:
DFplayer MiniArduinoRxD11TxD10VCC5 ВVCC5 ВGndGnd
КОД ДЛЯ УПРАВЛЕНИЯ DFPLAYER MINI
Чтобы отправлять соответствующие нажатым кнопкам команды от платы Arduino к модулю DFPlayer Mini, мы будем использовать библиотеку платформы Arduino, программно реализующую последовательный интерфейс. Для отправки команд мы могли бы использовать выводы аппаратного последовательного интерфейса (0 и 1), которые также используются и для связи с компьютером.Но, если эти линии подключены к ещё какому-нибудь устройству, помимо компьютера, это может создать помехи при загрузке кода в плату. Поэтому, чтобы не создавать проблем, мы будем использовать библиотеку программного последовательного интерфейса Software Serial с выводами 10 и 11.Код для этого проекта прост. Но, хотя для модуля DFPlayer Mini предусмотрена библиотека, содержащая различные функции для управления проигрыванием MP3, мы напишем собственные функции, просто ради удовольствия и чтобы показать, как на самом деле функционирует этот модуль.Как обычно, первым делом мы включаем библиотеки, которые будем использовать, а именно библиотеку программного последовательного интерфейса, создав её объект, и определяем выводы для линий Rx и Tx этого интерфейса (выводы 10 и 11 соответственно).
#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
Далее мы определяем шестнадцатеричные значения для нескольких команд, которые собираемся использовать.
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
Далее объявляем переменные для выводов платы Arduino, к которым подключим кнопки.
int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
Далее переходим к функции setup(), в которой мы настраиваем режим для выводов, к которым подключим кнопки, и устанавливаем на них «высокий» (high) уровень. После всего этого мы запускаем последовательный интерфейс со скоростью передачи 9600.
void setup () {
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
mySerial.begin (9600);
Далее мы проигрываем первую песню на накопителе, используя функцию playfirst(), и устанавливаем логическую переменную isPlaying в значение «истина» (true), чтобы обозначить, что в настоящий момент идёт процесс воспроизведения.
delay(1000);
playFirst();
isPlaying = true;
Переходим к функции loop(). Эта функции в основном отслеживает нажатие кнопок и отправляет соответствующие кнопкам команды модулю DFPlayer Mini, который либо проигрывает (в зависимости от значения переменной isPlaying), либо ставит на паузу текущую песню или переходит к следующей или предыдущей.
void loop () {
if (digitalRead(buttonPause) == ACTIVATED)
{
if(isPlaying)
{
pause();
isPlaying = false;
}else
{
isPlaying = true;
play();
}
}
if (digitalRead(buttonNext) == ACTIVATED)
{
if(isPlaying)
{
playNext();
}
}
if (digitalRead(buttonPrevious) == ACTIVATED)
{
if(isPlaying)
{
playPrevious();
}
}
}
Далее приведён весь код для этого проекта.
#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
# define ACTIVATED LOW
int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;
void setup () {
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;
}
void loop () {
if (digitalRead(buttonPause) == ACTIVATED)
{
if(isPlaying)
{
pause();
isPlaying = false;
}else
{
isPlaying = true;
play();
}
}
if (digitalRead(buttonNext) == ACTIVATED)
{
if(isPlaying)
{
playNext();
}
}
if (digitalRead(buttonPrevious) == ACTIVATED)
{
if(isPlaying)
{
playPrevious();
}
}
}
void playFirst()
{
execute_CMD(0x3F, 0, 0);
delay(500);
setVolume(20);
delay(500);
execute_CMD(0x11,0,1);
delay(500);
}
void pause()
{
execute_CMD(0x0E,0,0);
delay(500);
}
void play()
{
execute_CMD(0x0D,0,1);
delay(500);
}
void playNext()
{
execute_CMD(0x01,0,1);
delay(500);
}
void playPrevious()
{
execute_CMD(0x02,0,1);
delay(500);
}
void setVolume(int volume)
{
execute_CMD(0x06, 0, volume); // Set the volume (0x00~0x30)
delay(2000);
}
void execute_CMD(byte CMD, byte Par1, byte Par2)
// Excecute the command and parameters
{
// Calculate the checksum (2 bytes)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Build the command line
byte Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(checksum), lowByte(checksum), End_Byte};
//Send the command line to the module
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}
ДЕМОНСТРАЦИЯ РАБОТЫ
Запишите композиции на карту SD и вставьте её в модуль DFPlayer Mini, затем загрузите код в плату Arduino и соедините динамик и модуль DFPlayer Mini. Вы должны услышать проигрываемую песню из динамика Ниже приведены примеры применения этого руководства, и я надеюсь, это вдохновит вас на создание чего-нибудь действительно классного.