DFPlayer и Arduino Nano не хотят дружить
- Войдите на сайт для отправки комментариев
Всем привет!
В работе с микроконтроллерами новичок.
Решил сделать небольшой проект. Предстоит управлять несколькими модулями через Arduino nano. Одним из модулей является мп3 проигрыватель.
Попробовал собрать простую схему (чтобы понять принцип работы модулей), которую нашел тут: https://portal-pk.ru/news/247-delaem-mp3-pleer-na-dfplayer-mini-i-arduino.html Собрал по образу и подобию, взял готовый скетч, загрузил... но ничего не работает. Сначала был треск в динамике. Устранил включением параллельно питанию 2 конденсаторов. Но все равно мп3 модуль не включается.
Питание пробовал как от USB, так и как планировал питать готовый проект - аккумулятор 18650.
Подскажите в чем может быть проблема и как ее можно устранить? времени на реализацию проектика почти нет((
Код скетча:
#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); } }
вот фото сборки на макетке
в дополнение к описанию проблемы, стоит сказать, что при подключении модуля DFPlayer без ардуино, он работает. Делал к нему кнопки с подключением через ADKEY1. Все четко, никаких проблем не было.
Плата нано тоже рабочая. Тестировал простым кодом управления светодиодом.
А вот что выдает монитор порта:
Хто ж тебя по времени-то ограничивает, сделаешь потихоньку. Ну, если догадаешься, канеш, что SD карта не читается.
на сколько я понимаю данный код, то сообщение, что я наблюдаю в мониторе порта, выводится в том случае если модуль не возвращает в ардуинку статус ОК. что может быть как из-за проблем с модулем, его питанием, флэшкой и каналом передачи данных от модуля к плате ардуино...
нечитаемая флэшка исключается, так как отдельно модуль воспроизводит все без проблем
RX/TX местами меняли?
От USB наврядли он будет работать, покуда запитан через VIN.
на макетке не видно подключения питания
и второй момент шина питания на макетке сквозная (или как обычно посередине разорвана) ?.
RX и TX до этого вопроса не пробовал менять. Сейчас поменял - результат все тот же - не работает.
С питанием все норм, там где в питании на макетке разрывы я ставлю перемычки. Прозванивал по разным группам контактов - везде есть.
Светлодиод на DF-Player горит?
Нет, на DFPlayer светодиод не горит.
Светодиод там горит, когда воспроизводится что-то. Но до этого, похоже, не доходит.
Хотя вот я почему-то давненько уж отказался от библиотеки и мечу прямо в сериал команды. Наверное какая-то хрень была с инитом.
то, что я вижу
у Вас модуль запитывается + слева от разрыва, а - справа от разрыва
то, что я вижу
у Вас модуль запитывается + слева от разрыва, а - справа от разрыва
там нет разрыва по середине.к тому же как писал выше, я прозванивал по пинам на мп3 и нано - на них питание есть
Светодиод там горит, когда воспроизводится что-то.
Да, точно.
Хотя вот я почему-то давненько уж отказался от библиотеки и мечу прямо в сериал команды. Наверное какая-то хрень была с инитом.
не расскажешь чуть подробнее, как это сделать на моем примере? )
Вопрос : а почему ТС решил, что в макетке нет разрыва ?
Я без разрыва не видел пока ни одной такого формата.
Сколько не пытался найти перемычку, не выходит
С 1 по 60 контакт макетки плюс и минус без разрыва. Но верхний и нижний ряды питания раздельные. при необходимости я перемычкой соединяю.
Ребят, давайте по существу. вопрос с питанием исключается, так как повторюсь - проверяю на пинах плат питание - присутстввует.
Фото разобранной макетки с обратной стороны можно ?
У меня тоже штук 5 таких макеток. Все без разрывов. Разбирать не стану, есичо))
тоже не горю желанием разобрать, особенно осознавая, что делу это никак не поможет.
Сейчас пытаюсь найти инфу, как управлять этим мп3 модулем через пины RX/TX. Нашел несколько статей, где пишут, что есть 2 варианта подключения - аппаратный и программный, но все останавливаются на более подробном описании программного и нигде нет инфы об аппаратном...
Быть может кто-то может кинуть пример скетча?
ТС надо прямо на этом подключении залить в ардуину скетч, который будет читать вывод плеера из СофтСериала и все это редиректить в Монитор. И посмотреть, что там ДФПлеер сообщает при запуске
Быть может кто-то может кинуть пример скетча?
если речь об аппаратном - это вообще без скетча, кнопками
Хотя вот я почему-то давненько уж отказался от библиотеки и мечу прямо в сериал команды. Наверное какая-то хрень была с инитом.
не расскажешь чуть подробнее, как это сделать на моем примере? )
Ну вот, нарубил из своего старинного:
И в конце концов окажется, что тупо какой-нибудь из проводков в макетке болтался...
У меня пяток плат, полученных в разное время, на 830 точек, все с разрывами. Причём, забавно было в первое время косяки в монтаже искать, ведь про разрывы то я ни сном ни духом тогда не знал. :)
Да мне не жалко, вот так оно выглядит. На второй картинке вариант решения проблемы с разрывом
Попробовать закомментить 31 строку. Проверить не замкнут ли tx вывод плеера на землю, там рядом железяка.
Попробовать закомментить 31 строку. Проверить не замкнут ли tx вывод плеера на землю, там рядом железяка.
TX не замкнут на землю (проверил).
закомментировал 31 строку. результат:
Ну если Вы уверены, что всё правильно и на резисторах не оранжевая полоса, а красная( по фото точно не видно), то плеер в топку, китайцу привет)))
Я бы пробовал постепенно уменьшать сопротивление резисторов RX TX. ИМХО 10 кОм может быть многовато...
P.S. Вот ещё глянул
https://picaxe.com/docs/spe033.pdf
Проблему решил. Всем огромное спасибо!
Автор статьи, откуда я брал схему, действительно перегнул с сопротивлениями. Заменил на 1 кОм. После чего пересобрал с более надежными контактами (закрались подозрения что реально где-то контакт пропадал) - и все заработало))))
Но теперь вопрос по командам DFPlayer. По отдельности воспроизводить удается, но как быть если мне нужно, чтобы после определенной мелодии следующий трек зацикливался до наступления какого-либо события?
через LOOP(номер трека) не получилось, модуль эту строку игнорирует.
Проблему решил. Всем огромное спасибо!
Автор статьи, откуда я брал схему, действительно перегнул с сопротивлениями. Заменил на 1 кОм. После чего пересобрал с более надежными контактами (закрались подозрения что реально где-то контакт пропадал) - и все заработало))))
Но теперь вопрос по командам DFPlayer. По отдельности воспроизводить удается, но как быть если мне нужно, чтобы после определенной мелодии следующий трек зацикливался до наступления какого-либо события?
через LOOP(номер трека) не получилось, модуль эту строку игнорирует.
Методом проб и ошибок пришел к тому, что модулю чем-то просто не понравился тот трек, что я решил зациклить))) с другим все работает.
Думаю, тему можно закрывать)
Еще раз спасибо всем откликнувшимся.
Всем огромный привет.Решил я тоже зимой от нечего делать собрать конструкцию на ардуино и купленным DFPiaer mini MP3 .Как описывалось выше в постах я сразу впаял в цепь UART резисторы по 1 кОм,по ссылке:https://portal-pk.ru/news/247-delaem-mp3-pleer-na-dfplayer-mini-i-arduino.html,подключил библиотеку :"DFRobotDFPlayerMini.h".Вроде как бы меня устраивало всё до того момента,пока не столкнулся с проблемой-ничего то я прочитать не могу из плеера,а хотелось бы увидеть уровень громкости,состояние плеера,номер проигрываемого трека и многое другое.На экранчик ничего не выводится,т.е. выводится как на мониторе компа-
-1
0
Контакта нет, поди.
Осциллографа нужна, однако.
TX плеера прозвонить на предмет замыкания на корпус. Чип на плеере какой? Китайцы начали подделывать чипы и как результат ничерта не работает как надо
Спасибо за то что отозвались,начну с первого:
я думаю если бы не было контакта "однако",он у меня вообще не работал бы,а как я писал выше все команды посылаемые отрабатываются,и громкость и пауза и т.д.,нет обратной связи,т.е. я прочитать не могу состояние плеера.
По второму,тип чипа точно не могу прочитать,даже через лупу посмотрел,но могу ошибаться,показалось что :MH2024K-24SS
Замыканий никаких нет,мне же что то да приходит от туда,громкость приходит-0,№ трека--1,№эквалайзера--1 и т.д.
Жду новых идей.
TX плеера отсоедините и посмотрите, что приходит
счас попробую и отпишусь
сделал то что просили,отсоединил ТХ плеера,громкость так и почему то приходит 0 ,а вот на остальные команды вообще не реагирует,я имею ввиду чтение,а то приходило от туда -1
у автора было вот так :SoftwareSerial mySoftwareSerial(10, 11); ,а так как у меня эти порты заняты,я использовал 9 и 10,соответственно их прописав,может в библиотеке где то их нужно исправить?
Ничего в библиотеке не нужно прописывать. Плеер может выполнять команды только по одному проводу RX, а вот если нужно прочитать что то из плеера то нужен уже TX. По какой то причине с TX ничего нет, это может быть кривизна чипа плеера или не верный монтаж. Вот https://github.com/ghmartin77/DFPlayerAnalyzer и посмотреть issues
Между командами плееру желательно сделать задержку 100 мс
Спасибо,завтра с утра подумаю как проверить,есть и осциллограф и много приборов всяких.Спасибо,найду причину,отпишусь,может кому и понадобится,
Подделывать чип дфплеера? Зачем?
Вопрос к китайцам))) Затем, за чем же и ds18b20, ft232 и далее и так далее
Ну, это-то брендовые чипы, не грех цап-царапнуть. Но дфплеер - чисто китайское детище, его-то зачем воровать..
Их просто из брака тащат с завода, вот и попадаются глючные. Некоторые китайцы ещё те пройдохи.
Всем доброго утра.Проверил,перепроверил всё что можно было(в моём понимании),но результатов пока нет.На ножке ТХ плеера меняется конечно напряжение,но импульсы какие то слабые,но есть.Почему то есть напряжение постоянное в районе 3 вольт,я почему то думал,что там должно быть в районе уровня "0" TTL при отсутствии передачи от плеера.Жаль что выписал только 1 шт,можно было бы поменять и проверить другой плеер.Может это программный UART не очень корректен.А кто ещё подскажет,есть много схем подключения плеера к ардуино через штатные TX и RX (например http://arduinoprom.ru/shemotehnika/123-mp3-player-na-arduino.html).Можно ли так,а как тогда загрузить скетч? не опасно ли портам в паралель?Или я чего то не догоняю,поправьте меня кто может.
raven78 куда пропал?
Через штатные rx и tx можно. Вот ещё https://github.com/enjoyneering/DFPlayer библиотека под разные варианты плеера, попробовать все. Я давал ссылку на DFplayerAnalizer, что выдаёт?
Привет.Выяснил что с библиотекой <DFRobotDFPlayerMini.h> плеер не проходит инициализацию, вначале есть такое условие,контроллер уходит в цикл.Что бы это мне не мешало я "ремировал" этот участок.Все команды принимает и работает,а обратно ничего не выдаёт,хотя я подключил паралельно TX RX платку-(не помню как называется ,выписывал у китайцев) и подключил к терминалу компа,стал смотреть что отправляю и что принимаю,вроде как приём есть но подозреваю что не выдаёт мне инфу из-за самой библиотеки.Нашёл другую простенькую библиотеку и сейчас изучаю.