DFPlayer mini mp3 sketch segue il precedente articolo dedicato al mini mp3 della DFRobot.
Puoi leggere il primo articolo qui: DFPlayer mini mp3 in cui trovi:
- i collegamenti elettronici
- lo schema, pinout, del DFPlayer
- la libreria da scaricare
Oggi potrai comprendere lo sketch e le funzioni che ti servono per controllare con la seriale da Arduino il DFPlayer mini mp3 sketch.
Il progetto, come hai letto, fa parte di una serie di articoli natalizi che ti permetteranno di realizzare una centralina luci e musiche di natale.
Collegamenti tra Arduino e DFPlayer
Lo schema dei collegamenti, come hai letto, è identico a quello mostrato nello scorso articolo, ecco lo schema consigliato:
Dal punto di vista pratico per collegare DFPlayer mini mp3 sketch puoi seguire le due foto seguenti. Lato Arduino Uno usa i pin +5v e Gnd per l’alimentazione ed i pin 10 ed 11 come Rx ed Tx:
dal lato del DFPlayer mp3 usa una resistenza da 1Kohm per adattare l’uscita a 5v del pin 11 ( Tx ) ai 3,3v
Warning!
ATTENZIONE: usare una resistenza in serie d 1Kohm non è la soluzione migliore anche se suggerita dal produttore. La soluzione logicamente pulita è uno shift level che adatti i segnali provenineti dal pin 11 a 5v ai medesimi ma su 3,3v
DFPlayer mini mp3 Sketch
Il primo esempio che vedi sotto è il default consigliato dalla DF Robot che ha realizzato il modulo e la libreria.
Si tratta di uno sketch demo con cui puoi provare il DFPlayer mini mp3 e la comunicazione/controllo seriale da un microcontrollore come arduino uno o simili.
Prima di compilare lo sketch verifica di aver installato sia la libreria SoftwareSerial sia la DFRobotDFPlayerMini come descritto nel precedente articolo.
/*************************************************** DFPlayer - A Mini MP3 Player For Arduino <https://www.dfrobot.com/product-1121.html> *************************************************** This example shows the basic function of library for DFPlayer. Created 2014-8-28 By [Angelo qiao](Angelo.qiao@dfrobot.com) GNU Lesser General Public License. See <http://www.gnu.org/licenses/> for details. All above must be included in any redistribution ****************************************************/ /***********Notice and Trouble shooting*************** 1.Connection and Diagram can be found here <> 2.This code is tested on Arduino Uno, Leonardo, Mega boards. ****************************************************/ #include "Arduino.h" #include "SoftwareSerial.h" #include "DFRobotDFPlayerMini.h" SoftwareSerial mySoftwareSerial(10, 11); // RX, TX DFRobotDFPlayerMini myDFPlayer; void printDetail(uint8_t type, int value); static unsigned long timer; void setup() { mySoftwareSerial.begin(9600); Serial.begin(115200); Serial.println(); Serial.println(F("DFRobot DFPlayer Mini Demo")); Serial.println(F("Initializing DFPlayer ... (May take 3~5 seconds)")); if (!myDFPlayer.begin(mySoftwareSerial)) { Serial.println(F("Unable to begin:")); Serial.println(F("1.Please recheck the connection!")); Serial.println(F("2.Please insert the SD card!")); while(true){ delay(0); // Code to compatible with ESP8266 watch dog. } } Serial.println(F("DFPlayer Mini online.")); myDFPlayer.volume(15); //Set volume value. From 0 to 30 myDFPlayer.play(1); //Play the first mp3 timer = millis(); } void loop() { if (millis() - timer > 15000) { timer = millis(); myDFPlayer.next(); //Play next mp3 every 15 second. } if (myDFPlayer.available()) { printDetail(myDFPlayer.readType(), myDFPlayer.read()); } } void printDetail(uint8_t type, int value) { switch (type) { case TimeOut: Serial.println(F("Time Out!")); break; case WrongStack: Serial.println(F("Stack Wrong!")); break; case DFPlayerCardInserted: Serial.println(F("Card Inserted!")); break; case DFPlayerCardRemoved: Serial.println(F("Card Removed!")); break; case DFPlayerCardOnline: Serial.println(F("Card Online!")); break; case DFPlayerPlayFinished: Serial.print(F("Number:")); Serial.print(value); Serial.println(F(" Play Finished!")); break; case DFPlayerError: Serial.print(F("DFPlayerError:")); switch (value) { case Busy: Serial.println(F("Card not found")); break; case Sleeping: Serial.println(F("Sleeping")); break; case SerialWrongStack: Serial.println(F("Get Wrong Stack")); break; case CheckSumNotMatch: Serial.println(F("Check Sum Not Match")); break; case FileIndexOut: Serial.println(F("File Index Out of Bound")); break; case FileMismatch: Serial.println(F("Cannot Find File")); break; case Advertise: Serial.println(F("In Advertise")); break; default: break; } break; default: break; } }
Le prime linee 22-24: includi le librerie che ti servono per comunicare con il DFPlayer Mini mp3 sketch;
linea 26: istanzia l’oggetto mySoftwareSerial passandogli i pin che userai come Rx e Tx;
linea 27: istanzia l’oggetto myDFPlayer per comunicare con il mini mp3;
linea 28: definisci la funzione printDetail() che costruirai in seguito, non condivido fino in fondo il motivo di tale scelta ma è pur vero che l’IDE arduino comprende da solo cosa fare in caso di funzioni dichiarate due volte;
linea 30: definisci la variabile di tipo long timer che userai per controllare il tempo che passa dall’inizio di ogni brano;
linea 33: imposta a 9600 baud la velocità di comunicazione verso il DFPlayer via seriale;
linea 34: imposta la comunicazione a 115200 verso il monitor seriale del computer;
linea 40: richiama il metodo begin della myDFPlayer passandole l’oggetto mySoftwareSerial per la comunicazione seriale con il mini mp3;
linee 41-44: se a comunicazione fallisce scrivi a video i messaggi delle linee 41-43 e inizia un ciclo infinito ( while true; ) per evitare che lo sketch proceda oltre;
linea 48: alla conferma della comunicazione con il lettore mp3 scrivi a video il messaggio “DFPlayer Mini online.”
linea 50: imposta il volume della musica usando il metodo volume della libreria DFPlayer;
linea 51: avvia il primo brano usando il metodo play( numero del brano );
linea 52: imposta la variabile timer con il valore in millisecondi trascorsi dall’avvio dello sketch;
linea 56: se il tempo corrente detratto del valore di timer è superiore a 15000 ( 15 secondi ) esegui le linee 57 e 58;
linea 57: reimposta il valore di timer;
linea 58: usa il metodo next() per proseguire nell’eseguzione del brano;
linea 061: se ti arrivano informazioni dalla seriale del DFPlayer mini mp3 puoi visualizzarle richiamando la funzione printDetail() che incontri alla linea 67;
linea 62: richiama la funzione printDetail() passandogli il risultato dei due metodi: myDFPlayer.readType() e myDFPlayer.read();
linea 66: è ridefinita la funzione printDetail() che accetta i due valori come type e value;
linea 67: se il primo valore, type, è
- TimeOut
- WrongStack
- DFPlayerCardInserted
- DFPlayerCardRemoved
- DFPlayerCardOnline
- DFPlayerPlayFinished
scrivi sul monitor seriale le frasi scritte nello sketch;
linea 90: se il valore di type è DFPlayerError dovrai valutare anche il contenuto della value che può essere:
- Busy
- Sleeping
- SerialWrongStack
- CheckSumNotMatch
- FileIndexOut
- FileMismatch
- Advertise
ed in funzione della tipologia di valore restituito scrivi sul monitor seriale il messaggio corrispondente.
Come funziona il DFPlayer mini mp3 sketch
Il funzionamento del DFPlayer mini mp3 sketch è semplice: parte dal primo brano presente nella sd card e cambia ogni 15 secondi.
la demo ti fa ascoltare solo i primi brani del DFPlayer mini mp3 sketch con Arduino Uno.
10 commenti
1 ping
Vai al modulo dei commenti
Ciao Mauro…mi chiedevo se sia possibile far riprodurre la traccia audio all’infinito e passare ad una traccia successiva solo se si preme un pulsante…praticamente una funzione “repeat track” se si come??? ed aggiungere il controllo del volume tramite pulsanti… grazie mille per le tue utili informazioni…
Autore
Ciao Antonio,
alla riga 62 è indicato il metodo che puoi usare per controllare lo stato della riproduzione.
Quando ricevi un “DFPlayerPlayFinished” vuol dire che il brano è stato riprodotto e se ciò è avvenuto con successo puoi decidere che brano far riprodurre.
ciao Mauro grazie mille per la risposta….scusami se ti faccio domante che possono sembrare stupide ma sono un neofita con arduino….la funzione che ti chiedevo io era quella di far fare un ciclo continuo al brano 1 alla pressione del bulsante che andremo a dichiarare next inizia il ciclo del 2 brano ecc praticamente se non si preme nessun pulsante il brano selezionato rimane in riproduzione…è possibile farlo?? grazie mille e scusami ancora….
Autore
Ciao Antonio,
ti ho risposto con il modo con cui lo avrei fatto io, la tua domanda mi è chiara.
Se non è altrettanto chiara la mia risposta ti invito a rispondermi a questo commento.
Trattandosi di un quesito logico: “come fare” potrei aver espresso male il concetto.
Se ciò che mi chiedi è di scrivere per te la funzione posso valutarlo come progetto su commissione per il quale ti chiedo di seguire quanto descritto nella sezione “sostienimi“
Ciao Mauro…volevo avere solo la conferma che sia possibile questa funzione che ti chiedevo…il programma già è stilato funziona tutto correttamente play/pausa, next, previus, solo che non riesco a impostare la funzione o meglio non so quale sia il comando giusto da utilizzare per questo scopo… grazie mille per le tue risposte ci proverò fino a quando riuscirò ad ottenere questo scopo…sono uno studente mi serve per un progetto scolastico…
Autore
Ottimo Antonio,
questo è lo spirito giusto e mi piace che tu ci stia provando 🙂
Ciao è possibile sostituire i pin 10e 11 Con altri?grazie in anticipo
Autore
Ciao Alessandro,
certo, se leggi nello schema e nella sua descrizione dettagliata capirai anche come.
Ciao Mauro,
mi trovo in una strana situazione in cui il mio lettore mp3 “mp3 tf 16p” su 3 mp3 ne legge sempre e solo uno.. ho provato a formattare la scheda SD, a rinominare i file, niente… Ti spiego il mio sketch: in base alla tag rfid letta, viene letto uno specifico mp3. Il monitor seriale funziona (nel senso che mi associa la tag all’mp3 che voglia venga letto ma il lettore risponde sempre e solo con un solo file..
Se posso postarti lo scketch magari gli puoi dare un’occhiata…
Grazie mille
Ciao!
Luca
Autore
Ciao Luca,
il modello di mp3 è il medesimo ?
Hai provato ad eseguire i brani singolarmente senza l’rfid ?
[…] Centralina musicale DFPlayer mini mp3 […]