玩这个真的要感谢头条的强大推荐,清明节回家的大巴车上,无聊的刷着头条,很智能的给我推荐了一款语音识别模块,一直很想自己试着玩一把的我,按奈不住,点开视频看到了介绍,接着我就淘宝一下,加入了购物车,事后感觉我被套路了,是不是商家自己制作的视频推广发到头条,不管怎样,模块已经在手上了,那就利用起来吧,然后网上又搜了一款语音播放模块,自己设计不了硬件,买现成的模块玩玩拼凑吧
材料: 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,只要简单修改,就可以玩转简单的语音交互控制