树莓派通过串口驱动LD3320语音模块
文章目录
- 树莓派通过串口驱动LD3320语音模块
- 一、LD3320语音模块的认知
- 1.1 模块参数:
- 1.2 模块结构介绍:
- 1.3 模块的串口连接:
- 1.4 验货测试方法:
- 1.5 配套程序识别语句修改方法:
- 二、树莓派串口驱动LD3320语音模块
- 2.1 修改配置代码:
- 2.2 测试语音模块:
- 2.3 树莓派和语音模块硬件连接:
- 2.4 代码编写:
一、LD3320语音模块的认知
1.1 模块参数:
1.2 模块结构介绍:
1.3 模块的串口连接:
1.4 验货测试方法:
1.5 配套程序识别语句修改方法:
用户可以根据自己的使用情况在相对应的识别码后添加识别成功后的操作。那么在设备到某句话后就会执行相应的动作,实际上此段程序是判断识别到那个识别码然后执行相应的动作,属单片机的程序应用处理部分。
二、树莓派串口驱动LD3320语音模块
2.1 修改配置代码:
我们知道了我们的配置代码如何修改之后,我们就任意修改代码,以达到我们的需求,我们这里简单修改一下配置代码为我们的测试代码所用。
/* LDChip.c */
uint8 code sRecog[DATE_A][DATE_B] = {
"rao nai bao",\
"kai fa ban yan zheng",\
"dai ma ce shi",\
"kai yi hao deng",\
"kai er hao deng",\
"kai san hao deng",\
"kai si hao deng",\
"guan deng"
};/* 添加关键词 */
uint8 code pCode[DATE_A] = {
CODE_CMD,\
CODE_KFBYZ,\
CODE_DMCS,\
CODE_LED1,\
CODE_LED2,\
CODE_LED3,\
CODE_LED4,\
CODE_OFFLED
};/* 添加识别码 */
/* LDChip.h */
//识别码修改处
#define CODE_CMD 0x00 //该命令码0x00用户不可修改
#define CODE_DMCS 0x01 //代码测试
#define CODE_KFBYZ 0x02 //开发板测试
#define CODE_LED1 0x04 //打开一号灯
#define CODE_LED2 0x05 //打开二号灯
#define CODE_LED3 0x16 //打开三号灯
#define CODE_LED4 0x17 //打开四号灯
#define CODE_OFFLED 0x2f //关所有灯
void User_handle(uint8 dat)
{
if(0==dat)
{
G0_flag=ENABLE;
LED=0;
PrintCom("收到\r\n");
}
else if(ENABLE==G0_flag)
{
G0_flag=DISABLE;
LED=1;
switch(dat)
{
case CODE_DMCS:
break;
case CODE_KFBYZ:
break;
case CODE_LED1:
PrintCom("open ledone\r\n");
break;
case CODE_LED2:
PrintCom("open ledtwo\r\n");
break;
case CODE_LED3:
PrintCom("open ledthree\r\n");
break;
case CODE_LED4:
PrintCom("open ledfour\r\n");
break;
case CODE_OFFLED:
PrintCom("close ledown\r\n");
break;
default:PrintCom("请重新识别发口令\r\n"); break;
}
}
else
{
PrintCom("请输出一级指令\r\n");
}
}
修改完成然后编译,生成Hex文件,然后下载到我们的模块当中,下载软件是:STC-ISP,因为语音模块上的芯片是STC11系列,所以下载很简单,我们就不演示了。
2.2 测试语音模块:
我们修改完代码之后,也把固件烧录到我们的语音模块中了,接下来就是测试语音模块是否可行
我们首先将我们的语音模块和USB转TTL模块交叉相连,然后一起插入电脑的USB口
接着打开我们的串口助手,我们这边用的是:STC-ISP串口助手:
我们打开串口助手之后,选择COM3端口号,然后选择波特率9600,然后打开串口开关,通过语音可以向我们串口助手发送我们的指令,说明我们的语音测试没有问题
2.3 树莓派和语音模块硬件连接:
2.4 代码编写:
#include <stdio.h>
#include <wiringPi.h>
#include <wiringSerial.h>
#include <stdlib.h>
#include <string.h>
#include <unistd.h>
int main()
{
int fd;
int n_read;
char cmd[128] = {'\0'};
if(wiringPiSetup() == -1){ //初始化wiringPi
printf("初始化wiringPi失败! \n");
}
fd = serialOpen("/dev/ttyAMA0", 9600); //打开串口
if(fd < 0){
printf("打开串口设备失败!\n");
return -1;
}
while(1){
n_read = read(fd, cmd, sizeof(cmd)); //读取串口数据
if(strlen(cmd) == 0){
printf("超时\n");
continue;
}
printf("收到命令:%s\n", cmd);
if(strstr(cmd, "open") != NULL){
printf("开灯\n");
}
if(strstr(cmd, "close") != NULL){
printf("关灯\n");
}
memset(cmd, '\0', sizeof(cmd)/sizeof(char));
}
return 0;
}