Niektóre z cech odtwarzacza DF player mini obejmują:
- Obsługa częstotliwości próbkowania 8 kHz, 11,025 kHz, 12 kHz, 16 kHz, 22,05 kHz, aż do 48 kHz
- 24-bitowe wyjście DAC, zakres dynamiki 90 dB, SNR 85 dB
- Obsługuje system plików FAT16, FAT32, maksymalna obsługa kart TF 32 GB
- Różnorodność trybów sterowania, tryb szeregowy, tryb sterowania kluczem AD
- Funkcja spotów języka transmisji, można wstrzymać odtwarzanie muzyki w tle
- Wbudowany wzmacniacz 3 W
- Dane audio są posortowane według folderów; obsługuje do 100 folderów, w każdym folderze może być zapisane blisko 1000 utworów
- 30 poziomów głośności z możliwością regulacji, 10 poziomów EQ z możliwością regulacji.
Celem tego projektu jest zademonstrowanie zastosowania tego modułu z Arduino, używając przycisków do instruowania Arduino, aby wysyłało komendy szeregowe do modułu i sterowało mp3. Aby to osiągnąć, użyjemy trzech przycisków. Pierwszy przycisk będzie służył jako "poprzedni", który umożliwi nam odtwarzanie poprzedniego utworu. Drugi przycisk będzie służył do "play/pause" aktualnie odtwarzanego pliku, a trzeci do odtwarzania następnego pliku.
Schemat
Schemat dla tego projektu jest dość prosty
Jak widać powyżej połączenie pomiędzy Arduino a DFPlayer mini jest bardzo proste, ponieważ musimy podłączyć tylko dwa piny VCC i GND. Należy zauważyć, że rezystor 1 kΩ dodany pomiędzy pinem Rx modułu a Arduino został dodany w celu redukcji szumów, ale nie jest on konieczny, jeśli Twojej konfiguracji modułu nie towarzyszą szumy na linii Rx. Połączenie jest opisane poniżej dla przejrzystości.
Przejrzyj jeszcze raz połączenia, aby upewnić się, że wszystko jest tak, jak powinno być. Nasze przełączniki są celowo podłączone bez rezystorów pull up (lub down), ponieważ będziemy włączać wewnętrzne rezystory pull up Arduino.
Kod
Aby wysyłać komendy z Arduino do DFplayer mini na podstawie wciśniętego przycisku, użyjemy biblioteki szeregowej oprogramowania Arduino. Chociaż mogliśmy użyć sprzętowego portu szeregowego do wysyłania komend z Arduino do DFplayer mini, sprzętowe piny szeregowe Arduino (0 i 1) są tymi samymi pinami, których Arduino używa do komunikacji z komputerem i mogą uniemożliwić płynne przesłanie kodu, jeśli są podłączone do jakiegokolwiek innego urządzenia. Tak więc, aby komunikować się w bezstresowy sposób, użyjemy programowej biblioteki szeregowej z pinami 10 i 11.
Kod do tego tutoriala jest prosty, podczas gdy DFPlayer mini posiada bibliotekę, która zawiera różne funkcje do sterowania odtwarzaczem mp3, my napiszemy własne funkcje dla zabawy i aby pomóc pokazać jak naprawdę działa moduł.
Pierwszą rzeczą jaką robimy w kodzie, jak zwykle, jest dołączenie bibliotek, z których będziemy korzystać. W tym przypadku jest to biblioteka Serial Software, tworzymy obiekt tej biblioteki deklarując piny Rx i Tx (odpowiednio 10 i 11).
//////////////////////////////////////////
/// PROJEKT ODTWARZACZA MP3 ///
/// http://educ8s.tv/arduino-mp3-player ///
//////////////////////////////////////////
#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
Następnie definiujemy niektóre z komend, których będziemy używać podając wartości heksadecymalne.
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Zwraca info z komendą 0x41 [0x01: info, 0x00: brak info]
Następnie deklarujemy piny Arduino, do których podłączone są przyciski.
int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
Następnie przechodzimy do funkcji void setup, gdzie ustawiamy tryb pinów, do których podłączone są przyciski i ustawiamy te piny w stan wysoki. Po wykonaniu tych czynności uruchamiamy programową komunikację szeregową z szybkością 9600 bodów.
void setup () {
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
mySerial.begin (9600);
Następnie odtwarzamy pierwszy utwór na urządzeniu magazynującym za pomocą funkcji playfirst() i ustawiamy zmienną boolean isPlaying na wartość true, aby wskazać, że jeden z plików jest aktualnie odtwarzany.
delay(1000);
playFirst();
isPlaying = true;
Przechodząc do funkcji void loop, funkcja ta w zasadzie sprawdza czy został naciśnięty przycisk i wysyła odpowiednie polecenie do DFPlayer mini, który następnie albo odtwarza (w zależności od wartości zmiennej "isplaying") lub pauzuje bieżący utwór, albo przechodzi do następnego lub poprzedniego utworu.
void loop () {
if (digitalRead(buttonPause) == ACTIVATED)
{
if(isPlaying)
{
pause();
isPlaying = false;
}else
{
isPlaying = true;
play();
}
}
if (digitalRead(buttonNext) == ACTIVATED)
{
if(isPlaying)
{
playNext();
}
}
if (digitalRead(buttonPrevious) == ACTIVATED)
{
if(isPlaying)
{
playPrevious();
}
}
}
Kompletny kod projektu jest dostępny poniżej i można go pobrać z sekcji download tego tutoriala.
/// PROJEKT ODTWARZACZA MP3
/// http://educ8s.tv/arduino-mp3-player/
//////////////////////////////////////////
#include "SoftwareSerial.h"
SoftwareSerial mySerial(10, 11);
# define Start_Byte 0x7E
# define Version_Byte 0xFF
# define Command_Length 0x06
# define End_Byte 0xEF
# define Acknowledge 0x00 //Returns info with command 0x41 [0x01: info, 0x00: no info]
# define ACTIVATED LOW
int buttonNext = 2;
int buttonPause = 3;
int buttonPrevious = 4;
boolean isPlaying = false;
void setup () {
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
mySerial.begin (9600);
delay(1000);
playFirst();
isPlaying = true;
}
void loop () {
if (digitalRead(buttonPause) == ACTIVATED)
{
if(isPlaying)
{
pause();
isPlaying = false;
}else
{
isPlaying = true;
play();
}
}
if (digitalRead(buttonNext) == ACTIVATED)
{
if(isPlaying)
{
playNext();
}
}
if (digitalRead(buttonPrevious) == ACTIVATED)
{
if(isPlaying)
{
playPrevious();
}
}
}
void playFirst()
{
execute_CMD(0x3F, 0, 0);
delay(500);
setVolume(20);
delay(500);
execute_CMD(0x11,0,1);
delay(500);
}
void pause()
{
execute_CMD(0x0E,0,0);
delay(500);
}
void play()
{
execute_CMD(0x0D,0,1);
delay(500);
}
void playNext()
{
execute_CMD(0x01,0,1);
delay(500);
}
void playPrevious()
{
execute_CMD(0x02,0,1);
delay(500);
}
void setVolume(int volume)
{
execute_CMD(0x06, 0, volume); // Ustaw głośność (0x00~0x30)
delay(2000);
}
void execute_CMD(byte CMD, byte Par1, byte Par2)
// Wykonaj polecenie i parametry
{
// Oblicz sumę kontrolną (2 bajty)
word checksum = -(Version_Byte + Command_Length + CMD + Acknowledge + Par1 + Par2);
// Zbuduj wiersz poleceń
bajt Command_line[10] = { Start_Byte, Version_Byte, Command_Length, CMD, Acknowledge,
Par1, Par2, highByte(suma kontrolna), lowByte(suma kontrolna), End_Byte};
//Wyślij linię poleceń do modułu
for (byte k=0; k<10; k++)
{
mySerial.write( Command_line[k]);
}
}
Demo
Załaduj kartę SD z piosenkami i włóż ją do DFplayera mini, następnie wgraj kod do swojego Arduino i podłącz przewody od głośnika do pinów głośnikowych DFPlayera mini. Powinieneś usłyszeć, że z podłączonego głośnika zaczną wydobywać się piosenki. Twoja ostateczna konfiguracja powinna wyglądać tak, jak na poniższym obrazku.
Niektóre z zastosowań tego projektu są wymienione poniżej i mam nadzieję, że da ci to inspirację do zbudowania czegoś naprawdę fajnego.
Przykłady zastosowania
- Sygnały głosowe alarmu przeciwpożarowego
- Stacje poboru opłat podpowiedzi głosowe
- Elektryczność, komunikacja, finansowa sala biznesowa podpowiedzi głosowe
- Wielokanałowy alarm głosowy lub głos przewodnika obsługi sprzętu