DFPlayer Mini — это недорогой компактный модуль с упрощённым аудиовыводом, который можно подключить напрямую к динамику или разъёму наушников.
Модуль можно использовать и как самостоятельное устройство, подключив батарейку, динамик и кнопки, так и совместно с микроконтроллером или платой разработчика (например, Arduino) у которой есть UART порт (RX/TX, Serial), чтобы посредством простых команд, отправляемых через этот интерфейс, проигрывать музыку и выполнять другие функции, такие как проигрывание следующей или предыдущей композиции, перемешивание треков, приостановка текущей песни и т. д.
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
Соедините элементы, как показано на нижеследующей схеме, созданной с помощью программы Fritzing (полный обзор программы по ссылке).
Cоединение между платой Arduino и модулем DFPlayer Mini достаточно простое, так как нам надо, помимо выводов питания VCC и GND, соединить ещё только два вывода.
Обратите внимание, что между выводом Rx модуля и выводом платы Arduino добавлен резистор 1 кОм, чтобы снизить шум, но в нём нет необходимости, если ваш случай не предполагает шум на линии Rx.
Ниже наглядно показана таблица с порядком соединения выводов:
DFplayer Mini | Arduino |
Rx | D11 |
Tx | D10 |
VCC | 5 В |
VCC | 5 В |
Gnd | Gnd |
Код для управления DFPlayer Mini
Чтобы отправлять соответствующие нажатым кнопкам команды от платы Arduino к модулю DFPlayer Mini, мы будем использовать библиотеку платформы Arduino, программно реализующую последовательный интерфейс. Для отправки команд мы могли бы использовать выводы аппаратного последовательного интерфейса (0 и 1), которые также используются и для связи с компьютером.
Но, если эти линии подключены к ещё какому-нибудь устройству, помимо компьютера, это может создать помехи при загрузке кода в плату. Поэтому, чтобы не создавать проблем, мы будем использовать библиотеку программного последовательного интерфейса Software Serial с выводами 10 и 11.
Код для этого проекта прост. Но, хотя для модуля DFPlayer Mini предусмотрена библиотека, содержащая различные функции для управления проигрыванием MP3, мы напишем собственные функции, просто ради удовольствия и чтобы показать, как на самом деле функционирует этот модуль.
Как обычно, первым делом мы включаем библиотеки, которые будем использовать, а именно библиотеку программного последовательного интерфейса, создав её объект, и определяем выводы для линий Rx и Tx этого интерфейса (выводы 10 и 11 соответственно).
1 2 3 4 5 6 |
/// MP3 PLAYER PROJECT /// http://educ8s.tv/arduino-mp3-player/ ////////////////////////////////////////// #include "SoftwareSerial.h" SoftwareSerial mySerial(10, 11); |
Далее мы определяем шестнадцатеричные значения для нескольких команд, которые собираемся использовать.
1 2 3 4 5 |
# 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, к которым подключим кнопки.
1 2 3 |
int buttonNext = 2; int buttonPause = 3; int buttonPrevious = 4; |
Далее переходим к функции setup(), в которой мы настраиваем режим для выводов, к которым подключим кнопки, и устанавливаем на них «высокий» (high) уровень. После всего этого мы запускаем последовательный интерфейс со скоростью передачи 9600.
1 2 3 4 5 6 7 8 9 10 |
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), чтобы обозначить, что в настоящий момент идёт процесс воспроизведения.
1 2 3 |
delay(1000); playFirst(); isPlaying = true; |
Переходим к функции loop(). Эта функции в основном отслеживает нажатие кнопок и отправляет соответствующие кнопкам команды модулю DFPlayer Mini, который либо проигрывает (в зависимости от значения переменной isPlaying), либо ставит на паузу текущую песню или переходит к следующей или предыдущей.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 |
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(); } } } |
Далее приведён весь код для этого проекта. Его также можно скачать по ссылке.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 |
/// MP3 PLAYER PROJECT /// http://educ8s.tv/arduino-mp3-player/ ////////////////////////////////////////// #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. Вы должны услышать проигрываемую песню из динамика.
Ниже приведены примеры применения этого руководства, и я надеюсь, это вдохновит вас на создание чего-нибудь действительно классного.
Практическое применение данного проекта:
- Голосовое оповещение для пожарной сигнализации.
- Голосовые инструкции для пункта взимания платы за проезд по мосту или дороге.
- Голосовое оповещение для помещений, связанных с электрооборудованием, телекоммуникациями или финансовой деятельностью и т.д.
1 комментарий. Оставить новый
А не подскажете как сделать что бы воспроизведение треков начиналось в случайном порядке?