【雕爺學編程】Arduino動手做(82)---Mini MP3 Player播放器


37款傳感器與執行器的提法,在網絡上廣泛流傳,其實Arduino能夠兼容的傳感器模塊肯定是不止這37種的。鑒於本人手頭積累了一些傳感器和執行器模塊,依照實踐出真知(一定要動手做)的理念,以學習和交流為目的,這里准備逐一動手嘗試系列實驗,不管成功(程序走通)與否,都會記錄下來---小小的進步或是搞不掂的問題,希望能夠拋磚引玉。

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

實驗八十二:MP3播放器 開源 Mini MP3 Player 播放器 SD卡 音樂DFPlayer模塊(YX5200-24SS芯片)

 

YX5200-24SS

是一個提供串口的MP3芯片,完美的集成了MP3、WMV的硬解碼。同時軟件支持TF卡驅動和USB驅動,以及外掛FLASH。支持FAT16、FAT32文件系統。通過簡單的串口指令即可完成播放指定的音樂,以及如何播放音樂等功能,無需繁瑣的底層操作,使用方便,穩定可靠是此款產品的最大特點。

YX5200-24SS串口語音芯片參數
MP3文件格式:支持所有比特率11172-3和ISO13813-3layer音頻解1碼,采樣支持(KHZ):8/11.025/12/16/22.05/24/32/44.1/48,支持Normal、Lazz、Classic、Pop、ROCK等
USB接口:2.0標准
UART接口:標准串口,TTL電平,波特率可設
輸入電壓:3.3-5V
額定電流:15ma(不帶U盤)
尺寸:8.4*8mm
封裝:SSOP24封裝
工作溫度:-40度—80度
濕度:5%-95%。
 
特色功能
1、支持采樣率(KHz):8/11.025/12/16/22.05/24/32/44.1/48
2、24位DAC輸出,動態范圍支持90dB,信噪比支持85dB
3、完全支持FAT16、FAT32文件系統,最大支持32G的TF卡和U盤
4、多種控制模式,並口控制模式、串口模式、按鍵控制模式
5、廣播語插播功能,可以暫停正在播放的背景音樂
6、音頻數據按文件夾排序,最多支持100個文件夾,每隔文件夾可以分配1000首歌曲
7、支持line in功能
8、支持mic擴音喊話功能
9、支持聲卡功能,也支持線控耳機功能
10、30級音量可調,10種EQ可調
11、支持外擴NORFLASH和NANDFLASH.板載默認支持NORFLASH
YX5200-24SS電原理圖
應用領域
1.汽車導航語音播報
2.公路運輸檢查員,收費站語音提示
3.火車,公交車安全檢查語音提示
4.電力,通訊,財務手術室語音提示
5.車輛進出通道以驗證語音提示
6.邊境頻道語音提示
7.多聲道語音報警或語音導航設備操作
8.帶語音通知的電動觀光巴士安全
9.機電設備故障報警
10.火警語音提示
11.自動播放設備,定期播放

Mini MP3 Player播放器模塊

是一款小巧且價格低廉的MP3模塊,可以直接接駁揚聲器。模塊配合供電電池、揚聲器、按鍵可以單獨使用,也可以通過串口控制,作為UNO或者是任何有串口的單片機的一個模塊。模塊本身完美的集成了MP3、WAV、WMA的硬解碼。同時軟件支持TF卡驅動,支持FAT16、FAT32文件系統。通過簡單的串口指令即可完成播放指定的音樂,以及如何播放音樂等功能,無需繁瑣的底層操作,使用方便,穩定可靠。

模塊管腳圖
管腳號        管腳名稱        功能描述        備注
1        BUSY        播放時輸出高電平,停止為低        忙信號
2        RX        UART異步串口數據輸入        3.3V的TTL電平
3        TX        UART異步串口數據輸出        3.3V的TTL電平
4        DACR        DAC右聲道輸出        可外接功放、耳機
5        DACL        DAC左聲道輸出        可外接功放、耳機
6        SPK1        外接單聲道喇叭        接3W/4Ω或2W/8Ω無源喇叭
7        SPK2        外接單聲道喇叭        接3W/4Ω或2W/8Ω無源喇叭
8        VCC        電源正極        3.6-5V
9        IO5        觸發輸入口5        接地觸發
10        IO4        觸發輸入口4        接地觸發
11        IO3        觸發輸入口3        接地觸發
12        IO2        觸發輸入口2        接地觸發
13        IO1        觸發輸入口1        接地觸發
14        GND        電源負極        系統地
15        DP        USB數據線        讀U盤或用USB數據線連接電腦更換TF卡內容
16        DM        USB數據線

模塊應用圖

模塊工作模式

1)串口模式

模塊支持異步串口通訊模式,通過串口接受控制命令

串口指令格式

串口控制指令

串口查詢指令

2)AD按鍵模式

模塊還支持AD按鍵控制方式,取代了傳統了矩陣鍵盤的接法,這樣做的好處是充分利用了MCU越來越強大的AD功能。設計簡約而不簡單,我們模塊默認配置2個AD口,20個按鍵的阻值分配。按鍵使用示意原理圖

3)IO模式
本模塊也支持簡單的IO模式

實驗開源代碼

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

實驗八十二:開源 Mini MP3 Player TF卡播放器模塊(YX5200-24SS)

程序之一,循環播放TF卡內0003.MP3(MP3文件夾內),音量20

Arduino-------dfplayer

5V-------------VCC

GND-----------GND

D2-----------TXD

D3-----------RXD

*/



#include "SoftwareSerial.h"

#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(2, 3); 

DFRobotDFPlayerMini myDFPlayer;



void setup()

{

mySoftwareSerial.begin(9600);

myDFPlayer.begin(mySoftwareSerial);

myDFPlayer.volume(20);

myDFPlayer.loop(3);  

}



void loop()

{

}

  實驗場景圖

收集整理的使用<DFRobotDFPlayerMini>庫的控制語句匯總

//收集整理的使用<DFRobotDFPlayerMini>庫的控制語句匯總

  myDFPlayer.start();  //播放mp3

  myDFPlayer.pause();  //暫停mp3

  myDFPlayer.next();  //播放下一個mp3

  myDFPlayer.enableLoop();  //啟用循環

  myDFPlayer.disableLoop();  //禁用循環

  myDFPlayer.stopAdvertise(); //停止做廣告

  mp3Player.volume(10); //音量為10(0-30)

  myDFPlayer.previous();  //播放上一個的mp3

  myDFPlayer.randomAll(); //隨機播放所有mp3

  myDFPlayer.enableLoopAll(); //循環所有mp3文件

  myDFPlayer.disableLoopAll(); //停止循環所有mp3文件

  myDFPlayer.play(1);  //播放文件夾里名為0001.mp3的音樂

  myDFPlayer.loop(1);  //循環文件夾里名為0001.mp3的音樂

  myDFPlayer.loopFolder(5); //循環文件夾SD:/ 05中的所有mp3文件

  myDFPlayer.playMp3Folder(4); //在SD中播放特定的mp3:/MP3/0004.mp3;文件名(0~65535)

  myDFPlayer.advertise(3); //在SD中宣傳特定的mp3廣告:/ADVERT/0003.mp3;文件名(0~65535)

  myDFPlayer.playFolder(15, 4);  //在SD中播放特定的mp3:/ 15/004.mp3;文件夾名稱(1~99);文件名(1~255)

  myDFPlayer.playLargeFolder(2, 999); //在SD中播放特定的mp3:/ 02/004.mp3;文件夾名稱(1~10);文件名(1~1000)

  

使用模塊的幾點注意事項

1、DFPlayer Mini 可以讀取MP3 & WAV 檔案格式,但試過檔案長度1秒以下無法播放。

2、所有音樂檔案一定要放在/mp3 資料夾里

3、音樂檔案名稱一定要使用4 個字,如0001.mp3, 0002.mp3…..0255.mp3

4、音樂檔案超過4個字后則無限制,像是0001_Bruno_Mars_Count_On Me.mp3 是沒問題的。

5、如果你從SD 卡上刪掉某個檔案,DFPlayer Mini 還是有辦法把它播出來,好怪!后來我從新格式化SD 卡才成功播放我要的音樂檔案。

6、Delay(sec); 這個指是是告訴Arduino 你要播放音樂的長度,如果你給的秒數不足,而下個指令又是要播另一首,則Arduino 就會把目前播放中斷,而繼續播下一首。

7、mp3_play (74); 這個指令是播放0074.mp3 這個音樂檔。

8、不要直接把Arduino的5V給DFPlayer Mini使用,一定要分別供給DFPlayer Mini電源,不然喇叭會發出很大的雜音。

9、測試時平均電流150ma左右,模塊發燙,可能要注意控制電流。

10、偶然發現這個模塊使用不同的庫,相關的控制語句完全不相同。

/*

【Arduino】168種傳感器模塊系列實驗(資料代碼+仿真編程+圖形編程)

實驗八十二:開源 Mini MP3 Player TF卡播放器模塊(YX5200-24SS)

程序之二,每3秒切換到下一首歌曲,音量20(速播TF卡內所有MP3歌曲)

可以打印來自dfplayer的詳細信息以處理不同的錯誤和狀態。

Arduino-------dfplayer

5V-------------VCC

GND-----------GND

D10-----------TXD

D11-----------RXD

*/



#include "Arduino.h"

#include "SoftwareSerial.h"

#include "DFRobotDFPlayerMini.h"

SoftwareSerial mySoftwareSerial(10, 11); 

DFRobotDFPlayerMini myDFPlayer;

void printDetail(uint8_t type, int value);



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);

 }

 Serial.println(F("DFPlayer Mini online."));

 myDFPlayer.volume(20);  

 myDFPlayer.play(3);  

}



void loop(){

 static unsigned long timer = millis();

 if (millis() - timer > 3000) {

  timer = millis();

  myDFPlayer.next();  

 }

 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;

 }

}

  實驗串口返回情況

實驗開源仿真編程(Linkboy V4.2)

實驗開源圖形編程(Mixly、Mind+、編玩邊學)

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM