Помогите разобраться с UART DFPlayer Mini 2.0

Тема в разделе "Arduino & Shields", создана пользователем Unruly, 27 ноя 2014.

  1. dim3740

    dim3740 Нерд

    Да,я уж вышел на ваше "демонстрационное табло"))) Спасибо. Наверное, тоже заплачу, а то время жалко.
     
    lepidot нравится это.
  2. lepidot

    lepidot Нерд

    А вот запустить его играть с USB флешки не удается. Хотя и примеры есть и там есть указания, что раскомментить, что закоментить, нет, только с СД карточки играет. Независимо ни от чего. Вот это бы раскопать, везде в настройках есть параметр, откуда играть, а не работает.
     
  3. dim3740

    dim3740 Нерд

    Точнее, с tf карточки играет)))
    .....specify a mp3 file in mp3 folder in your tf card, "mp3_play (1);" mean play "mp3/0001.mp3" - один ответ я уже получил))) и про папку, и что 1 - это 0001
     
    lepidot нравится это.
  4. dim3740

    dim3740 Нерд

    lepidot, вот еще вопрос ... В вашем "табло" как отыгрывается ситуация, когда на карточке НЕТ файла с номером нажатой кнопки?
     
  5. ostrov

    ostrov Гуру

    Если речь про DFPlayer mini, то он НЕ понимает номера файлов, в чем можно легко убедиться опытным путем. Так же он не возвращает никаких данных по UART, и провод TX на нем можно никуда не цеплять. Группировка файлов по папкам тоже никакой роли не играет, что в корне, что в "mp3", что в любой другой. Запишите штук пять файлов, голосом "файл первый", "файл второй" и так далее, присвойте им имена 0001, 0002... потом запишите на флешку специально не по порядку возрастания а хаотично, слушайте результат. Можно немного изменить условия, пропустить несколько файлов, например: 0001, 0002, 0004, 0010, 0011 и попробовать проиграть, например, третий и шестой. Хочу услышать результаты тестирования.

    Возможно, родной плеер, который наверное существует в природе, все это и умеет, но те клоны, что приходят из поднебесной, точно нет. И почему то я уверен на 99%, что у вопрошающего именно такой.
     
    Последнее редактирование: 9 дек 2018
  6. lepidot

    lepidot Нерд

    Забавно, у меня уже собрано и работают порядка 8 таких табло и всё работает по папкам и номерам файлов. Файлы можно в любой момент стирать, записывать, от порядка записи конечно ничего не зависит. Только от нумерации файлов и само собой, если переключить язык, то будет брать нужный файл из нужной папки. В чем я убеждаюсь чуть не каждый день ))) Если файла с таким номером нет, то ничего не играется. Такая ситуация происходит например при отработки номеров кнопок регулировки громкости. Громкость само собой так же в матричной клаве забита.
    Кроме того, мы ещё и бегущие светодиодные строки, рекламные, озвучку такими плеерами сделали, и там все по номерам работает. И по папкам конечно.
     
    Последнее редактирование: 9 дек 2018
  7. lepidot

    lepidot Нерд

    Повторюсь, использую в устройствах плееры от трех разных производителей. Все само собой из поднебесной. На них даже маркировка разная, на одних ДФплеер, на других MP-TF-er, еще какие-то с TF-16. Роли не играет, все прекрасно работают при управлении по УАРТ, именно так как написано . КРоме проигрывания с ЮСБ флешки. Увы.
     
  8. dim3740

    dim3740 Нерд

    Сегодня все площадки поднебесной облазил, задавал и версии, и менял названия, и по ссылкам ходил. Не нахожу у продавцов ссылок на модели. Якобы одно и то же... Помогите, плз, еще...М.б. все же не коде дело, а в железе, поэтому или ссылки на продавцов, или фотки выложите? Вроде, у Вас ведь проект нынешнего года?

    Вот даже название топика аж от 14 года: "...
    UART DFPlayer Mini 2.0

    " . А что есть 2.0? - это железо или библа "2"? Не понятно. Еще на 10 странице ссылка на некую "старую модель", и тоже не ясно(((((
     
  9. lepidot

    lepidot Нерд

    Беру в офлайн магазинах, в Робошоп и Амеркот , в Питере. Почти всегда разные попадаются. Вот только что привезли какие-то с маркировкой- "MP3-TF-16", работают тоно так же как и остальные, с другими маркировками. Про библиотеку не могу сказать, та что у меня стоит, я указал. Есть новей, на гитхабе. Но я в код не лезу, не умею. Работает всё по ТЗ, больше мне не надо.
     
  10. dim3740

    dim3740 Нерд

    Обнаружил, что если записать файл игры музыканта, то при прослушивании тональность может не совпадать. Т.е. иная скорость чтения файла как-бы... Плеер, как писалось выше, "самостоятельный", т.е. программно с арудинки управлять скоростью воспроизведения не получится. В даташите не нашел никаких переменных для "подстройки"((( Кто может помочь понять, как может повлиять на вопрос битрейд, частота, тип кодирования и т.п.? Тип/класс карточки? М.б. кто -то запустил его с wav?
     
  11. Snakepz76

    Snakepz76 Нуб

    Прошу помощи. Модель MP3 - TF - 16P. Не могу запустить управление с ардуино. А точнее команду play (номер трека). Так же не работает команда setVolume . Все остальные команды , такие как next(); play() и тд работают, а именно по номеру не воспроизводится. Что только не делал с картой, форматировал с разных операционных систем, называл файлы то 1, то 0001. Менял расширения мп3 и wav. Очищал описание файлов. Модуль без ардуино работает хорошо, точнее все 20 модулей, которые я приобрел для одного проекта. Опробованные мной библиотеки :
    mp3T
    DFRobotDFPlayerMini-1.0.3
     
  12. ostrov

    ostrov Гуру

    Номер трека никак не связан с названием файла. Первым идет тот, который записан первым и так далее.
     
  13. Onkel

    Onkel Гуру

    проиграть трек номер NofSound (независимо от названия, чем раньше записал- тем меньше номер)
    Код (C++):

    void Play(byte NofSound)
    {

      delay(1);
    Serial.begin(9600);
    Serial.write( 0x7E);
    Serial.write( 0xFF);
    Serial.write( 0x06);
    Serial.write( 0x03);
    Serial.write( 0x00);
    Serial.write( 0x00);
    Serial.write( NofSound+1);
    Serial.write( 0xFE );
    Serial.write(  byte(0xF8-NofSound-1));
    Serial.write( 0xEF);


    delay(12);

    Serial.end();

    }
     
    выставить громкость VOLUME
    Код (C++):
    Serial.write(0x7E);
    Serial.write(0xFF);
    Serial.write(0x06);
    Serial.write(0x06);
    Serial.write(0x01);
    Serial.write(0x00);
    Serial.write(VOLUME);
    Serial.write(0xFE);
    Serial.write(0xF4-VOLUME);

    Serial.write(0xEF);
     
    Airbus нравится это.
  14. Snakepz76

    Snakepz76 Нуб

    это понятно. при передаче play с ардуино tx мигает, в мониторе порта иероглифы, плеер не реагирует
     
  15. Snakepz76

    Snakepz76 Нуб

    Компилирует. В порту иероглифы, эфекта 0(
     
  16. Airbus

    Airbus Радиохулиган Модератор

    Скорость монитора порта какая? 9600?
     
  17. Onkel

    Onkel Гуру

    Какие иероглифы? По идее (по умолчанию) MP3 плейре не должен отвечть, иероглифов быть не должно. Скорость 9600?
    Вообще команды управления- не ASCII, и не несут текстового смысла, реальные коды можно посмотреть терминалом с выводом данных в 16-ричной системе.
     
  18. Snakepz76

    Snakepz76 Нуб

    да. все инструкции перечитал, все библиотеки попробовал. Скетч плеера работает идеально, кроме настройки громкости разовой. а UP и DOWN работает
    Код (C++):
    #include "DFRobotDFPlayerMini.h"
    // библиотека для эмуляции Serial порта
    #include <SoftwareSerial.h>
    // создаём объект mySoftwareSerial и передаём номера управляющих пинов RX и TX
    // RX - цифровой вывод 10, необходимо соединить с выводом TX дисплея
    // TX - цифровой вывод 11, необходимо соединить с выводом RX дисплея
    SoftwareSerial mySoftwareSerial(10, 11); // RX, TX для плеера DFPlayer Mini
    DFRobotDFPlayerMini myDFPlayer;
    int buttonNext = 2;   // кнопка следующий трек
    int buttonPause = 3;  // кнопка пауза/ пуск
    int buttonPrevious = 4; // кнопка предыдущий трек
    int buttonVolumeUp = 5; // кнопка увеличение громкости
    int buttonVolumeDown = 6; // кнопка уменьшение громкости
    boolean isPlaying = false; // статус воспроизведения/пауза
    void setup() {
      pinMode(buttonPause, INPUT_PULLUP);
      pinMode(buttonNext, INPUT_PULLUP);
      pinMode(buttonPrevious, INPUT_PULLUP);
      pinMode(buttonVolumeUp, INPUT_PULLUP);
      pinMode(buttonVolumeDown, INPUT_PULLUP);
      mySoftwareSerial.begin(9600);
      Serial.begin(9600);
      delay(1000);
      Serial.println();
      Serial.println("DFPlayer Mini Demo");
      Serial.println("Initializing DFPlayer...");
      if (!myDFPlayer.begin(mySoftwareSerial)) {
        Serial.println("Unable to begin:");
        Serial.println("1.Please recheck the connection!");
        Serial.println("2.Please insert the SD card!");
        while (true);
      }
      Serial.println(F("DFPlayer Mini online."));
      myDFPlayer.setTimeOut(300);
      //----Set volume----
      myDFPlayer.volume(15); //Set volume value (0~30).
      //----Set different EQ----
      myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
      myDFPlayer.outputDevice(DFPLAYER_DEVICE_SD);
      myDFPlayer.play(1); //Воспроизведение первого mp3
      isPlaying = true; // воспроизводим
      Serial.println("Playing..");
      //----Читать информацию----
      Serial.println(myDFPlayer.readState()); //читать состояние mp3
      Serial.println(myDFPlayer.readVolume()); //Текущая громкость
      Serial.println(myDFPlayer.readEQ()); // читаем настройку эквалайзера
      Serial.println(myDFPlayer.readFileCounts()); // читать все файлы на SD-карте
      Serial.println(myDFPlayer.readCurrentFileNumber()); // текущий номер файла воспроизведения
    }
    void loop() {
      if (digitalRead(buttonPause) == LOW) {
        if (isPlaying) { // если было воспроизведение трека
          myDFPlayer.pause(); // пауза
          isPlaying = false; // пауза
          Serial.println("Paused..");
        } else {        // иначе
          isPlaying = true; // воспроизводим
          myDFPlayer.start(); //запускаем mp3 с паузы
        }
        delay(500);
      }
      if (digitalRead(buttonNext) == LOW) {
        if (isPlaying) {
          myDFPlayer.next(); //Next Song
          Serial.println("Next Song..");
        }
        delay(500);
      }
      if (digitalRead(buttonPrevious) == LOW) {
        if (isPlaying) {
          myDFPlayer.previous(); //Previous Song
          Serial.println("Previous Song..");
        }
        delay(500);
      }
      if (digitalRead(buttonVolumeUp) == LOW) {
        if (isPlaying) {
          myDFPlayer.volumeUp(); //Volume Up
          Serial.println("Volume Up..");
        }
        delay(500);
      }
      if (digitalRead(buttonVolumeDown) == LOW) {
        if (isPlaying) {
          myDFPlayer.volumeDown(); //Volume Down
          Serial.println("Volume Down..");
        }
        delay(500);
      }
    }


    А вот именно обратиться отдельно к файлу не могу
     
  19. Onkel

    Onkel Гуру

    У меня прямо в программе указано
    Код (C++):
    Serial.begin(9600);
    Serial.write( 0x7E);
    Serial.write( 0xFF);
    Serial.write( 0x06);
    Serial.write( 0x03);
    Serial.write( 0x00);
    Serial.write( 0x00);
    Serial.write( NofSound+1);
    Serial.write( 0xFE );
    Serial.write(  byte(0xF8-NofSound-1));
    Serial.write( 0xEF);


    delay(12);

    Serial.end();
    Если не выключить порт после передачи команды, то иногда трещит, так что я по принципу ударил- убежал, то есть послал команду- и выкл порт.
     
  20. Onkel

    Onkel Гуру

    Попробуйте форматнуть SD и переписать. Было что начинает бастовать, переформатируешь - перепишешь - все работает.