elchupanibrei (elchupanibrei) wrote,
elchupanibrei
elchupanibrei

Categories:

Библиотека для DFPlayer Mini

Из того что есть на GitHub ничего не понравилось. Пришлось писать свою...

Так и не понял зачем, для ожидания ответа, люди изобретают велосипед с millis(), delay() или дополнительными библиотеками. Все уже давно есть в Arduino - Serial.setTimeout() и Serial.readBytes(). Второй вопрос у меня к китайским товарищам. Зачем они ставят перемычку не туда? Из-за этого во время инициализации чипа из динамика валит шум и треск. У усилителя DM8002 есть standby режим, а у DFPlayer Mini есть пин busy. Нужно просто перепаять резистор/перемычку справа (STBY->GND) налево (STBY->BUSY).


специально обученная перемычка


DFPlayer Mini pinout

В datasheet куча непоняток и неточностей. Например я так не понял как уводить модуль в loop all, loop folder, random. Мой умеет только loop track. Пытался найти перебором - модуль отвечает ошибкой на все команды, выше 0x1A. Перепутаны местами количество треков на USB и SD card и тд. Sleep не отключаем и работает всегда - после проигрывания модуль снижает потребление до 20-25мА в не зависимости от команды. Для понимания криво переведенного datasheet использовал классный терминал SerIO. Можно прописывать свою последовательность и засылать пакетом.


кросс платформенный терминал SerIO

Многие пишут что у модуля нет mute. Это не правда. Для этого есть команда 0x1A, я ее обернул в enableDAC(bool enable). Остальные забыли школьную программу и не знают как найти количество треков в папке "mp3". Всего-то надо отнять количество треков в каждой папке из количества всех треков на карте. Вот как я делаю это в MatrixClock:

tracks = mp3.getTotalTracksSD() - mp3.getTotalTracksFolder(1) - mp3.getTotalTracksFolder(2);

У модуля адские требования к названию файлов. Если файлы находятся в корне, то они должны содержать 4-е цифры с ведущими нулями. Например: SD_ROOT/0001 - My favorite song.mp3. DFPlayer Mini сортирует root по времени записи на флешку. Не копируйте 0003.mp3, а затем 0001.mp3, тк сначала будет воспроизведен 0003.mp3.

Желательно распихать файлы по папкам. Папки должны содержать 2-e цифры с ведущими нулями. Количество папок 01..99. Файлы внутри должны содержать 3-и цифры с ведущими нулями. Количество файлов в каждой папке 001..255. Например: SD_ROOT/01/001 - My favorite song.mp3. В отличии от корня, файлы из папок можно читать по номеру файла, а не по времени записи на флешку.

Есть еще - папка "mp3" и "advert". Файлы внутри должны содержать 4-е цифры с ведущими нулями, количество файлов 0001..9999 и можно читать по номеру файла. Например: SD_ROOT/mp3/0001 - My favorite song.mp3. Файлы из "advert" проигрываются только если уже играет трек. Тогда модуль ставит текущий на паузу, проигрывает файл из "advert" и снимает паузу с основного.

Вот пожалуй и все. Забирать библиотеку тут.
Tags: #arduino, arduino
Subscribe

  • Post a new comment

    Error

    Anonymous comments are disabled in this journal

    default userpic

    Your reply will be screened

    Your IP address will be recorded 

  • 5 comments