Control de comunicación en serie entre el módulo de voz LD3320 y Wemos

El módulo de voz LD3320 y la comunicación en serie Arduino controlan la dirección del automóvil

    proceso de diseño

                 (1) El módulo de conexión y el chip son LD3320, Wemos de Aduino

                    (2) El método de comunicación es la comunicación en serie.

                  (3) Explicación del código

     Prefacio

             Hoy, por un capricho, quiero usar el módulo LD3320 para controlar la dirección del automóvil mediante la comunicación. Por supuesto, también puede usar este código para simplemente cambiarlo para controlar electrodomésticos como luces, para comprender mejor las operaciones básicas de Internet de las cosas y hacer más para completar un producto o Proyectos, cultivar la diversión de la investigación y el desarrollo, esta es la forma correcta de aprender.

      Características de WeMos D1

                 1 Basado en ESP-8266EX

                 2 compatible con ARDUINO, use RDUINO IDE para programar

                 3 11 * pata de tracción de E / S

                 4 1 * pin ADC (rango de entrada 0 ~ 3.3)

                 5 Fuente de alimentación conmutada integrada de 5 V 1 A (voltaje de entrada alto 24 V)

 

      Conexión de pin

 

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

                     

 

 

            Explicación del código

                           Cuando se compre el módulo LD3320 de Taobao, habrá un código de rutina relacionado. El código de nuestra parte de voz se puede modificar directamente desde arriba. Como se muestra en la figura, lo hice directamente con el código en modo normal. Para LD3320, no necesitamos entender todo el código, porque solo tenemos 3 partes para cambiar, por lo que podemos entender esas 3 partes. La primera parte es User_handle (uint8 dat). La segunda parte es LD_AsrAddFixed () para agregar la clave al módulo LD. La tercera parte de la palabra // código de identificación modificación del cliente se muestra en la figura

 

 

 

 

      

 

 

 

        A continuación, pondré primero el código del módulo 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;
				}	
}	 

       Busque el código que necesita para modificar usted mismo en el archivo LDCHIP.H


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

 

 

       El siguiente es el código Arduino (este código es el código de señal serial del módulo de voz receptor. Cada vez que el módulo de voz recibe una instrucción, el pin correspondiente del chip Wemos tendrá un cambio de nivel correspondiente. Podemos usar este cambio para configurar el correspondiente El pin se interrumpe, porque creo que no todo el mundo necesariamente hace un coche, así que solo envié este código a todo el mundo para que lo desarrolle. Puedes usar luces LED o zumbadores para depurar los pines correspondientes, claro, también puedes usarlos Osciloscopio)

 

 


#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;
        }
          
    
    }

}

 

Supongo que te gusta

Origin blog.csdn.net/HHHSSD/article/details/109272064
Recomendado
Clasificación