--- title: "▶️ DFPlayer Mini миниатюрный MP3 проигрыватель для Arduino" date: 2023-05-31T22:05:00+03:00 draft: false tags: [hardware, smd, arduino] --- ## Примечание Статья скопирована с сайта https://focma.com/dfplayer-mini/. ## DFPlayer Mini ![DFPlayer Mini](/content/images/smd/dfplayer-mini-mp3-module.jpg) 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 спереди. ![](/content/images/smd/dfplayer_mini_pinout_front-scaled.jpg) Распиновка DFPlayer Mini сзади. ![](/content/images/smd/dfplayer_mini_pinout_back-scaled.jpg) {{< table "table table-sm table-striped table-hover" >}} | Пин | Описание | Примечание | |--------|--------------------|---------------------------------------------------------------------------------------| | 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 — выключено | {{}} ## Рабочие режимы ### 1. Serial Mode (Управление с контроллера) Режим работы заключается в управлении модулем DFPlayer Mini при помощи плат Arduino. Существует специальная библиотека для Arduino IDE. ### 2. AD Key Mode (Управление кнопками) Используя всего два входа `ADKEY1` и `ADKEY2` мы можем подключить 20 кнопок, которые позволят воспроизводить произвольно 14 файлов и управлять громкостью. ![](/content/images/smd/df-player-mini-adkey-control-800x338.png) ## 3. I/O Mode (Упрощенный режим) Это самый простой способ управления модулем. Он, как и AD Key Mode, не требует контроллера. Нужно подключить только динамик, 4 кнопки и подать питание от 3.3 до 5 Вольт. **Примечание:** Обычное нажатие на **Pre/Vol+** (**Next/Vol-**) означает предыдущий или следующий трек, длинное нажатие и удержание — громкость больше или меньше. ![](/content/images/smd/df-player-mini-io-mode-800x440.png) ## Подключения DFPlayer Mini к Arduino ![](/content/images/smd/dfplayer-mini-to-arduino.png) ## Подготовка MP3 файлов для SD карты **ПРИМЕЧАНИЕ:** Порядок, в котором вы копируете MP3 на карту MicroSD, влияет на порядок воспроизведения MP3 файлов, а это означает, что функция `Play(1)` будет воспроизводить первый MP3 файл скопированный на карту MicroSD. ### Для пользователей Mac **ПРИМЕЧАНИЕ:** Если вы используете MacOS для копирования MP3 файлов, то файловая система автоматически добавит скрытые файлы `._0001.mp3`. Эти файлы модуль будет обрабатывать, как обычные MP3. Чтобы удалить эти файлы выполните команду в терминале: ```sh dot_clean /Volumes/ ``` `` — замените на имя тома вашей SD-карты. ## Библиотека DFPlayer Mini для Arduino Пример кода для Arduino `GetStarted` — в этом примере модуль каждые 3 секунды включает следующий трек. ```cpp /*************************************************** 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` — показывает работу всех функций модуля. ```cpp /*************************************************** 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`.