Модуль DFPlayer Mini для проигрывания mp3 файлов.
Сегодня будем изучать такую интересную вещь как аудиоплеер.
Есть такой модуль для Ардуино, DFPlayer.
Но прелесть этого модуля в том, что он может работать и без Ардуино.
Другую статью про этот модуль можно прочитать здесь.
Для сборки достаточно только MicroSD карты от 2 до 32 Gb, двух кнопок и динамика.
Питается всё это от 3,3-5 вольт.
Характеристики модуля DFPlayer MP3 mini аудио:
Напряжение питания: 3,3–5 В
Количество каналов: 1 моно, 3 Вт + 2 стерео, без усилителя
Поддерживаемые частоты дискретизации: 8, 11,025, 12, 16, 22,05, 24, 32, 44,1, 48 кГц
Разрядность ЦАП: 24 бита
Отношение сигнал/шум: до 85 дБ
Поддерживаемые файловые системы: FAT16, FAT32
Максимальный объём SD-карты: 32 ГБ
Количество каталогов композиций: до 100
Количество композиций в каталоге: до 255
Форматы аудиофайлов: MP3, WAV, WMA
Кол-во уровней громкости: 30
Режимов эквалайзера: 6 (Normal/Pop/Rock/Jazz/Classic/Base)
Применять можно как в разных поделках будильниках, музыкальных шкатулках, так и в более серьёзных проектах, таких как сигнализации, оповещении и многих других.
На MicroSD карту можно записать огромное количество файлов и обращаться к любому из них по запросу из скетча.
Для работы с Ардуино нужна библиотека DFPlayer-Mini-mp3.zip скачать можно с этого сайта.
Если вы хотите собрать плейер без Ардуино, то и библиотека не нужна. Просто подключаете модуль по этой схеме и слушаете музыку.
Правда в такой конструкции есть недостатки.
- Нельзя включить запись, например 12, можно только пролистывать до нужной записи нажимая кнопку Следующая/Предыдущая. Короче, только по порядку.
- Нельзя запустить случайное проигрывание, опять только по порядку
- Можно прослушивать только по одной записи. Одна проиграла, плейер выключился. Снова нажали он включился и стала воспроизводиться следующая запись.
Подготовка карты MicroSD
Карта должна быть от 2 до 32 Gb и отформатирована в FAT16 или FAT32
Создаём папку mp3 (это обязательно) и переносим туда ваши записи.
Записи должны начинаться с 0001 0002 0003 итд. После цифр могут быть любые название
напр. 0001-ABBA-concert.mp3
Описание контактов модуля DFPLayer:
Номер вывода | Название | Описание вывода | Описание |
1 | VCC | Питание | Питание постоянного тока от 3 до 5 Вольт |
2 | RX | UART | serial input |
3 | TX | UART | serial output |
4 | DAC_R | Audio output right channel | Выход на усилитель, правый канал |
5 | DAC_L | Audio output left channel | Выход на динамик, со встроенного усилителя до 3W |
9 | IO1 | Trigger port 1 | Короткое нажатие | (длительное нажатие — уменьшение громкости) |
10 | GND | Ground | Выход на динамик, со встроенного усилителя до 3W |
11 | IO2 | Trigger port 2 | Короткое нажатие (длительное нажатие — увеличение громкости) |
12 | ADKEY1 | AD port 1 | Trigger play first segment |
13 | ADKEY2 | AD port 2 | Trigger play fifth segment |
14 | USB | USB DP | USB Port |
15 | USB- | USB- DM | USB Port |
16 | Busy | Playing Status | Low means playingHigh means no |
НА Модуле есть два каскада выходного сигнала.
Выход на внешний усилитель(DAC_R и DAC_L стерео) и Выход на динамик(SPK_1 и SPK_2 моно режим)
Список функций DFPlayer Mini:
- mp3_play (); // Запуск воспроизведения
- mp3_play (5); // Воспроизвести файл «mp3/0005.mp3»
- mp3_next (); // Следующий трек
- mp3_prev (); // Предыдущий трек
- mp3_set_volume (uint16_t volume); // Уровень громкости 0
30
mp3_set_EQ (); // Эквалайзер 0
5 (0 — Normal, 1 — Pop, 2 — Rock, 3 — Jazz, 4 — Classic, 5 — Bass)
Подключение к Ардуино будет описано в следующей статье блога (подписывайтесь что бы не пропустить).
А сейчас рассмотрим, как собрать без Ардуино.
Есть два способа, Простой и более сложный.
Рассмотрим простой.
Нам понадобится сам модуль плеера, MicroSD карта, две кнопки и динамик.
Управление плейером.
- Длительное нажатие кнопки S1 — Громкость меньше
- Короткое нажатие кнопки S1 — Следующая запись
- Длительное нажатие кнопки S2 — Громкость больше
- Короткое нажатие кнопки S2 — Предыдущая запись
Более сложный режим
Подключение модуля DFPlayer Mini к arduino
Рейтинг статьи: 3.872/5
(47 голосов).
Схема подключения модулей MP3 DFPlayer Mini на базе yx5300 к arduino, система команд UART
Спонсор этой страницы:
Предисловие
В связи с удешевление TF карт, стало интересно использовать MP3 модули в своих проектах. Возможно это говорящие часы, или термометр, а возможно звуки в игрушечной машинке. на Ali я встредил 2 варианта модулей. Они на одной микросхеме и управляются одинаковыми командами.
Размеры и распиновка
MP3 DFPlayer Mini
Подключение к arduino
RX и TX обоих MP3 плейеров работают от 3.3V до 5V. Возможно 2 варианта подключения.
Вариант 1: Через TX, RX arduino.
Плюс в простоте подключения.
Минус в занятости порта, когда arduino подключена к компьютеру.
TX arduino к RX DFPlayer
RX arduino к TX DFPlayer
void setup()
<
Serial.begin(9600);
delay(500);
.
Вариант 2: Через виртуальны TX, RX arduino (например 7,8);
Плюс в возможности работы устройства, когда arduino подключена к компьютеру.
Минус — занятие двух контактов, которые могут понадобиться в больших проектах.
#include
#define pin_TX 7 // artuinio TX mp3 player RX
#define pin_RX 8 // artuinio RX mp3 player TX
SoftwareSerial mp3(pin_RX, pin_TX);
void setup()
<
mp3.begin(9600);
delay(500);
.
Задержка необходима для инициализации mp3 плеера
Структура папок и файлов
На носителе можно создать 99 нумерных папок, от «01» до «99»
именные папки «MP3» и «ADVERT»
в номерные папки можно поместить обычные и нумерные файлы (нумерация от «001_имя.mp3» до «255_имя.mp3»)
в именные папки можно поместить обычные и нумерные файлы (нумерация от «0001_имя.mp3» до «9999_имя.mp3»)
Производитель предупреждает, что если файлов будет больше 3000, то будет замедление в работе.
Управление DFPlayer mini
Структура команды
Через порт подключения посылаются команды.
Длинна команды с контрольной суммой — 10 байт.
Возможна отсылка команды без контрольной суммы — 8 байт.
$S | 0x7E | начало |
---|---|---|
VER | 0xFF | Версия |
Len | 0xNN | количество байт в команде без начального и конечного байта, 0x06 — без конр. суммы, 0x08 — c конр. суммы |
CMD | 0xNN | команда/запрос |
FeedBack | 0xNN | 1-потребовать подтверждение успешности, 0-не требовать |
Para_MSB | 0xNN | наиболее значимый байт параметра |
Para_LSB | 0xNN | наименее значимый байт параметра |
конр.сумма | Check_MSB Check_LSB | Checksum (2 bytes) = 0xFFFF–(Ver.+Length+CMD+Feedback+Para_MSB+Para_LSB)+1 (можно опустить.) |
$O | 0xEF | Конец команды |
В примерах я буду использовать второй вариант подключения через виртуальный Serial mp3
static uint8_t cmdbuf[8] = <0>;
void command(int8_t cmd, int8_t Para_MSB, int8_t Para_LSB)
<
cmdbuf[0] = 0x7e;
cmdbuf[1] = 0xFF;
cmdbuf[2] = 0x06;
cmdbuf[3] = cmd;
cmdbuf[4] = 0x00;
cmdbuf[5] = Para_MSB;
cmdbuf[6] = Para_LSB;
cmdbuf[7] = 0xef;
for (uint8_t i = 0; i 03 00 00 02 EF» Проиграть второй файл
«7E FF 06 03 00 02 FF EF» Проиграть 767 файл
«7E FF 06 06 00 00 1E EF» Максимальная 30 (1E)
«7E FF 06 08 00 01 02 EF» — Проиграть в цикле файл «01\002Имя.mp3»
«7E FF 06 0F 00 01 03 EF» — Проиграть файл «01\003. mp3»
«7E FF 06 12 00 01 02 EF» — Проиграть файл «mp3\0193. mp3»
«7E FF 06 13 00 00 02 EF» — Вставить объявление «ADVERT\0002. mp3». После объявление воспроизведение продолжится с прерванного места
«7E FF 06 14 00 C7 Cf EF» — Проиграть файл «12\1999. mp3»
«7E FF 06 14 00 10 09 EF» — Проиграть файл «01\0009. mp3»
01 DAC no output
«7E FF 07 21 00 01 03 04 EF» — Проиграть первую, третью и четвертую песню
«7E FF 06 22 00 09 01 EF» Проиграть первую песню с громкостью 9
Список запросов
CMD | Para_MSB | Para_LSB | |
---|---|---|---|
0x3F | 00 | 00 | Список доступных устройств (побитно) USB 1, TF 2, Flash 4 |
0x42 | 00 | 00 | Статус плеера |
0x43 | 00 | 00 | Текущая громкость |
0x44 | 00 | 00 | Текущий эквалайзер |
0x47 | 00 | 00 | Общее количество файлов USB |
0x48 | 00 | 00 | Общее количество файлов TF |
0x49 | 00 | 00 | Общее количество файлов Flash |
0x4B | 00 | 00 | Текущий файл USB |
0x4C | 00 | 00 | Текущий файл TF |
0x4D | 00 | 00 | Текущий файл Flash |
0x4E | 00 | NN | Общее количество файлов в папке «NN» |
0x4F | 00 | 00 | Общее количество папок |
0x61 | 00 | 00 | Текущий указатель папки Flash |
Список Ответов
Ответы, связанные с количеством файлов приходят с задержкой
CMD | Para_MSB | Para_LSB | |
---|---|---|---|
CMD | Para_MSB | Para_LSB | |
0x3A | 00 | 00 | Вставлена карта TF (Приходит без запроса) |
0x3B | 00 | 00 | Вынута карта TF (Приходит без запроса) |
0x3C | NN | MM | Закончил играть файл 0xNNMM на USB (Приходит без запроса) |
0x3D | NN | MM | Закончил играть файл 0xNNMM на TF (Приходит без запроса) |
0x3F | 00 | 00 | Список доступных устройств (побитно) USB 1, TF 2, Flash 4 |
0x42 | NN | MM | Статус плеера NN — 1 USB/2 TF, MM — 0 Stop/1 Play/2 Pause |
0x43 | 00 | NN | Текущая громкость |
0x44 | 00 | NN | Текущий эквалайзер |
0x47 | NN | MM | Общее количество файлов USB 0xNNMM |
0x48 | NN | MM | Общее количество файлов TF 0xNNMM |
0x49 | NN | MM | Общее количество файлов Flash 0xNNMM |
0x4B | NN | MM | Текущий файл USB |
0x4C | NN | MM | Текущий файл TF |
0x4D | NN | MM | Текущий файл Flash |
0x4E | NN | MM | Общее количество файлов 0xNNMM |
0x4F | NN | MM | Общее количество папок 0xNNMM |
0x61 | 00 | 00 | Текущий указатель папки Flash |
Функция получения ответа.
В связи с тем, что при получении ответа возможно получения мусора, я ищу начало пакета, и далее считываю весь пакет.
static uint8_t ansbuf[10] = <0>;
boolean answer(void)
<
uint8_t i;
uint8_t b = 0;
while(mp3.available() && (b!=0x7E))
<
b = mp3.read();
delay(1);
>
ansbuf[0] = b;
i = 1;
while(mp3.available() && (i
#define pin_TX 7 // artuinio TX mp3 player RX
#define pin_RX 8 // artuinio RX mp3 player TX
SoftwareSerial mp3(pin_RX, pin_TX);
static uint8_t cmdbuf[8] = <0>;
static uint8_t ansbuf[10] = <0>;
void byte2hex(uint8_t b)
<
#ifdef _DEBUG
Serial.print(«0x»);
if (b cmd;
cmdbuf[4] = 0x00;
cmdbuf[5] = Para_MSB;
cmdbuf[6] = Para_LSB;
cmdbuf[7] = 0xef;
for (uint8_t i = 0; i 1 2 3 4 5
Комментарии к статье:
Спасибо , отличный материал!
А как сделать с контрольной суммой? Нужно какуюто формуд=лу добавлять в код?
если использовать мп3 YX5300 то надо добавлять библиотеку для него конкретно например MD YX5300
Ваши отзывы и предложения по работе сайта направляйте на форму обратной связи.