В рамках другого проекта сделал библиотеку для поддержки модуля DFRobot Mini MP3 Player. Работает на Arduino Pro Mini 328p от 5V.
Она основана на драйвере DFPlayer_Mini_Mp3, который предоставляет низкоуровневые функции управления плеером (как обычно, частично глючные, или неподдерживаемые 😃).
Звуки воспроизводятся из mp3-файлов из каталога “mp3” sd-карты, вставленной в модуль плеера. Файлы должны иметь имена в виде номеров Vxxx.mp3, где V = voice (голос) (0…9), а xxx = номер звука (0…999).
Библиотека предоставляет 3 класса:
MP3Player - обертка над DFPlayer_Mini_Mp3 для поддержки статуса “занятости” (Busy);
SoundMessage - сообщение (внутренний класс, напрямую не используется), состоящее из нескольких звуков (файлов), имеющее ID и приоритет.
SoundQueue - очередь сообщений с приоритетным воспроизведением и удалением дубликатов по ID. При вставке звуков сообщения в очередь методом push, если сообщение с тем же ID уже есть в очереди и оно еще не воспроизводится, то оно заменяется новым; вставленное сообщение занимает положение в очереди в соответствии со своим приоритетом (сообщения с меньшим значением приоритета проигрываются первыми), при этом приоритет других сообщений в очереди уменьшается на 1, давая им шанс быть услышанными на фоне высокоприоритетных сообщений. Если очередь полна (у нее задается максимальное количество звуков и сообщений) при вставке раздается специальный звук soundOverflow.
Файл MP3_Serial_Player.ino содержит тесты-примеры работы с библиотекой и CLI (command line interface) для доступа к ее функциям из терминала на 57600 (см. TELEMETRY_SPEED).
*Вот краткая инструкция по подключению:
*
Скопируйте содержимое каталога “sd-card.content.root” на SD карту (у карты должен появиться каталог mp3 в корне диска);
Задейте скетч “MP3_Serial_Player” из source\MP3_Serial_Player в Arduino;
Соедините DFPlayer модуль с Arduino и динамиком на 4-8 Ом как указано далее:
DFPlayer.SPK_1 -> Динамик (первый вывод, полярность не важна);
DFPlayer.SPK_2 -> Динамик (второй вывод);
DFPlayer.GND -> Arduino GND;
DFPlayer.VCC -> Arduino VCC (+5V);
DFPlayer.Busy -> Arduino D9;
DFPlayer.RX -> Arduino 11 через 1kOm резистор для совместимости входа с 3.3V;
Вставьте SD карту в DFPlayer;
Подключите Arduino к PC кабелем USB;
Далее идет проверка. Запустите Arduino Serial Monitor на скорости 57600 бод.
В течении 20 seconds после его открытия нажмите кнопку “Send” button в Serial Monitor с пустой стокой ввода.
Откроется Command Line Interface (CLI). В нем Вы можете посылать команды, набирая их в строке ввода и нажимая кнопку “Send”. Наберите и пошлите следующую команду:
help
Покажется меню:
reset - reboot the device.
exit - leave CLI and start working. say <N> - play file mp3/<V>00<N>.mp3 (N=0…999) with current voice <V>.
Example: 0000.mp3 for voice 0 and file 0; 2123.mp3 for voice 2 and file 123.
play <N> - play file mp3/000<N>.mp3 regardless of current voice (N=0…2999).
queue <ID,P,S1,S2,…> - add message to queue; ID=message ID, P=Priority, S1,S2,…=sounds.
go - play all messages in queue.
clear - delete all messages from queue.
voice <V> - select voice (V=0,1,2). It is used as a 1st digit in file name.
volume <X> - set volume (X=0…31).
eq <EQ> - set equalizer (EQ=normal,pop,rock,jazz,classic,base).
Пошлите следующую команду для проигрывания файла “mp3\0001.mp3”.
{"assets_hash":"a8b26fa7f6e768b07a72c8c9aadb9422","page_data":{"users":{"41b8a4ac3df9550077792e83":{"_id":"41b8a4ac3df9550077792e83","hid":5271,"name":"Prikupets","nick":"Prikupets","avatar_id":null,"css":""}},"settings":{"blogs_can_create":false,"blogs_mod_can_delete":false,"blogs_mod_can_hard_delete":false,"blogs_mod_can_add_infractions":false,"can_report_abuse":false,"can_vote":false,"can_see_ip":false,"blogs_edit_comments_max_time":30,"blogs_show_ignored":false,"blogs_reply_old_comment_threshold":30,"votes_add_max_time":168},"entry":{"_id":"55ab42449970730077112c1e","hid":20572,"title":"Arduino-библиотека для воспроизведения MP3 файлов (со связанными сообщениями и очередями с приоритетами)","html":"<p><strong data-nd-pair-src=\"**\">Библиотека MP3 плеера</strong></p>\n<p>В рамках другого проекта сделал библиотеку для поддержки модуля <a href=\"http://www.dfrobot.com/index.php?route=product/product&product_id=1121\" class=\"link link-ext\" data-nd-link-orig=\"http://www.dfrobot.com/index.php?route=product/product&product_id=1121\" target=\"_blank\" rel=\"nofollow noopener\"><strong data-nd-pair-src=\"**\">DFRobot Mini MP3 Player</strong></a>. Работает на <a href=\"https://www.arduino.cc/en/Main/ArduinoBoardProMini\" class=\"link link-ext\" data-nd-link-orig=\"https://www.arduino.cc/en/Main/ArduinoBoardProMini\" target=\"_blank\" rel=\"nofollow noopener\">Arduino Pro Mini 328p</a> от 5V.<br>\nОна основана на драйвере <strong data-nd-pair-src=\"**\">DFPlayer_Mini_Mp3</strong>, который предоставляет низкоуровневые функции управления плеером (как обычно, частично глючные, или неподдерживаемые <span class=\"emoji emoji-smiley\" data-nd-emoji-src=\":smiley:\">😃</span>).</p>\n<p>Звуки воспроизводятся из mp3-файлов из каталога “mp3” sd-карты, вставленной в модуль плеера. Файлы должны иметь имена в виде номеров Vxxx.mp3, где V = voice (голос) (0…9), а xxx = номер звука (0…999).</p>\n<!--cut-->\n<p>Библиотека предоставляет 3 класса:</p>\n<ul>\n<li><strong data-nd-pair-src=\"**\">MP3Player</strong> - обертка над DFPlayer_Mini_Mp3 для поддержки статуса “занятости” (Busy);</li>\n<li><strong data-nd-pair-src=\"**\">SoundMessage</strong> - сообщение (внутренний класс, напрямую не используется), состоящее из нескольких звуков (файлов), имеющее ID и приоритет.</li>\n<li><strong data-nd-pair-src=\"**\">SoundQueue</strong> - очередь сообщений с приоритетным воспроизведением и удалением дубликатов по ID. При вставке звуков сообщения в очередь методом push, если сообщение с тем же ID уже есть в очереди и оно еще не воспроизводится, то оно заменяется новым; вставленное сообщение занимает положение в очереди в соответствии со своим приоритетом (сообщения с меньшим значением приоритета проигрываются первыми), при этом приоритет других сообщений в очереди уменьшается на 1, давая им шанс быть услышанными на фоне высокоприоритетных сообщений. Если очередь полна (у нее задается максимальное количество звуков и сообщений) при вставке раздается специальный звук soundOverflow.</li>\n</ul>\n<p>Файл MP3_Serial_Player.ino содержит тесты-<strong data-nd-pair-src=\"**\">примеры</strong> работы с библиотекой и CLI (command line interface) для доступа к ее функциям из терминала на 57600 (см. TELEMETRY_SPEED).</p>\n<p>*<em data-nd-pair-src=\"*\">Вот краткая инструкция по подключению:<br>\n*</em></p>\n<ol>\n<li>\n<p>Скопируйте содержимое каталога “sd-card.content.root” на SD карту (у карты должен появиться каталог mp3 в корне диска);</p>\n</li>\n<li>\n<p>Задейте скетч “MP3_Serial_Player” из source\\MP3_Serial_Player в Arduino;</p>\n</li>\n<li>\n<p>Соедините DFPlayer модуль с Arduino и динамиком на 4-8 Ом как указано далее:</p>\n</li>\n</ol>\n<p>DFPlayer.SPK_1 -> Динамик (первый вывод, полярность не важна);<br>\nDFPlayer.SPK_2 -> Динамик (второй вывод);<br>\nDFPlayer.GND -> Arduino GND;<br>\nDFPlayer.VCC -> Arduino VCC (+5V);<br>\nDFPlayer.Busy -> Arduino D9;<br>\nDFPlayer.RX -> Arduino 11 через 1kOm резистор для совместимости входа с 3.3V;</p>\n<ol start=\"4\">\n<li>\n<p>Вставьте SD карту в DFPlayer;</p>\n</li>\n<li>\n<p>Подключите Arduino к PC кабелем USB;</p>\n</li>\n<li>\n<p>Далее идет проверка. Запустите Arduino Serial Monitor на скорости 57600 бод.<br>\nВ течении 20 seconds после его открытия нажмите кнопку “Send” button в Serial Monitor с пустой стокой ввода.</p>\n</li>\n<li>\n<p>Откроется Command Line Interface (CLI). В нем Вы можете посылать команды, набирая их в строке ввода и нажимая кнопку “Send”. Наберите и пошлите следующую команду:</p>\n</li>\n</ol>\n<p>help</p>\n<ol start=\"8\">\n<li>Покажется меню:</li>\n</ol>\n<p>reset - reboot the device.<br>\nexit - leave CLI and start working.<br>\n<strong data-nd-pair-src=\"**\">say <N> - play file mp3/<V>00<N>.mp3 (N=0…999) with current voice <V>.<br>\nExample: 0000.mp3 for voice 0 and file 0; 2123.mp3 for voice 2 and file 123.<br>\nplay <N> - play file mp3/000<N>.mp3 regardless of current voice (N=0…2999).<br>\nqueue <ID,P,S1,S2,…> - add message to queue; ID=message ID, P=Priority, S1,S2,…=sounds.<br>\ngo - play all messages in queue.<br>\n</strong> clear - delete all messages from queue.<br>\nvoice <V> - select voice (V=0,1,2). It is used as a 1st digit in file name.<br>\nvolume <X> - set volume (X=0…31).<br>\neq <EQ> - set equalizer (EQ=normal,pop,rock,jazz,classic,base).</p>\n<ol start=\"9\">\n<li>Пошлите следующую команду для проигрывания файла “mp3\\0001.mp3”.</li>\n</ol>\n<p>play 1</p>\n<p><strong data-nd-pair-src=\"**\">Исходники и тестовое содержимое SD-карты:</strong><br>\n<a href=\"https://www.dropbox.com/sh/k7l6u24z59vc5e7/AACDYW2ovC7BXTctoeG-8Xi7a?dl=0\" class=\"link link-ext link-auto\" data-nd-link-type=\"autolink\" data-nd-link-orig=\"https://www.dropbox.com/sh/k7l6u24z59vc5e7/AACDYW2ovC7BXTctoeG-8Xi7a?dl=0\" target=\"_blank\" rel=\"nofollow noopener\">www.dropbox.com/sh/…/AACDYW2ovC7BXTctoeG-8Xi7a?dl=…</a></p>\n<p><strong data-nd-pair-src=\"**\">Назначение библиотеки<br>\n</strong>Библиотека задумывалась для “звукового OSD” и еще для чего-то.</p>\n","user":"41b8a4ac3df9550077792e83","ts":"2015-07-19T06:23:00.000Z","st":1,"cache":{"comment_count":0},"views":6475,"bookmarks":0,"votes":0},"subscription":null},"locale":"en-US","user_id":"000000000000000000000000","user_hid":0,"user_name":"","user_nick":"","user_avatar":null,"is_member":false,"settings":{"can_access_acp":false,"can_use_dialogs":false,"hide_heavy_content":false},"unread_dialogs":false,"footer":{"rules":{"to":"common.rules"},"contacts":{"to":"rco-nodeca.contacts"}},"navbar":{"tracker":{"to":"users.tracker","autoselect":false,"priority":10},"forum":{"to":"forum.index"},"blogs":{"to":"blogs.index"},"clubs":{"to":"clubs.index"},"market":{"to":"market.index.buy"}},"recaptcha":{"public_key":"6LcyTs0dAAAAADW_1wxPfl0IHuXxBG7vMSSX26Z4"},"layout":"common.layout"}