精华内容
下载资源
问答
  • M-LD3320模块原理图

    2014-09-26 00:00:58
    的“YS-LD3320模块”。该模块将LD3320芯片与周围必要的容阻件集成在一块PCB 上,将LD3320的芯片管脚通过2*20的排针引出。方便用户可以在面包板或者标准 DIP40插座等设备上对LD3320芯片进行快速开发。用户可以直接将...
  • LD3320模块的资料

    2014-05-12 06:26:21
    LD3320模块的资料和原理,有参考程序和说明等
  • LD3320+mp3模块交互,已验证实现。
  • 单片机通过模拟SPI驱动LD3320模块 仅完成识别部分!仅完成识别部分!仅完成识别部分! 根据手册推荐使用3.3V,而不是5V驱动,3.3V驱动芯片会更稳定。手册和资料请自行去某宝网的云盘搜LD3320下载。 中断引脚...

    单片机通过模拟SPI驱动LD3320模块

    • 仅完成识别部分!仅完成识别部分!仅完成识别部分!

    • 根据手册推荐使用3.3V,而不是5V驱动,3.3V驱动芯片会更稳定。手册和资料请自行去某宝网的云盘搜LD3320下载

    • 中断引脚IRQ、读写引脚WR、还有复位引脚RST,加上SPI必需的片选引脚CS、时钟线SCKLMOSIMISO一共7个引脚全部都需要接单片机。

    • 此次驱动用的是最小系统板GD32国产的单片机,芯片参考例程的硬件SPI写的不清楚,原理图直接没标出来接的哪个端口和引脚,所以只能用软件SPI模拟了。不过GD32核心用的还是Cortex-M3架构,跟ST大体差不多。移植STM32主要改下引脚配置即可。

    • 移植厂家的例程,只需要改引脚配置和字节发送的函数其实就差不多了,其他全部复制粘贴。

    • 因为是软件模拟SPI通信,引脚随意选择,MISO和IRQ配置成浮空输入,其他都配置成推挽输出。位带操作串口打印延时函数需要根据自己的板子具体配置,不多赘述。

    /*宏定义一些引脚*/
    #define LD_CS	PDout(1)	//片选
    #define LD_SCK	PDout(2)	//时钟线
    #define LD_MO	PDout(3)	//主输从入
    #define LD_MI	PDin(4)		//主入从输
    #define LD_RST	PDout(5)	//LD3320芯片复位
    #define LD_WR	PDout(6)	//读写
    
    /*引脚配置 移植需修改*/
    static void LD3320_gpio_cfg(void)
    {
    	rcu_periph_clock_enable(RCU_GPIOD);
    	
    	/* 配置PD1 PD2 PD3 PD5 PD6为推挽输出  */
    	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_1);
    	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_2);
    	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_3);
    	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_5);
    	gpio_init(GPIOD, GPIO_MODE_OUT_PP, GPIO_OSPEED_50MHZ, GPIO_PIN_6);
    	
    	//片选空闲为高
    	LD_CS =1;
    	LD_RST =1;		//随意,具体看厂家例程
    	LD_SCK =1;		//随意
    	
    	/* 配置PD4 为浮空输入 */
    	gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_4);
    	
    	/* 配置PD0为浮空输入 */
    	gpio_init(GPIOD, GPIO_MODE_IN_FLOATING, GPIO_OSPEED_50MHZ, GPIO_PIN_0);
    	
    	/* 配置PD0为中断 */
    	rcu_periph_clock_enable(RCU_AF);
    	nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2);
    	nvic_irq_enable(EXTI0_IRQn, 1, 1);
    	gpio_exti_source_select(GPIO_PORT_SOURCE_GPIOD, GPIO_PIN_SOURCE_0);
    	exti_init(EXTI_0, EXTI_INTERRUPT, EXTI_TRIG_FALLING);	//看手册和例程,下降沿触发
        exti_interrupt_flag_clear(EXTI_0);
    }
    

    SPI是全双工通信方式,发送同时也可以接收,参考硬件SPI的发送很好理解。只有引脚配置和发送函数比较重要,其他都是厂家例程

    static uint8_t SPI_Send_Byte(uint8_t byte)
    {
    	int32_t i = 0;
    	uint8_t data = 0;
    	LD_CS  =0;		//数据传输CS一定要是低电平
    	LD_WR  =0;		//同理
    	
    	for(i=7;i>=0;i--)
    	{
    		//MSB传输
    		if(byte &(1<<i)){
    			LD_MO =1;	//bit位为1 就置高电平
    		}
    		else{
    			LD_MO =0;  //bit位为0 就置低电平
    		}
    		
    		if(LD_MI){		//发送完 马上接收
    		data|=(1<<i);
    		}
    		
    		/*一定要看手册和时序图 下降沿有效*/
    		/*SPI模式3 空闲CS=1,第一个跳边沿触发*/
    		LD_SCK =0;
    		delay_ms(1);
    		
    		LD_SCK = 1;
    		delay_ms(1);
    
    	}
    	
    	return data;		//是否接收返回看需求
    	
    }
    
    void EXTI0_IRQHandler(void)
    {
        if (RESET != exti_interrupt_flag_get(EXTI_0)) {
    		Int_flag^=1;	//为了方便Debug仿真能观察中断进入的全局变量,可删除
           ProcessInt();	//识别处理,不管有没有识别到都会触发中断
            exti_interrupt_flag_clear(EXTI_0);
        }
    }
    
    /*具体过程还是看厂家例程 基本复制黏贴*/
    static void ProcessInt(void)
    {
    	uint8_t AsrResCount=0;
    	RegVal = LD_ReadReg(0x2B);
    	
    	//关中断
    	LD_WriteReg(0x29,0);
    	LD_WriteReg(0x02,0);
    	
    	/*RegVal
    	第4位:为1代表有结果产生,mcu可清零
    	第2位:为1代表FIFO中断产生,MP3播放会产生中断请求MCU向FIFO_DATA中Reload数据
    	第3位:为1代表出错,需要Reset重启。
    	*/
    	/* 有结果产生且DSP空闲且ASR流程正常结束 */
    	if((RegVal & 0x10) && LD_ReadReg(0xb2)==0x21 && LD_ReadReg(0xbf)==0x35){
    	
    		AsrResCount = LD_ReadReg(0xba);
    		//printf("%02x\r\n",AsrResCount);
    		if(AsrResCount>0 && AsrResCount<=4)		//1-4 识别到
    		{
    			AsrStatus = LD_ASR_FOUNDOK;
    		}
    		else{
    			AsrStatus = LD_ASR_FOUNDZERO;		//没识别到
    		}
    	}
    	else{
    		AsrStatus = LD_ASR_ERROR;				//压根没运行
    	}
    	
    	LD_WriteReg(0x2b,0);
    	LD_WriteReg(0x1C,0);//写0:ADC不可用
    	LD_WriteReg(0x29,0);
    	LD_WriteReg(0x02,0);
    	LD_WriteReg(0x2B,0);
    	LD_WriteReg(0xBA,0);	
    	LD_WriteReg(0xBC,0);	
    	LD_WriteReg(0x08,1);//清除FIFO_DATA
    	LD_WriteReg(0x08,0);//清除FIFO_DATA后 再次写0
    	
    
    }
    
    展开全文
  • 因为LD3320模块上使用STC11L08XE与LD3320A芯片进行交互,我们要想利用模块官方提供的Demo进行二次开发,那么首先要搭建一个STC单片机开发环境并学会更新LD3320模块固件程序的方法。安装Keil4安装C51V901.exe软件,...

    因为LD3320模块上使用STC11L08XE与LD3320A芯片进行交互,我们要想利用模块官方提供的Demo进行二次开发,那么首先要搭建一个STC单片机开发环境并学会更新LD3320模块固件程序的方法。

    安装Keil4

    d739eae0660323aa77ff4e99a660f24b.png

    安装C51V901.exe软件,一路默认安装即可,如果之前安装过MDK5,也就是Keil5,更换一个安装目录即可。

    激活软件

    Keil --> File --> License Management

    b0f106bb270d507dad3adefbe4f51a9f.png
    644f7f308f863ce5e4ac38dd9ac29118.png
    此软件仅供学习使用,请支持正版。

    编译工程文件

    1. 拷贝一份口令模式的Demo代码
    41899ae61e01055550c78b816aa5dc46.png
    1. 打开此工程
    9fd03b53c43df719995bee917d793369.png

    打开过程中,可能报错:

    2ffae0a50958f191128c1a883c8704d4.png

    这个是因为原工程的Keil安装目录跟你的电脑Keil的安装目录不一致导致的,我点击“确定”按钮,然后编译工程没有错误,关闭工程,重新打开,错误提示消失,应该是Keil根据你电脑中Keil的目录,自动重新加载了。

    1. main.c文件中,添加一测试语句
    0918802c524832148110abf16b472ae0.png

    此代码用于验证我们下面烧录的代码是否成功。

    硬件连接

    876d66000c735686536cbc9f7032959c.png

    下载程序

    操作步骤:

    1. 打开STC-ISP软件;
    2. 选择单片机型号为:STC11L08XE;
    3. 选择与LD3320相连的USB转TTL模块的串口号;
    4. 打开程序文件,文件所在路径为:\STC11系列程序\LDV7语音识别模块--(口令模式) - XiaoHa\obj\V07A.hex;
    5. 勾选“编程完成后自动打开串口”;
    6. 点击“下载/编程”按钮,进入待下载模式;
    7. 点击LD3320模块上的复位按键,自动进入程序下载阶段。
    44aa697c6127b642e45cd6c9af736431.png

    我们可以看到程序下载完毕之后,在串口接收缓冲区中可以看到我们添加的打印信息:Test demo by Xiao Ha . , 证明程序下载的没有问题。

    c1db805248f7970153e79c5f3f1ca347.png

    参考阅读

    STM32开发环境搭建全过程分享

    往期回顾

    01

    ESP8266模块详解

    02

    |DA转换器是什么?快来一起学习一下吧!

    03

    STM32中断优先级详解

    04

    |STM32下载程序新思路--使用串口下载程序

    ff7f1965bebf83e87bc6cf997c5099ba.png

    1d82a0ad556961c0d77c6118fa8bd93a.gif

    展开全文
  • 语音识别LD3320模块主要特色功能: 非特定人语音识别技术:不需要用户进行录音训练 可动态编辑的识别关键词语列表:只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效。比如,用户在 51 等 ...
  • 如题,语音报警系统利用Zigbee和LD3320语音模块该如何实现?麻烦各位走过路过看一看,感谢各位大佬!</p>
  • 工作电压为5.5伏51单片机如何与语音模块ld3320相连接
  • 推出LD332X非特定人语音识别芯片:只需要51MCU将关键词语拼音串,设置寄存器传入LD332X芯片,就可以完成语音识别功能。直接将芯片设计加入系统中(LD332X芯片支持并口和SPI两种接口方式)即可以增加非特定人语音识别...
  • LD3320语音模块STM32

    2018-10-04 21:57:48
    硬件基于正点原子F1开发板,控制LD3320模块,用于语音控制,程序只是给出了控制LED示范。
  • LD3320语音模块与Wemos的串口通信控制

    千次阅读 2020-10-25 15:30:02
    LD3320语音模块和Arduino的串口通信控制小车的... 今天心血来潮想通过LD3320模块以通信的方式来控制小车的方向,当然你们也可用这代码来简单改一下来控制家电 比如电灯,更好的了解物联网的基本操作,多动手去完成...

    LD3320语音模块和Arduino的串口通信控制小车的方向

        设计过程

                     (1)连接模块与芯片是 LD3320 ,Aduino的Wemos

                        (2)通信方式为串口通信

                      (3)代码的讲解

         前言

                 今天心血来潮想通过LD3320模块以通信的方式来控制小车的方向,当然你们也可用这代码来简单改一下来控制家电 比如电灯,更好的了解物联网的基本操作,多动手去完成一个一个成品或项目,培养研发的乐趣,这才是打开正确的学习方式。

          WeMos D1 的特性

                     1  基于ESP-8266EX

                     2  ARDUINO兼容, 使用RDUINO IDE来编程

                     3  11*I/O引脚

                     4  1 * ADC 引脚(输入范围0  ~ 3.3)

                     5  板载5V  1A  开关电源  (高输入电压24V)

     

          引脚的连接

     

                       LD3320—Arduino
                       3.3V—3.3V
                       TXD—D3
                       RXD—D2
                       GND—GND

                         

     

     

                代码的讲解

                               LD3320模块从淘宝上买的时候,就会有相关的例程代码我们的语音部分的代码可以直接从上面去改,如图我是直接用普通模式的代码来做的。LD3320我们不用了解全部的代码,因为我们改的部分只有3个部分,懂得那3个部分就行,第一个部分是     User_handle(uint8 dat)  用户执行函数     第二部分为   LD_AsrAddFixed()向LD模块添加关键词     第三部分   //识别码客户修改处   如图

     

     

     

     

          

     

     

     

            接下来我先放 LD3320模块的代码

          LD_AsrAddFixed();

    /************************************************************************
    功能描述: 向LD模块添加关键词
    入口参数: none
    返 回 值: flag:1->添加成功
    其他说明: 用户修改.
    					 1、根据如下格式添加拼音关键词,同时注意修改sRecog 和pCode 数组的长度
    					 和对应变了k的循环置。拼音串和识别码是一一对应的。
    					 2、开发者可以学习"语音识别芯片LD3320高阶秘籍.pdf"中
               关于垃圾词语吸收错误的用法,来提供识别效果。
    					 3、”xiao jie “ 为口令,故在每次识别时,必须先发一级口令“小捷”
    **************************************************************************/
    uint8 LD_AsrAddFixed()
    {
    	uint8 k, flag;
    	uint8 nAsrAddLength;
    	#define DATE_A 8   /*数组二维数值*/
    	#define DATE_B 20		/*数组一维数值*/
    	uint8 code sRecog[DATE_A][DATE_B] = {	   //该部份是你想输入的语音口令的拼音
    																				 "xiang qian",\	  
    																				 "xiang ho",\
    																				 "xiang zuo",\
    																				 "xiang you",\
    																			};	/*添加关键词,用户修改*/
    	uint8 code pCode[DATE_A] = {               //该部分是对应着拼音来写的识别码
    															CODE_XQ,\
    														
    															CODE_HT,\
    															CODE_XZ,\
    															CODE_XY,\
    														 };	/*添加识别码,用户修改*/	
    	flag = 1;
    	for (k=0; k<DATE_A; k++)
    	{
    			
    		if(LD_Check_ASRBusyFlag_b2() == 0)
    		{
    			flag = 0;
    			break;
    		}
    		
    		LD_WriteReg(0xc1, pCode[k] );
    		LD_WriteReg(0xc3, 0 );
    		LD_WriteReg(0x08, 0x04);
    		delay(1);
    		LD_WriteReg(0x08, 0x00);
    		delay(1);
    
    		for (nAsrAddLength=0; nAsrAddLength<DATE_B; nAsrAddLength++)
    		{
    			if (sRecog[k][nAsrAddLength] == 0)
    				break;
    			LD_WriteReg(0x5, sRecog[k][nAsrAddLength]);
    		}
    		LD_WriteReg(0xb9, nAsrAddLength);
    		LD_WriteReg(0xb2, 0xff);
    		LD_WriteReg(0x37, 0x04);
    	}
        return flag;
    }

     

           LD_AsrAddFixed();

     

    /***********************************************************
    * 名    称:用户执行函数 
    * 功    能:识别成功后,执行动作可在此进行修改 
    * 入口参数: 无 
    * 出口参数:无
    * 说    明: 通过控制PAx端口的高低电平,从而控制外部继电器的通断					 
    **********************************************************/
    void 	User_handle(uint8 dat)
    {
    			 switch(dat)		   /*对结果执行相关操作,客户修改*/
    			  {
    	                case CODE_XQ:			/*小车向前*/
    					UARTSendByte(0x01);   // 向串口发送十六进制的命令
    					PrintCom("1\r\n");	  //可在串口助手打印出命令字符
    					break;
    					case CODE_HT:	 /*小车向后*/
    						UARTSendByte(0x10);
    						PrintCom("10\r\n");
    						break;
    					case CODE_XZ:	 /*小车向左*/
    						UARTSendByte(0x16);  
    						PrintCom("16\r\n");
    						break;
    					case CODE_XY:	 /*小车向右*/
    						UARTSendByte(0x17);  
    						PrintCom("17\r\n");
    						break;
    				}	
    }	 
    

           LDCHIP.H文件中   找到自行修改自己需要的代码

    
    //识别码客户修改处 
    #define CODE_XQ 0x01			//向前
    #define CODE_HT 0x10			//向后
    #define CODE_XZ 0x16			//向左
    #define CODE_XY 0x17			//向右

     

     

           接下来是Arduino 的代码(该段代码为接收语音模块的串口信号代码,语音模块每接收到一个指令,Wemos芯片的对应引脚就会产生相应的电平变化,我们可以利用这变化来设置相应的引脚中断,因为想到大伙不一定做小车,因此我只发了这段代码给大伙去开发,大家调试时可以用LED灯,或蜂鸣器去调试相应的引脚,当然有也可以用示波器)

     

     

    
    #include<SoftwareSerial.h>    //需要调用这个库实现串口通信
    
    void setup() {
     pinMode(D3,OUTPUT);        //设置IO口D3为输出模式
     pinMode(D4,OUTPUT);        //设置IO口D4为输出模式
      Serial.begin(9600);
      digitalWrite(D2,LOW);     //给D2口低电平
        digitalWrite(D3,LOW);     //给D3口低电平
      delay(3000);
    
    }
    
    void loop() {
      int cmd;
    
    
    
      if(Serial.available() > 0){
          cmd = Serial.read();
          switch(cmd)
            {
              case 1:          //前面提到的读取到1表示向前
                digitalWrite(D3,HIGH);//当喊“向前”时,可以看到Arduino上的D3会置高
                break;
              case 10:
                digitalWrite(D3,LOW);//当喊“向前”时,可以看到Arduino上的D3会置低
                break;
               
                 break;
              case 0x16:
                digitalWrite(D4,HIGH);//当喊“向前”时,可以看到Arduino上的D4会置高
                break;
              case 0x17:
                digitalWrite(D4,LOW);//当喊“向前”时,可以看到Arduino上的D4会置低
                break;
               default:
                break;
            }
              
        
        }
    
    }

     

    展开全文
  • LD3320语音识别模块

    2019-02-18 21:27:00
    LD3320语音识别模块相关代码及技术文档描述,配有原理图及PCB
  • 上节课已经教大家将LD3320语音识别模块使用起来了,但是使用的时候是我们单方面说出命令,机器识别后并没有给我们一些视觉上或者听觉上的应答反馈,总觉得缺少点什么,所以今天我就教大家给语音识别模块加上语音交互...

    大家好,我是阿乐。

    今天教大家给LD3320语音识别模块加上语音交互的功能。

    16e80bb4383e7f6d84d458f61302cc70.png

    上节课已经教大家将LD3320语音识别模块使用起来了,但是使用的时候是我们单方面说出命令,机器识别后并没有给我们一些视觉上或者听觉上的应答反馈,总觉得缺少点什么,所以今天我就教大家给语音识别模块加上语音交互的功能,我们问一句,模块答一句,这样多有意思,这也使得这个机器更加人性化,实用性更强。

    好的,介绍一下我们今天将会用到的新模块,就是这个东西,下图是实物图:

    9185b0b819734fe8caada89779788205.png

    模块型号名称是MP3-TF-16P,别看它体积不大,功能可是很强大的。简单来说,它就是一个音乐播放器,可以用来播放U盘、TF卡、NOR FLASH里的MP3、WAV、WMA格式的音频文件,同时它也可以作为电脑的声卡,用来播放电脑的声音。它也可以作为读卡器,通过USB连接电脑后就可以更新TF卡里的内容,用来更新文件。还有更关键的一点是,它价格很便宜,几块钱的东西,很是值得我们入手来开发学习。

    这个小东西能用来放音乐,放广播,它不仅支持通过按键来选曲、调音量,还可以通过单片机来操作,这也就是说,我们可以通过编程,通过串口来发指令,指定它什么时候放哪首歌曲,放多大的音量,中途插不插播广告等,根本不用我们动手,程序上就解决了。这就很有灵性了,我们上节课学习了LD3320语音识别模块,它识别到我们的指令后可以对IO口做一系列的操作,用来输出高低电平或者从串口发送数据,我们这样把它俩撮合到一起,这不就成了嘛,一个具有语音交互功能的语音识别系统就这样诞生了。

    4688eeecd661e972f07b2a322cebb892.png

    来,先来看看这个小家伙的这些引脚都有什么作用。看图:

    644dad297c7426bb12ab59e7bc1c8d11.png

    它一共有16个脚,左上角为第一个脚,是模块的电源输入引脚,输入电压范围是3.3-5V,建议用5V供电。

    第二个脚是RX,是UART 串行数据输入。

    第三个脚是TX,是UART 串行数据输出。

    第四个脚是DAC_R,是音频输出右声道,可驱动耳机或者输出音频信号给功放。

    第五个脚是DAC_L,是音频输出左声道。

    第六个脚是SPK2,是接小喇叭+的,可以驱动小于3W的喇叭。

    第七个脚是GND,接电源负极。

    第八个脚是SPK1,是接小喇叭-的。

    第九个脚是IO1,是触发口,默认上一曲(长按音量-)。

    第十个脚也是GND。

    第十一个脚是IO2,也是触发口,默认下一曲(长按音量+)。

    第十二个脚是ADKEY1,AD口1,当触发时是第一段(长按循环第一段)。

    第十三个脚是ADKEY2,AD口2,当触发时是第五段(长按循环第五段)。

    第十四个脚是USB+,USB+ DP,接U盘或插电脑的USB口。

    第十五个脚是USB-,USB- DM,接U盘或插电脑的USB口。

    最后一个是BUSY引脚,它是播放指示,有音频播放时是输出低电平,没有音频播放时是输出高电平。

    好,到这一步我们要理一下思路啦,对于命令的传输我们通过串口来发送,当语音识别模块识别到我们的命令后,让它通过串口给这个MP3模块发送一串指令,这MP3模块接收到指令后,就播放相对应的MP3文件,这样不就实现了系统对我们的应答了嘛。

    7bb949268eddabab21756a3b20c5a26e.png

    比如我设置这个语音识别模块的一级口令为“创客小秘”,我叫一声“创客小秘”,语音识别模块识别成功后就给MP3模块发送一个指令,指定播放一个MP3文件,而这个文件的内容是“主人,我在”,这样就完成了一个交互的过程。

    好,先把硬件连接好,我画了个简单的电路图:

    ae3633e91f060427e4c1cddb9aecebac.png

    左边这个是语音识别模块,右边的是MP3模块,它们电源正极和地都需要接,这个不用说,然后就是数据的传输了,通过串口来,它们的RX和TX交叉来接,RX接TX,TX接RX,这就完成了,很简单。当然,如果我们还要去控制家电,那就像上节课一样通过一个三极管控制继电器就好了。我这里增加了一路是用来控制这个小风扇的开与关的,IO口控制三极管,然后三极管直接控制风扇。

    好,接下来讲讲怎样生成我们需要的MP3文件,我们先设想一下对话的过程,简单举五个例子吧,第一句,就是我说出一级口令,我叫一声“创客小秘”,语音识别模块识别成功后回我一句“主人,我在”;

    第二句,我说“打开继电器”, 语音识别模块识别成功后回我一句“好的”,同理,我说“关闭继电器”回我“好的”。第三句,我说“打开风扇”,回我“已开风扇”。第四句,我说“关闭风扇”,回我“已关风扇”。第五句,我说“拜拜”,回我“主人再见,很高兴为您服务!”

    74df2a68b02313a02657d24288b9ddbe.png

    好,下一步就是生成MP3文件了,我们需要生成的MP3文件有:1、主人,我在;2、好的;3、已开风扇;4、已关风扇;5、主人再见,很高兴为您服务!

    生成这些MP3文件我用的软件是朗读女,我们只要输入文字,它就会合成语音,选择想要的发音人,然后就可以直接生成MP3文件啦,非常好用。当然还有其它软件,比如灵云朗读软件、TTS语音合成工具、讯飞快读等,大家根据自己需要来选用。

    好,我们生成这些MP3文件后,把它们拷贝到TF卡里,然后把卡插到MP3播放模块上就可以了。

    7bcad8e5ea5bda764e6f62f624ae6698.png

    到此为止,我们硬件上的准备已经就绪,接下来要做的就是要修改程序。到这一步要跟大家说一下控制这个MP3模块播放的指令和格式。举个例子,指定播放一个MP3文件的指令是这样的:7E FF 06 03 00 00 01 FE F7 EF,很长吧,我们从语音模块通过串口给MP3模块发这一串东西,MP3模块收到后就知道这是要播放第一个MP3文件了,在这里简单说一下每个字节表示的意思:7E是起始位,固定不变的,都要有它;FF这是这个模块的版本信息,也是固定不变的;06,指的是从上一字节开始,到后面的字节个数,也就是说,从FF开始,到06 03 00 00 01为止,一共有六个字节。然后这个03在这里,指的是指定曲目播放,也是固定不变的。00在这里指的是不需要反馈信息,如果是01,就是要反馈信息,这里的反馈信息指的是MP3播放模块反馈给语音识别模块的信息。到这个00 01,这里指的是歌曲序号,00是数据高字节,01是数据低字节,低字节01在这里表示的就是播放第一首歌曲。FE和F7指的是累加和校验,是用来给数据查错的,最后一位EF是结束位,当接收到这一位,就说明整个数据发送完毕了。在这里可能大家听得比较懵逼,它设置那么复杂的指令是为了提高数据传输时的准确性,大家听不懂也没关系,懂得有这么一回事就得了。在这里我们要重点关注的是03 00 00 01这四个字节,代表的就是指定播放第一首歌曲,不需要信息反馈。

    12228fcada51fe845154f9894e25e15e.png

    好,看下面的图片,MP3模块官方给出的例程,在这里我只给大家简单介绍3个函数,首先是这个串口发送函数,就是把我们上面的这一串东西发送出去的函数,你看它最先发送出去的是起始位的7E,然后通过一个自加循环,i++,按顺序的把这一串数据全部发送出去,后面EF就是结束位了。

    740ffd457cf34f21786da79cbf58a8d2.png

    如下图,往下这个是求和校验函数,为什么要这个函数呢,它是怕数据在传输的过程中出错,经过这个函数处理,配合下一个要讲的函数,它就知道这个数据在传输的过程有没有出错。举个例子,比如原先我是想传00010001这个数据,结果数据在传输的过程中受到干扰,有一位数据受到影响由0变成1了,那在接收的那一端收到的数据可能就变成了00010011了,如果没有校验函数去校验,接收端就无法判断数据的准确性,这就很容易出现大问题,所以这个函数存在的意义就在这里了。这个函数在这里具体是怎么校验的就不深入给大家讲了,解释进去又是另一片天地了。

    e39aaa71450690776c5634216d9d8203.png

    再看到下边的图片,图片上面那个是Uart_SendCMD函数,我们一起结合下面main函数里的操作来看,如下图:

    b42d06c7f3a10a3471528fb83f8e8d2d.png

    先看下面的main函数,在main函里首先初始化串口寄存器,然后执行Uart_SendCMD这个函数,这个函数的括号里有3个数据,0x03指的是播放指定的MP3文件,中间的0指的是无需反馈,0x01指的是播放第一首歌曲,这三个数据会分别赋值给上面这个函数括号里的CMD、feedback和dat,然后大家看到上边Uart_SendCMD函数里边,CMD放画红色横线1的位置,feedback放画红色横线2的位置,dat放画红色横线3的位置,而且这个dat分高字节和低字节的,这6个字节的数据是不是就是我们刚才讲过的从FF开始到01的这6个,是了吧,然后进行校验,最后就把这些数据通过串口给发送出去了。

    好,我们需要做的就是把这3个函数复制粘贴到语音识别模块的大程序中去,进行融合,如下图:

    b6cae00a7d06cd1a0265fd947863cc03.png

    eeac17b44403cce1bc2e07564e96facf.png

    然后我们在语音识别程序处理函数这里加上我们想要播放的音乐就得了,还记得我们刚才生成的MP3文件吗?我们按顺序放到TF卡里,第一首是“主人,我在”,第二首是“好的”,第三首是“已开风扇”,第四首是“已关风扇”,第五首是“主人再见,很高兴为您服务”。

    来啦,如下图:

    921700f42e55033da52e51f7232c414c.png

    当我们说出一级口令,识别成功后我们就调用第一首音乐,把这个函数放过来,里面三个数据就是0x03,0,0x01,0x01在这里指的就是播放第一首歌曲嘛,就是播放“主人我在”。

    好,然后下面,如下图:

    18025dc182ec0fdba2fab40ce6c17758.png

    打开继电器关闭继电器都是调用“好的”这个MP3文件,那我们把这个函数放过来,里面三个数据就是0x03,0,0x02。0x02在这里指的就是播放第二首歌曲。

    同理,看下面的图片:

    a3b71c1c374f1261d822305eac496c41.png

    当我说出“打开风扇”时,调用的就是第三首歌曲,IO口给个高电平;当我说出“关闭风扇”时,调用的就是第四首歌曲,IO口给个低电平。

    b71ed018ad8a50bd624a49a1e234ad39.png

    看上面的图片,最后,当我说出拜拜时,IO口不用做任何操作,只发送串口数据,调用“主人再见,很高兴为您服务!”这个MP3文件,一样的,我们把这个函数放过来,里面三个数据就是0x03,0,0x05,后面的这个0x05在这里指的就是播放第五首歌曲。

    好的,这就完成了编程的整个过程,我们将程序编译下载,就完成了给语音识别模块添加语音交互的这个功能,整个过程有点繁琐,也有点难度,需要大家有一定的基础,在这里主要是给大家粗略看一下开发的大致框架与过程,给大家提供一个思路,大家也可以根据自己的需求加入更好的创意和想法,还是挺好玩的一个作品。

    最后附上详细视频教程:

    好的,本期视频就讲这么多,后面再给这个语音控制系统加一个无线传输数据、无线控制的功能,比如在家里,我想在一个房间通过语音识别,去控制另一个房间的灯的开关,那就需要一个无线模块去完成通讯了,我们先做一对一的,看进度可以的话再做一对多,不断完善丰富我们的系统。

    本期教程就到这里了,我们下期再见,拜拜。

    展开全文
  • stm32单片机与LD3320语音模块交互法一

    千次阅读 热门讨论 2021-01-29 16:46:46
    stm32单片机与LD3320语音模块交互法一 ## 交互方式: stm32读取LD3320对应管脚的电平变化,实现控制 1. 硬件接线 LD3320 和 stm32 GND —— GND 5V —— 5V 注: ①LD3320的RXD,TXD,3.3V管脚可以不用管 ②LD3320的...
  • LD3320 语音识别模块 语音一体化带单片机、IO 语音模块,例程,模块介绍、应用提高 其他共享配套参考程序 语音识别技术论文资料 LD3320并行串行读写辅助明.pdf LD3320开发手册.pdf LD3320数据手册.pdf LD3320芯片...
  • stm32单片机与LD3320语音模块交互法二

    热门讨论 2021-02-03 14:19:48
    stm32单片机与LD3320语音模块串口通信的方式通信 一、硬件部分 1.stm32单片机系列: stm32f103RCT6最小系统 硬件接线: LD3320的+3V接口可以不管 二、软件部分 1- LD3320官方列程main函数修改部分 2- 编译之后 3...
  • ld3320语音模块

    2013-04-24 20:32:33
    语音芯片,支持多工能语音识别技术,内嵌多种资源
  • 目录硬件模块化开发的行情LD3320语音模块介绍:语音模块验货测试硬件连接效果图测试结果良好Source Insight代码查看器 硬件模块化开发的行情 LD3320语音模块介绍: 查看用户使用手册,基本信息如下 语音模块...
  • ld3320语音模块原理图

    2013-05-16 15:01:27
    语音模块ld3320的原理图,该芯片有以下特色:(1)非特定人语音识别技术:不需要进行录音训练; (2)可动态编辑的识别关键词语列表:只需要把识别的关键词语以字符串的形式传送进芯片,即可以在下次识别中立即生效...
  • LD3320 语音模块资料

    热门讨论 2011-10-13 20:49:03
    ICRoute 推出LD332X非特定人语音识别芯片:只需要51MCU将关键词语拼音串,设置寄存器传入LD332X芯片,就可以完成语音识别功能。直接将芯片设计加入系统中(LD332X芯片支持并口和SPI两种接口方式)即可以增加非特定人...
  • 基于LD3320语音识别模块,可用于各种场合,而且识别率高,速度快
  • 语音识别芯片ld3320资料大全

    热门讨论 2010-07-19 09:54:01
    M-LD3320模块上设计有2个音频插座,直接引出MIC输入和Speaker输出信号 M-LD3320模块上没有电源芯片,把相应的电源管脚连接到排针上引出,由开发者连接入3.3v电源输入 M-LD3320模块上的CLK输入可以选择如下任意一种...
  • 这个设计应用LD3320语音识别模块,配合XY5300 MP3音乐模块和扬声器等,实现类似控制天猫精灵放歌等效果,并结合LED灯,实现语音控制外接设备。 2)使用主要器件 1、Arduino Uno控制板 2、YX5300 MP3音乐模
  • LD3320语音识别模块:LDV7模块使用详解

    万次阅读 多人点赞 2020-05-14 19:06:16
    LD3320(LDV7)语音模块可以工作在以下三种模式: 普通模式:直接说话,模块直接识别; 按键模式:按键触发开始ASR进程; 口令模式:需要一级唤醒词(口令); 推荐使用口令模式,这样避免嘈杂环境下误动作。 ...

空空如也

空空如也

1 2 3 4 5 ... 11
收藏数 211
精华内容 84
关键字:

ld3320模块