Введение
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
- Различные режимы управления:
- режим управления вводом / выводом
- последовательный режим
- режим управления кнопкой
- Интеграция рекламных вставок при проигрывании музыки
- Поддерживает до 100 папок (каждая папка может содержать до 255 песен)
- 30 уровней регулировки громкости
- 6-уровневый эквалайзер
Применение DFPlayer Mini
- Озвучивание событий и действий контроллеров Arduino;
- Голосовые подсказки сигнализаций и при тревоге;
- Голосовые функции игрушек;
- Проигрывание музыки со вставками рекламы;
- Автоматическое циклическое оповещение.
Распиновка
Распиновка DFPlayer Mini спереди \ Распиновка DFPlayer Mini сзади
Пин | Описание | Примечание |
---|---|---|
VCC | Входное напряжение | DC3.2~5.0В; DC4.2В |
RX | UART вход | RX вход |
TX | UART выход | TX выход |
DAC_R | Аудио выход правый | Выход правый на динамики или наушники |
DAC_L | Аудио выход левый | Выход левый на динамики или наушники |
SPK2 | Динамик – | Выход с усилителем 3Вт |
GND | Земля | Земля |
SPK1 | Динамик + | Выход с усилителем 3Вт |
IO1 | Триггер 1 | Короткое нажатие – проиграть предыдущий трек (длинное нажатие – уменьшение громкости) |
GND | Земля | Земля |
IO2 | Триггер 2 | Короткое нажатие – проиграть следующий трек (длинное нажатие – увеличение громкости) |
ADKEY1 | Текст ячейки | Текст ячейки |
ADKEY2 | Текст ячейки | Текст ячейки |
USB+ | USB+ DP | Порт USB |
USB- | USB- DM | Порт USB |
BUSY | Статус | Low – включено, High – выключено |
Как правильно вставить MicroSD карту в DFPlayer Mini
Рабочие режимы
1. Serial Mode (Управление с контроллера)
Режим работы заключается в управлении модулем DFPlayer Mini при помощи плат Arduino. Существует специальная библиотека для Arduino IDE.
2. AD Key Mode (Управление кнопками)
Используя всего два входа ADKEY1 и ADKEY2 мы можем подключить 20 кнопок, которые позволят воспроизводить произвольно 14 файлов и управлять громкостью.
3. I/O Mode (Упрощенный режим)
Это самый простой способ управления модулем. Он, как и AD Key Mode, не требует контроллера. Нужно подключить только динамик, 4 кнопки и подать питание от 3.3 до 5 Вольт.
Примечание: Обычное нажатие на Pre/Vol+ (Next/Vol-) означает предыдущий или следующий трек, длинное нажатие и удержание – громкость больше или меньше.
Подключения DFPlayer Mini к Arduino
Подготовка MP3 файлов для SD карты
ПРИМЕЧАНИЕ: Порядок, в котором вы копируете MP3 на карту MicroSD, влияет на порядок воспроизведения MP3 файлов, а это означает, что функция Play(1) будет воспроизводить первый MP3 файл скопированный на карту MicroSD.
Для пользователей Mac |
---|
ПРИМЕЧАНИЕ: Если вы используете MacOS для копирования MP3 файлов, то файловая система автоматически добавит скрытые файлы: “._0001.mp3”. Эти файлы модуль будет обрабатывать, как обычные MP3. Чтобы удалить эти файлы выполните команду в терминале: dot_clean /Volumes/<SDVolumeName> <SDVolumeName> – замените на имя тома вашей SD-карты. |
Библиотека DFPlayer Mini для Arduino
Пример кода для Arduino
GetStarted – в этом примере модуль каждые 3 секунды включает следующий трек.
/*************************************************** DFPlayer Mini - Компактный мини MP3 проигрыватель для Arduino В этом примере показаны основные функции библиотеки для модуля DFPlayer Mini Автор библиотеки: Angelo Qiao ****************************************************/ /*******Инструкция и совместимость*********** 1. Инструкцию по подключению: https://focma.com/wiki/DFPlayer_Mini 2. Этот код протестирован на платах Arduino UNO, Arduino Leonardo, Arduino Mega. ****************************************************/ #include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); void setup() { mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); // Инициализация модуля if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); // Проверьте соединение Serial.println(F("2.Please insert the SD card!")); // Вставьте SD карту while(true); } Serial.println(F("DFPlayer Mini online.")); // Готов к работе myDFPlayer.volume(10); // Установка громкости от 0 до 30 myDFPlayer.play(1); // Проигрывать с первого MP3 файла } void loop() { static unsigned long timer = millis(); if (millis() - timer > 3000) { timer = millis(); myDFPlayer.next(); // Переходить на следующий трек каждые 3 секунды } if (myDFPlayer.available()) { printDetail(myDFPlayer.readType(), myDFPlayer.read()); // Выводить сообщения о статусе и ошибках модуля } } void printDetail(uint8_t type, int value){ switch (type) { case TimeOut: Serial.println(F("Time Out!")); // Время вышло break; case WrongStack: Serial.println(F("Stack Wrong!")); break; case DFPlayerCardInserted: Serial.println(F("Card Inserted!")); // Карта вставлена break; case DFPlayerCardRemoved: Serial.println(F("Card Removed!")); // Карта удалена break; case DFPlayerCardOnline: Serial.println(F("Card Online!")); // Карта готова break; case DFPlayerPlayFinished: Serial.print(F("Number:")); // Номер Serial.print(value); Serial.println(F(" Play Finished!")); // Воспроизведение окончено break; case DFPlayerError: Serial.print(F("DFPlayerError:")); // Ошибка switch (value) { case Busy: Serial.println(F("Card not found")); // Карта не найдена break; case Sleeping: Serial.println(F("Sleeping")); // Сон break; case SerialWrongStack: Serial.println(F("Get Wrong Stack")); break; case CheckSumNotMatch: Serial.println(F("Check Sum Not Match")); break; case FileIndexOut: Serial.println(F("File Index Out of Bound")); break; case FileMismatch: Serial.println(F("Cannot Find File")); // Не могу найти файл break; case Advertise: Serial.println(F("In Advertise")); // Реклама break; default: break; } break; default: break; } }
FullFunction – показывает работу всех функций модуля.
/*************************************************** DFPlayer Mini - Компактный мини MP3 проигрыватель для Arduino В этом примере показаны основные функции библиотеки для модуля DFPlayer Mini Автор библиотеки: Angelo Qiao ****************************************************/ /***********Инструкция и совместимость*************** 1. Инструкцию по подключению: https://focma.com/wiki/DFPlayer_Mini 2. Этот код протестирован на платах Arduino UNO, Arduino Leonardo, Arduino Mega. ****************************************************/ #include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); void setup() { mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3. Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while (true); } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms //----Set volume / Установка громкости---- myDFPlayer.volume(10); // Установка громкости от 0 до 30 myDFPlayer.volumeUp(); // Громкость больше myDFPlayer.volumeDown(); // Громкость меньше //----Set different EQ / Эквалайзер---- // Раскомментируйте желаемый myDFPlayer.EQ(DFPLAYER_EQ_NORMAL); // myDFPlayer.EQ(DFPLAYER_EQ_POP); // myDFPlayer.EQ(DFPLAYER_EQ_ROCK); // myDFPlayer.EQ(DFPLAYER_EQ_JAZZ); // myDFPlayer.EQ(DFPLAYER_EQ_CLASSIC); // myDFPlayer.EQ(DFPLAYER_EQ_BASS); //----Set device we use SD as default---- // myDFPlayer.outputDevice(DFPLAYER_DEVICE_U_DISK); myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_AUX); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_SLEEP); // myDFPlayer.outputDevice(DFPLAYER_DEVICE_FLASH); //----Mp3 control / Управление---- // myDFPlayer.sleep(); // Сон // myDFPlayer.reset(); // Перезагрузка // myDFPlayer.enableDAC(); // Включить DAC // myDFPlayer.disableDAC(); // Выключить DAC // myDFPlayer.outputSetting(true, 15); // Настройка выхода //----Mp3 play / Воспроизведение---- myDFPlayer.next(); // Воспроизвести следующий MP3 delay(1000); myDFPlayer.previous(); // Воспроизвести предыдущий MP3 delay(1000); myDFPlayer.play(1); // Воспроизвести первый MP3 delay(1000); myDFPlayer.loop(1); // Зациклить первый MP3 delay(1000); myDFPlayer.pause(); // Пауза delay(1000); myDFPlayer.start(); // Продолжить воспроизведение после паузы delay(1000); myDFPlayer.playFolder(15, 4); // Воспроизвести файл 004.mp3 из директории 15 - SD:/15/004.mp3 delay(1000); myDFPlayer.enableLoopAll(); // Зациклить все MP3 файлы delay(1000); myDFPlayer.disableLoopAll(); //Выключить зацикливание всех MP3 файлы delay(1000); myDFPlayer.playMp3Folder(4); // play specific mp3 in SD:/MP3/0004.mp3; File Name(0~65535) delay(1000); myDFPlayer.advertise(3); // advertise specific mp3 in SD:/ADVERT/0003.mp3; File Name(0~65535) delay(1000); myDFPlayer.stopAdvertise(); // Остановить рекламу delay(1000); myDFPlayer.playLargeFolder(2, 999); // play specific mp3 in SD:/02/004.mp3; delay(1000); myDFPlayer.loopFolder(5); // Зациклить все MP3 файлы в директории 05 - SD:/05 delay(1000); myDFPlayer.randomAll(); // Случайно, рандомно воспроизвести файлы MP3 delay(1000); myDFPlayer.enableLoop(); // enable loop delay(1000); myDFPlayer.disableLoop(); // disable loop delay(1000); //----Read imformation---- Serial.println(myDFPlayer.readState()); // Вывести статус модуля Serial.println(myDFPlayer.readVolume()); // Вывести текущую громкость Serial.println(myDFPlayer.readEQ()); // Вывести данные эквалайзера Serial.println(myDFPlayer.readFileCounts()); // Вывести количество файлов Serial.println(myDFPlayer.readCurrentFileNumber()); // Вывести текущий файл Serial.println(myDFPlayer.readFileCountsInFolder(3)); // Вывести количество в директории 3 - SD:/03 } void loop() { static unsigned long timer = millis(); if (millis() - timer > 3000) { timer = millis(); myDFPlayer.next(); //Play next mp3 every 3 second. } if (myDFPlayer.available()) { printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states. } } void printDetail(uint8_t type, int value) { switch (type) { case TimeOut: Serial.println(F("Time Out!")); break; case WrongStack: Serial.println(F("Stack Wrong!")); break; case DFPlayerCardInserted: Serial.println(F("Card Inserted!")); break; case DFPlayerCardRemoved: Serial.println(F("Card Removed!")); break; case DFPlayerCardOnline: Serial.println(F("Card Online!")); break; case DFPlayerPlayFinished: Serial.print(F("Number:")); Serial.print(value); Serial.println(F(" Play Finished!")); break; case DFPlayerError: Serial.print(F("DFPlayerError:")); switch (value) { case Busy: Serial.println(F("Card not found")); break; case Sleeping: Serial.println(F("Sleeping")); break; case SerialWrongStack: Serial.println(F("Get Wrong Stack")); break; case CheckSumNotMatch: Serial.println(F("Check Sum Not Match")); break; case FileIndexOut: Serial.println(F("File Index Out of Bound")); break; case FileMismatch: Serial.println(F("Cannot Find File")); break; case Advertise: Serial.println(F("In Advertise")); break; default: break; } break; default: break; } }
Файлы и директории
ПРИМЕЧАНИЕ: Имя папки должно быть “mp3”. Она должна быть помещена в корневой каталог SD-карты, а имя mp3 файла должно состоять из 4-х цифр. Например: “0001.mp3”, помещенное в папку “mp3”. Если вам требуется обозначить файл, вы можете добавить текст после цифр – “0001hello.mp3”.