玩转ArduinoArduino雕爷学编程

【雕爷学编程】Arduino动手做(82)---Mini MP3

2021-05-07  本文已影响0人  驴友花雕

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+、编玩边学)

上一篇下一篇

猜你喜欢

热点阅读