语音识别 nlp transformer_离线

  • HLK-V20是海凌科电子针对大量纯离线控制场景和产品最新推出的高性能纯离线语音识别 模块,可广泛且快速的应用于智能家居、各类智能小家电、86盒、玩具、灯具、工业、医疗、 物联网、汽车、安防与照明等需要语音操控的产品。
  • 模块采用32bit RSIC架构内核,并加入了专门针对信号处理和语音识别所需要的DSP指令集,支持浮点运算的FPU运算单元,以及FFT加速器,通过神经网络对音频信号进行训练学习, 提高语音信号的识别能力。
  • 该方案支持150条本地指令离线识别,可自由定制唤醒词、命令词与应答播报词,具有丰 富的外围接口。

一、引脚介绍

语音识别 nlp transformer_离线_02

模块有 16 个引脚,包括功放输出、差分输入与串口。这里我们只用到串口的两个引脚来连接,RX和TX,具体的指令可以看下表,因为指令是定制的,也可以去官网修改,通过串口烧录。-----具体的指令可以根据购买的商家定,问商家要指令表就行

语音识别 nlp transformer_语音识别_03

代码编写,我这里连接的是串口3,只需要配置串口3 使能,然后串口中断就可以了,通过串口中断函数来处理语音助手返回的数据来执行相应的动作----- 看代码--初始化就不说了

//串口中断服务函数 
void USART3_IRQHandler(void)
{	
	//检查标志位
	if(USART_GetITStatus(USART3, USART_IT_RXNE) != RESET) //接收中断
	{
		voice[len3++]=USART_ReceiveData(USART3); //外设字符接收
	}
	if(USART_GetITStatus(USART3, USART_IT_IDLE) != RESET) //空闲中断
	{	
		voice[len3]='\0';
		flage3=1;
	}	
	USART_ReceiveData(USART3);//清空缓冲区和中断标志位
}

//回复数据处理
void Processing_Data(void)
{
	if(voice[0]==0x4F && voice[3]==0xF4)
	{
		switch(voice[2])
		{
			case 0xAA:
				for(u16 i=0;i<5;i++)
				{
					LED0=0;
					delay_ms(300);
					LED0=1;
					delay_ms(300);
				}
				break;
			case 0x61:
				BEEP=1;
				break;
			case 0x62:
				BEEP=0;
				break;
			case 0x02:
				MOTOR=1;
				break;
			case 0x01:
				MOTOR=0;
				break;
			case 0x46:
				RELAY=1;
				break;
			case 0x47:
				RELAY=0;
				break;
			case 0x17:
				LED0=0;
				break;
			case 0x18:
				LED0=1;
				break;
			case 0x19:
				LED1=0;
				break;
			case 0x20:
				LED1=1;
				break;
			case 0x21:
				LED2=0;
				break;
			case 0x22:
				LED2=1;
				break;
			case 0x13:
				LED0=0;
				LED1=0;
				LED2=0;
				break;
			case 0x14:
				LED0=1;
				LED1=1;
				LED2=1;
				break;
			case 0x55://播放音乐
				RGB_SET(0xFF,0,0);
				RGB_SET(0,0xFF,0);
				RGB_SET(0,0,0xFF);
				RGB_SET(0x30,0,0xFF);
				break;
			case 0x58://停止播放
				RGB_SET(0,0,0);
				RGB_SET(0,0,0);
				RGB_SET(0,0,0);
				RGB_SET(0,0,0);
				break;
			case 0x53:
				ESP8266_Sned("AT+RST\r\n","OK",100);
				delay_ms(2000);
				ESP8266_Sned("AT+CWMODE=1\r\n","OK",100);//配置模式
				ESP8266_Sned("AT+CWJAP=\"TAB\",\"99999990\"\r\n","CONNECTED",100);
				delay_ms(1000);
				ESP8266_Sned(USER,"OK",100);// MQTT用户信息配置
				ESP8266_Sned(Broker,"OK",100);//MQTT 客户端配置
				ESP8266_Sned(subscrip,"OK",100);//连接到MQTT Broker
				break;
			case 0x54:
				ESP8266_Sned(domain,"OK",100);//订阅主题---订阅一次就行
				break;
		}
	}	
}

 通过检测到中断产生的标志位,,接收到数据结束中断,执行处理数据函数。下载代码,说出对应的指令,就可以执行对应的操作。