玩这个真的要感谢头条的强大推荐,清明节回家的大巴车上,无聊的刷着头条,很智能的给我推荐了一款语音识别模块,一直很想自己试着玩一把的我,按奈不住,点开视频看到了介绍,接着我就淘宝一下,加入了购物车,事后感觉我被套路了,是不是商家自己制作的视频推广发到头条,不管怎样,模块已经在手上了,那就利用起来吧,然后网上又搜了一款语音播放模块,自己设计不了硬件,买现成的模块玩玩拼凑吧
材料: LD3320语音识别模块
JQ8900-TF语音播放模块
串口,杜邦线,1k电阻,扬声器
硬件连接图
原理图如下
硬件连接完成,接下来就要做软件部分的了
购买两种模块,店家会把简单的示例代码发放,只要我们简单修改就可以使用
LD3320语音识别模块,利用stc系列单片机操作,模块识别到与程序内指令相同时,发送播放语音指令,使JQ9800播放已经录入好的语音文件,作为语音识别的应答
LD3320在口令模式基础上修改,内容如下:
main.c内添加需要播放的音频文件指令
uint8_t code PrevFile[] = {0xAA, 0x05, 0x00, 0xAF};/* 上一曲*/
uint8_t code NextFile[] = {0xAA, 0x06, 0x00, 0xB0}; /* 下一曲 */
uint8_t code FirstCmd[] = {0xAA, 0x07, 0x02, 0x00, 0x0B, 0xBE}; //我在
uint8_t code AlreadyOpen[] = {0xAA, 0x07, 0x02, 0x00, 0x0C, 0xBF}; //灯已打开
uint8_t code p_nextcmd[]={0xAA, 0x07, 0x02, 0x00, 0x0D, 0xC0}; //有什么吩咐
uint8_t code p_OK[]={0xAA, 0x07, 0x02, 0x00, 0x0E, 0xC1}; //好的
uint8_t code p_respeak[]={0xAA, 0x07, 0x02, 0x00, 0x0F, 0xC2}; //请重说
void User_handle(uint8 dat)
{
if(0==dat)
{
G0_flag=ENABLE;
LED=0;
PrintCom("收到\r\n");
UartSendData(FirstCmd, 6);
delay(10000);
UartSendData(p_nextcmd, 6);
}
else if(ENABLE==G0_flag)
{
G0_flag=DISABLE;
LED=1;
switch(dat) /*对结果执行相关的操作,客户可删除 printcom输出语句*/
{
case CODE_OPENLIGHT:
case CODE_OPENLIGHTA:
case CODE_OPENLIGHTB:
UartSendData(AlreadyOpen, 6);
break;
case CODE_CLOSE:
case CODE_CLOSEA:
case CODE_CLOSEB:
UartSendData(p_OK, 6);
break;
default:
PrintCom("请重新识别发口令\r\n");
UartSendData(p_respeak, 6);
break;
}
}
else
{
PrintCom("请说出一级口令\r\n");
}
}
LDChip.c
uint8 code sRecog[DATE_A][DATE_B] = { "tian tian",\
"da kai deng",\
"kai deng",\
"ba deng da kai",\
"guan diao deng",\
"guan deng",\
"ba deng guan diao", \
"chong dian"
};
uint8 code pCode[DATE_A] = {
CODE_CMD,\
CODE_OPENLIGHT,\
CODE_OPENLIGHTA,\
CODE_OPENLIGHTB,\
CODE_CLOSE,\
CODE_CLOSEA,\
CODE_CLOSEB,\
CODE_GZ
};
将修改后的程序重新编译烧写到LD3320模块,使用“”天天“”口令唤醒,说“开灯”,“关灯”指令
JQ8900 语音播放,使用官方提供的调试工具,将文字转换为语音文件存储大sd卡,将sd卡插入模块,使用调试工具确认播放文件对应的指令,将指令写到LD3320程序内,使用串口发送指令播放语音
因为使用的都是开发好的code,只要简单修改,就可以玩转简单的语音交互控制