實驗說明:
米羅手把手帶各位打造一個Arduino MP3 Player 音樂播放器。Arduino MP3 播放模組(DFPlayer Mini),是一款小巧且價格低廉的MP3模組,可以經由Arduino通過序列埠控制,通過簡單的序列埠指令即可完成播放指定的音樂,以及如何播放音樂等功能,無需繁瑣的底層作業,使用簡單方便,穩定可靠。
▼購買Arduino MP3音樂播放套件:
材料:
- Arduino Uno R3
- USB 傳輸線
- Mini MP3 Player模組
- 麵包板
- 微動開關
- 可變電阻
- 1K歐姆電阻
- 小喇叭
- Micro SD卡
- 杜邦線
Mini MP3 Player模組接腳說明:
序列串列埠 – 通訊格式:
透過串列埠傳送給mini mp3 player 模組的指令,必須將baud rate通訊速度設定在9600,通訊格式會有9個參數,總共有10個字節(checksum佔兩個字節),可參考以程式 execute_CMD()這段函式的內容,透過陣列方式,經由串列埠傳送10個字節給mini mp3 player 模組。
通訊指令CMD說明:
安裝程式庫:
請先將下列函式庫下載,然後再匯入安裝。
MP3_Player函式庫 : 載點
安裝方式:在 Arduino 整合環境功能表點選 草稿碼 / 匯入程式庫 / 加入.ZIP程式庫…
程式:
#include "Arduino.h"
#include "SoftwareSerial.h"
#include "DFRobotDFPlayerMini.h"
SoftwareSerial mySoftwareSerial(10, 11); // RX, TX
DFRobotDFPlayerMini myDFPlayer;
void printDetail(uint8_t type, int value);
# define ACTIVATED LOW
int buttonPause = 3;
int buttonPrevious = 4;
int buttonNext = 5;
int buttonVolume = A0;
boolean isPlaying = false;
void setup () {
Serial.begin(115200);
mySoftwareSerial.begin(9600);
delay(300);
pinMode(buttonPause, INPUT);
digitalWrite(buttonPause,HIGH);
pinMode(buttonNext, INPUT);
digitalWrite(buttonNext,HIGH);
pinMode(buttonPrevious, INPUT);
digitalWrite(buttonPrevious,HIGH);
Serial.println("Entry...");
Serial.println();
Serial.println(F("Initializing Player "));
if (!myDFPlayer.begin(mySoftwareSerial)) { //Use softwareSerial to communicate with mp3.
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);
}
Serial.println(F("MP3 Player online."));
myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
myDFPlayer.setTimeOut(500); //Set serial communictaion time out 500ms
myDFPlayer.volume(10); //Set volume value (0~30).
myDFPlayer.EQ(DFPLAYER_EQ_NORMAL);
myDFPlayer.start();
myDFPlayer.enableLoopAll();
}
void loop () {
if (digitalRead(buttonPause) == ACTIVATED) //暫停播放按鍵
{
if(isPlaying)
{
myDFPlayer.pause();
isPlaying = false;
}else
{
isPlaying = true;
myDFPlayer.start();
}
}
if (digitalRead(buttonNext) == ACTIVATED) //切換下一首按鍵
{
if(isPlaying)
{
myDFPlayer.next();
}
}
if (digitalRead(buttonPrevious) == ACTIVATED) //切換前一首按鍵
{
if(isPlaying)
{
myDFPlayer.previous();
}
}
int Volume = analogRead(buttonVolume) / 34.1;
myDFPlayer.volume(Volume); //設定指定音量. From 0 to 30
if (myDFPlayer.available()) {
printDetail(myDFPlayer.readType(), myDFPlayer.read()); //Print the detail message from DFPlayer to handle different errors and states.
}
delay(300);
}
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 DFPlayerUSBInserted:
Serial.println("USB Inserted!");
break;
case DFPlayerUSBRemoved:
Serial.println("USB Removed!");
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;
}
}
Troubleshooting:
注意-1:音樂檔案長度小於1秒以下是無法播放。
注意-2:所有音樂檔案一定要放在SD卡的根目錄「mp3」 資料夾裏。
注意-3:音樂檔案名稱一定要使用4 個字以上,名稱應該命名一個四位數字開始,如
- 0001.mp3
- 0002_Adele – Oh My God.mp3
- 0003.mp3
- 0004Greys Anatomy Soundtrack.mp3
注意-4:Arduino控制Mini MP3 Player模組時,喇叭若有雜音出現,則需要在Arduino TX與MP3模組的RX之間連一個1k電阻。因為MP3模塊工作電壓應該是3.3V,而主控板傳入電壓為5V,因此需要1K左右電阻分壓。
注意-5:如果您使用 Mac OS 電腦複製 mp3檔案,系統將自動添加隱藏文件,例如:“._0001.mp3”作為索引,此檔案將會被視為有效檔案被運作。 因此,您可以在終端中運行以下命令來消除這些文件。 進入
SD卡目錄
- cd /Volumes/<SD卡 名稱>
列出目錄底下的目錄與檔案
- ls -al
刪除「._0001.mp3 」檔案目錄
- rm -rf ._0001.mp3
參考資料: