A布 发表于 2013-3-17 01:04:57

Arduino连接WT5001模块播放MP3

本帖最后由 A布 于 2013-3-17 11:42 编辑

网上购买了一个WT5001播放MP3的模块,价格30元,能插手机用的那种SD卡播放MP3,在论坛找了下没有相关的教程,无奈只有自己写代码了。苦逼的我第一次玩Arduino,还没学会走就先跑了。


先看看播放效果:
http://v.youku.com/v_show/id_XNTI3OTkxNTA0.html


这也是第一次发帖,不会画那些图纸,就简单说下。arduino(小熊板)连接一个红外接收头,使用UART连接WT5001模块。

代码也是东拼西凑的,我自己都不知道什么意思,见笑了,大家将就看看,也希望大神给予指导。坛子里好像没有人使用这个模块,要是有人用的话希望可以一起交流,我本是打算还买一个ASR语音识别模块,由语音控制播放MP3的,但是语音识别模块也是没有ARDUINO的示例代码,并且是SPI接口的,看上去很复杂,没敢下手。

MP3播放模块代码如下:
#include <IRremote.h>// 使用IRRemote函数库

const int irReceiverPin = 2;// 红外接收器的 OUTPUT 引脚接在 PIN2 接口 定义irReceiverPin变量为PIN2接口
IRrecv irrecv(irReceiverPin); // 设置irReceiverPin定义的端口为红外信号接收端口
decode_results results;    // 定义results变量为红外结果存放位置

void setup()
{
Serial.begin(9600);   // 开启串口,波特率为9600
irrecv.enableIRIn();   // 启动红外解码
}

int mp3_send(int code[], int length)
{
Serial.write(0x7e);
for (int i = 0; i < length; i++)
{
    Serial.write(code);
}
Serial.write(0x7e);

//返回操作码
if (Serial.available())
{
    return int(Serial.read());
}

return 0;
}

int mp3_read()
{
int data = 0;
while (Serial.available() > 0)
{
    data += Serial.read();
    delay(2);
}
return data;
}

void loop()
{
if (irrecv.decode(&results))
{
    long value = results.value;
    Serial.println(value);
    if (value == 16720605)
    {
      //上一曲
      int code[] = {0x02, 0xa6};
      mp3_send(code, 2);
    }
    else if (value == 16712445)
    {
      //下一曲
      int code[] = {0x02, 0xa5};
      mp3_send(code, 2);
    }
    else if (value == 16761405)
    {
      //暂停
      int code[] = {0x02, 0xa3};
      mp3_send(code, 2);
    }
    else if (value == 16754775)
    {
      //音量加
      int code[] = {0x02, 0xc4};
      mp3_send(code, 2);
      int value = mp3_read();
      if (value > 0 && value < 31)
      {
      value+=5;
      if (value >= 31) value = 31;
      int val[] = {0x03, 0xa7, value};
      mp3_send(val, 3);
      }
    }
    else if (value == 16769055)
    {
      //音量减
      int code[] = {0x02, 0xc4};
      mp3_send(code, 2);
      int value = mp3_read();
      if (value > 0)
      {
      value-=5;
      if (value <= 0) value = 0;
      int val[] = {0x03, 0xa7, value};
      mp3_send(val, 3);
      }
    }
    else if (value == 16736925)
    {
      //循环播放
      int code[] = {0x03, 0xa9, 0x02};
      mp3_send(code, 3);
    }
    else
    {
      int code = {0x02, 0xc1};
      mp3_send(code, 2);
      int value = mp3_read();
      Serial.println(value, DEC);
    }
    /**/
   
    irrecv.resume();    // 继续等待接收下一组信号
}
delay(600); //延时600毫秒,做一个简单的消抖
}

oditszapc 发表于 2013-3-17 10:40:53

等视频...



                     

爱的步伐XY 发表于 2013-3-17 15:18:27

:lol不错哈..可以你可以写一下教程吗??具体的制作步骤啊..这个没有流程啊..我想学

pgf017979 发表于 2013-3-17 17:26:41

独出来,就是要配一个微控器跟语音芯片一起工作,这样组成一个语音模块,模块可以使用标准总线接口(常见UART接口或者SPI接口)与外围相接,传输正确的识别信息。这样解决了语音芯片工作时独占CPU的瓶颈。复杂了就不是arduino了,那就是AVR了。

pgf017979 发表于 2013-3-17 17:27:25

看了你的视频,不错啊。我觉得语音识别那一部分最好单独出来,就是要配一个微控器跟语音芯片一起工作,这样组成一个语音模块,模块可以使用标准总线接口(常见UART接口或者SPI接口)与外围相接,传输正确的识别信息。这样解决了语音芯片工作时独占CPU的瓶颈。复杂了就不是arduino了,那就是AVR了。

A布 发表于 2013-3-17 17:41:34

语音识别芯片我看了一个LD3320还不错,就是没有示例代码,提供的有开发手册,那也不是我这样入门玩家能写代码的,SPI有些难,还有哪什么时钟频率、上升沿、下降沿、数据有效==的,看着太复杂了。

北斗 发表于 2013-5-10 12:33:35

A布 发表于 2013-3-17 17:41 static/image/common/back.gif
语音识别芯片我看了一个LD3320还不错,就是没有示例代码,提供的有开发手册,那也不是我这样入门玩家能写代 ...

LD3320貌似只能用3.3V的单片机啊

daconghz 发表于 2013-8-14 17:14:17

请问楼主,ardunio通过UART接到WT5001的什么接口啊,WT5001在哪家买的?谢谢!
页: [1]
查看完整版本: Arduino连接WT5001模块播放MP3