驴友花雕 发表于 2024-2-15 20:29:44

【花雕动手做】ASRPRO语音识别(72)---定义与循环播放MP3

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

https://www.bilibili.com/video/BV1cK421C7W2/?share_source=copy_web&vd_source=371a292a55e5ca9be994cbb4a86cc987

实验场景图




















页: [1]
查看完整版本: 【花雕动手做】ASRPRO语音识别(72)---定义与循环播放MP3