Вторник, 21.11.2017, 07:16
RC - Мастерская
Главная | Каталог статей | Регистрация | Вход
Меню
Статистика
Главная » Статьи » Инструкции » Микроконтроллеры

Модуль воспроизведения звука для озвучивания робототехнических проектов

Модуль воспроизведения звука для озвучивания робототехнических проектов

В магазинах этот модуль можно найти под двумя маркировками: DFPlayer MP3 Mini и FN-M16P. Сути однако это не меняет. Модуль достаточно распространенный и в сети о нем очень много информации. Однако, в этой информации столь же много неточностей. А в библиотеках, которые я встречал для Arduino очень много ошибок.

Мне удалось найти один из наиболее полных даташитов на него. По нему я и сделал свою библиотеку. Опять же на полноту она не претендует, но призвана решать выше означенную задачу – создание непрерывного звукового сопровождения для проекта.

Основные характеристики модуля

  • Воспроизведение файлов в форматах mp3 и wav
  • Поддержка файловых систем FAT16 и FAT32
  • Поддержка SD карт памяти объемом до 32Гб
  • Управление громкостью воспроизведения
  • Эквалайзер с шестью предустановленными режимами
  • Возможность воспроизведения с карты памяти microSD и внешнего USB Flash носителя

Есть еще возможность работы в автономном режиме с кнопочным управлением. Но в свете решаемой задачи, этот режим меня совершенно не интересует. Поэтому и освещаться не будет.

Распиновка

Обозначение

Назначение

Примечание

1

VCC

Напряжение питания 3.2~5.0В

Лучше питать от 3.3В

2

RX

UART serial input

Скорость порта 9600 бод

3

TX

UART serial output

4

DAC_R

Линейный выход; правый канал

 

5

DAC_L

Линейный выход; левый канал

 

6

SPK2

Выход на динамик; левый канал

Лучше подключать наушники

7

GND

«Земля»

Общий контакт для подключения динамиков

8

SPK1

Выход на динамик; правый канал

Лучше подключать наушники

9

IO1

 

Кнопочное управление

10

GND

«Земля»

 

11

IO2

 

Кнопочное управление

12

ADKEY1

 

Кнопочное управление

13

ADKEY2

 

Кнопочное управление

14

USB+

USB+ DP

Подключение к ПК или внешний накопитель

15

USB-

USB- DM

16

Busy

Индикатор состояния

LOW – идет воспроизведение; HIGH - ожидание

 

К выходам SPK1 и SPK2 лучше подключать только наушники. Динамики же стоит подключать к линейному выходу через усилитель.

В инете везде можно найти вот такую схему подключения:

В таком виде звука от плеера вы никогда не услышите. Схема должна быть такой:

На 5В, без резисторов и усилителя тоже работает, но «хрипит» и сам модуль сильно греется. Решил не выяснять, чем это может кончиться.

В схеме показано подключение к аппаратному UART, но в своих проектах я использую этот модуль с программным портом (SoftwareSerial).

Формат передачи команд

Команда передается модулю в виде массива из 10 байт

Наименование

Назначение

0

$S

Стартовый байт = 0x7E

1

Ver.

Версия. По умолчанию = 0xFF

2

Number

Кол-во байт в пакете от Ver. до Param_LSB. Должно быть равно 0x06.

3

Command

Команда

4

Feedback

0x01 – ожидаем ответ от модуля; 0x00 – нет.

5

Param_MSB

Старший байт параметра команды

6

Param_LSB

Младший байт параметра команды

7

Check_MSB

Старший байт контрольной суммы

8

Check_LSB

Младший байт контрольной суммы

9

$O

Завершающий байт = 0xEF

Полный список поддерживаемых команд перечислять не буду. Все их можно посмотреть в найденном мной даташите.

Функции библиотеки

void init (SoftwareSerial*);

Инициализация объекта. Необходимо вызвать один раз перед первым обращением к модулю. В виде параметра передается порт.

void playNext();

Перейти к проигрыванию следующего трека.

void playPrev();

Перейти к проигрыванию предыдущего трека.

void playTrackPhisical(uint16_t track_num);

Проиграть трек с порядковым номером track_num. Надо сказать, что треки на карте памяти могут иметь любые имена. Под порядковым номером в данном случае подразумевается положение файла в таблице FAT карты памяти. Фактически это порядок записи файлов на карту. Его главное преимущество в скорости. Проигрывание файла начинается практически мгновенно без пауз и задержек.

void playRepeatSingle(uint16_t track_num);

Равно как и предыдущий метод, проигрывает трек с порядковым номером track_num. Как не трудно догадаться, трек проигрывается по кругу без остановки пока не будет передана команда stop. Сигнал на выходе Bisy при этом появится только в момент остановки трека.

void playFolder(uint8_t folder, uint8_t track);

Проиграть заданный трек из определенной папки. Производитель рекомендует именовать папки двузначными числами. Допустимо использовать 99 папок, в каждой из которых не более 255 файлов. Файлы при этом сортируются по имени в алфавитном порядке. Номер трека указывается в соответствии с этой сортировкой.

void playFolder2(uint8_t folder, uint16_t track);

Аналогично предыдущему методу, проигрывает заданный трек из определенной папки. Допустимо использовать не более 15 папок, в каждой из которых до 3000 файлов. Файлы при этом сортируются по имени в алфавитном порядке. Номер трека указывается в соответствии с этой сортировкой.

void play();

Продолжить проигрывание файла. Например, после паузы.

void pause();

Приостановить воспроизведение.

void stop();

Остановка воспроизведения.

void playAllRepeat(bool start);

Проигрывать все треки по кругу из корневой папки.

void playMP3Folder(uint16_t track);

Проиграть трек по номеру. Звуковые файлы при этом размещаются в папке с именем «mp3». Номер трека соответствует порядковому номеру файла при сортировке по имени в алфавитном порядке. Допустимо иметь в папке до 65536 треков.

void playFolderRepeat(uint8_t folder);

Проигрывать по кругу все треки из заданной папки. Производитель рекомендует именовать папки двузначными числами.

void playRandom();

Проигрывание случайным образом выбранных треков.

void repeatCurrent(bool start);

Проигрывать по кругу текущий трек. Метод вызывается пока трек воспроизводится.

void volumeSet(uint8_t val);

Установка громкости. Допустимо значение в интервале 0 – 30. При включении модуля устанавливается громкость 30.

void setEQ(uint8_t val);

Установка эквалайзера:

 MP3_EQ_NORMAL        0

 MP3_EQ_POP               1

 MP3_EQ_ROCK             2

 MP3_EQ_JAZZ               3

 MP3_EQ_CLASSIC         4

 MP3_EQ_BASS              5

void setInterCut(uint16_t track);

Очень интересная функция. Фактически ставит текущий проигрываемый трек на паузу и проигрывает заданный. Но чтобы она правильно работала, на карте надо создать папку «ADVERT», куда поместить копии всех файлов в том же порядке, что и в корневой папке. На выводе bisy появится сигнал только в момент приостановки основного трека. После проигрывания заданного трека модуль продолжит проигрывание приостановленного автоматически. Никаких сообщений на этот счет микроконтроллеру не будет.

void stopInterCut();

Функция остановки для предыдущей функции

Библиотеку можно скачать тут.

Категория: Микроконтроллеры | Добавил: Mactep (15.03.2016)
Просмотров: 2366 | Рейтинг: 5.0/1
Всего комментариев: 0
Добавлять комментарии могут только зарегистрированные пользователи.
[ Регистрация | Вход ]
Поиск