欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  科技

LD3320语音模块与Wemos的串口通信控制

程序员文章站 2022-03-15 13:48:42
LD3320语音模块和Arduino的串口通信控制小车的方向 设计过程 (1)连接模块与芯片是 LD3320 ,Aduino的Wemos (2)通信方式为串口通信 (3)代码的讲解 前言 今天心血来潮想通过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语音模块与Wemos的串口通信控制

                     

 

 

            代码的讲解

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

 

LD3320语音模块与Wemos的串口通信控制

 

 

LD3320语音模块与Wemos的串口通信控制

LD3320语音模块与Wemos的串口通信控制

 

      LD3320语音模块与Wemos的串口通信控制

 

 

 

        接下来我先放 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;
        }
          
    
    }

}

 

本文地址:https://blog.csdn.net/HHHSSD/article/details/109272064