本例实验采用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数据线

串口模式
模块支持异步串口通讯模式,通过串口接受控制命令


【花雕动手做】实验七十七:定义播放与循环播放DFPlayer模块的MP3
实验开源代码
- #define ASC2_12
- #define ST7735_CS_PIN 9
- #define ST7735_CS_GPIO_PIN gpio_pin_1
- #define ST7735_DC_PIN 1
- #define ST7735_DC_GPIO_PIN gpio_pin_1
- #define ST7735_RST_PIN 25
- #define ST7735_RST_GPIO_PIN gpio_pin_1
- #define ST7735_SCK_PIN 3
- #define ST7735_SCK_GPIO_PIN gpio_pin_3
- #define ST7735_MOSI_PIN 2
- #define ST7735_MOSI_GPIO_PIN gpio_pin_2
- #define ASC2_32
- #define ST7735S_RGB_GBR_ORDER 0
-
- #include "asr.h"
- extern "C"{ void * __dso_handle = 0 ;}
- #include "setup.h"
- #include "myLib/asr_st7735.h"
- #include "myLib/asr_event.h"
- #include "myLib/asr_mp3.h"
-
- uint32_t snid;
- unsigned char i;
- void hardware_init();
-
- SPITFT spi_tft(128, 160);
- //{ID:250,keyword:"命令词",ASR:"最大音量",ASRTO:"音量调整到最大"}
- //{ID:251,keyword:"命令词",ASR:"中等音量",ASRTO:"音量调整到中等"}
- //{ID:252,keyword:"命令词",ASR:"最小音量",ASRTO:"音量调整到最小"}
- void sys_sleep_hook()
- {
- digital_write((4),1);
- spi_tft.clear((0xFFFF));
- spi_tft.set_text_color((0x001F),(0xFFFF));
- spi_tft.set_cursor(30,66);
- spi_tft.draw_hanzi_32("谢谢");
-
- }
-
- void ASR_CODE()
- {
- //{ID:500,keyword:"唤醒词",ASR:"智能管家",ASRTO:"我在"}
- if(snid == 500){
- digital_write((21),1);
- spi_tft.clear((0x001F));
- spi_tft.set_text_color((0xFC40),(0x001F));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("快来听歌");
- digital_write((4),0);
- }
- //{ID:501,keyword:"命令词",ASR:"播放歌曲",ASRTO:"好的,播放了"}
- if(snid == 501){
- spi_tft.clear((0xF800));
- spi_tft.set_text_color((0x07FF),(0xF800));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("开始播放");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x0D,0,0));
- }
- }
- //{ID:502,keyword:"命令词",ASR:"下一首",ASRTO:"好的,下一首歌"}
- if(snid == 502){
- spi_tft.clear((0x001F));
- spi_tft.set_text_color((0xFFF1),(0x001F));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("下一首歌");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x01,0,0));
- }
- }
- //{ID:503,keyword:"命令词",ASR:"停止播放",ASRTO:"好的,停止了"}
- if(snid == 503){
- spi_tft.clear((0x001F));
- spi_tft.set_text_color((0x8FFF),(0x001F));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("播放停止");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x16,0,0));
- }
- }
- //{ID:504,keyword:"命令词",ASR:"循环播放",ASRTO:"好的,全部循环播放"}
- if(snid == 504){
- spi_tft.clear((0xFFFF));
- spi_tft.set_text_color((0x001F),(0xFFFF));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("全部循环");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x11,0x01,1));
- }
- }
- //{ID:505,keyword:"命令词",ASR:"上一首",ASRTO:"好的,上一首歌"}
- if(snid == 505){
- spi_tft.clear((0xFFFF));
- spi_tft.set_text_color((0xF800),(0xFFFF));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("上一首歌");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x02,0,0));
- }
- }
- //{ID:506,keyword:"命令词",ASR:"不错不错",ASRTO:"谢谢鼓励,继续听歌"}
- if(snid == 506){
- digital_write((21),1);
- spi_tft.clear((0x001F));
- spi_tft.set_text_color((0xF800),(0x001F));
- spi_tft.set_cursor(30,66);
- spi_tft.draw_hanzi_32("谢谢");
- }
- //{ID:507,keyword:"命令词",ASR:"播放第九首歌曲",ASRTO:"好的,播放了"}
- if(snid == 507){
- spi_tft.clear((0xF800));
- spi_tft.set_text_color((0xFFFF),(0xF800));
- spi_tft.set_cursor(0,66);
- spi_tft.draw_hanzi_32("第九首歌");
- for (i = 0; i < 8; i = i + 1) {
- Serial.write(MP3_wie_cmd(i,0x03,0x01,9));
- }
- }
- }
-
- void hardware_init(){
- spi_tft.init();
- spi_tft.set_direction(2);
- spi_tft.set_text_wrap(true);
- spi_tft.set_text_size(32);
- spi_tft.set_bg_mode(1);
- vTaskDelete(NULL);
- }
-
- void setup()
- {
- Serial.begin(9600); setPinFun(13,SECOND_FUNCTION); setPinFun(14,SECOND_FUNCTION);
- //{speak:阿栋-浑厚男声,vol:20,speed:10,platform:haohaodada}
- //{playid:10001,voice:欢迎使用人工智能AI语音助手,用智能管家唤醒我}
- //{playid:10002,voice:我退下了}
- digital_write((4),1);
- xTaskCreate(hardware_init,"hardware_init",256,NULL,100,NULL);
- }
复制代码
生成模型与编译烧录


实验记录视频
【【花雕动手做】ASRPRO语音识别(72)---定义与循环播放MP3】 https://www.bilibili.com/video/BV1cK421C7W2/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987
实验场景图








|