Из того что есть на GitHub ничего не понравилось. Пришлось писать свою...
Так и не понял зачем, для ожидания ответа, люди изобретают велосипед с
millis(),
delay() или
дополнительными библиотеками. Все уже давно есть в Arduino -
Serial.setTimeout() и
Serial.readBytes(). Второй вопрос у меня к китайским товарищам. Зачем они ставят перемычку не туда? Из-за этого во время инициализации чипа из динамика валит шум и треск. У усилителя NS8002 есть standby режим, а у DFPlayer Mini есть пин busy. Нужно просто перепаять резистор/перемычку справа (STBY->GND) налево (STBY->BUSY).
специально обученная перемычка для YX5200, YX5300, JL AAxxxx
На плату с GD3200B перемычек не завезли. Тут нужно поднять с земли STBY pin 1 усилителя NS8002 и бросить от него провод к BUSY pin 3 плеера GD3200B.
специально обученная перемычка для GD3200B
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" и снимает паузу с основного.
Вот пожалуй и все. Забирать библиотеку
тут.
UDP: На алишечки стали появляться совсем кривые платы с непонятной прошивкой и системой команд. Часы поддерживают только модули на чипах YX5200, YX5300, JL AAxxxx и GD3200B. Будьте внимательны при покупке!!!