语音模块——LSYT201B模组(超详细)

  写在前面:

  在嵌入式的学习过程中,语音模块是必不可少的,无论是做项目组合还是单个测试,对于语音模块我们应当有一款合适的模块。今天给大家介绍的是一款质量好、成本低、功能齐全的语音模块——LSYT201B语音模组。它的技术支持详细,能够使得用户更好的理解和使用产品,降低开发难度,缩短开发周期。

  免费样品 (longsto.com)大家可以在深圳市雷龙发展有限公司对需要的样品进行免费申请。

  同时,我们也感谢雷龙发展有限公司对本篇博客的硬件支持!

  一、模块简介

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  YT2228 是根据智能语音交互市场需求及思必驰算法的发展方向定义开发的 “芯片+算法”人工智能人机语音交互解决方案,具有高性能、低功耗等特点。该芯片通过软硬融合的方法,具备快速赋予各类设备语音交互的能力,极大的提高了用户体验和产品灵活性。该芯片支持家居5m交互,本地最多可识别150词,具备多轮交互能力。可以广泛应用在智能家电、玩具、空调伴侣等领域。

  产品实物:

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  产品的尺寸为:34.22*18.16,引脚间距为2.0mm。由此可见模块的尺寸是很少的。 

  引脚介绍:

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  由上图所示,该模块的引脚共有24个,下表为具体功能说明:

LSYT201B语音模组 语音模块功能说明 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  如上表所示为该模块的引脚说明,其中红色表出来的是我们需要注意的,基本的使用需要进行连接的引脚。

  二、功能介绍

  在上面我们介绍了该模块的通信方式为串口通信,那我们需要对串口通信具有一定的了解,详细的串口介绍可以看我之前的博客。

  51单片机---串行口通信(小白可入)_串行接口给单片机传输信息-CSDN博客

  STM32——串口(UART)使用_stm32串口-CSDN博客

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  模块的串口接线如上图所示,右图为该语音模块,左图为MCU或者其他含有串口的设备例如:串口模块等等 。

  串口通信需要一定的串口通信通信协议,其中该模块的通信格式为:

  波特率:9600;

  数据位:8位;

  校验位:无;

  停止位:1位;

  数据流控:无;

  参考词条:

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介 语音模块参考词条

  对于上述表格做出解释:

  首先 ,当模块连接正确后,通电一瞬间,模块会进行语音播报:欢迎使用雷龙智能监控系统。如果10秒内,没有给出回应,模块会进行语音播报:有需要再叫我。

  如果我们进行唤醒,即说出:“你好小龙”,模块会回应我在,并且通过串口输出“FE 04 00 01 03 FD”,后面我们再说出其他的命令词,语音模块会进行对应的回应,以及通过串口输出对应的数据。

  期间如果10s没有任何命令,模块依旧会进行语音播报:有需要再叫我。

  我们可以通过对应的串口输出来进行对应的操作,后面有对应的案例实验。

  三、硬件电路

  1、 参考电路:

LSYT201B语音模组 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  其中主要为四处连接:

  1、通过单片机想模块供电:此处建议供电为5V;

  2、串口连接RX\TX:用于接收模块对应的串口输出;

  3、麦克风连接:用于进行语音输入;

  4、喇叭:用于进行语音输出;

  此处为MCU连接,也可以用串口助手连接,性质是一样的。

  2、串口连接实物图

LSYT201B语音模组实物展示 离线语音识别模组 离线应用识别芯片 语音控制模块简介

    

  3、单片机连接实物图

LSYT201B语音模组单片机连接实物图 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  四、案例测试

  1、串口助手测试

  说明:利用串口模块连接语音模块,然后进行语音通信,通过串口助手查看语音模块的串口输出。

LSYT201B语音模组 语音模块串口测试 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  串口助手+语音模块

  2、单片机测试

  说明:利用单片机来实现相关的语音控制,此处没有接防晒与水泵,依旧是利用LED灯来进行对应的测试。

LSYT201B语音模组 语音模块单片机测试 离线语音识别模组 离线应用识别芯片 语音控制模块简介

  MCU+语音模块

  3、测试代码

  单片机测试需要用到以下的代码:

  main.c

#include "./SYSTEM/sys/sys.h"

#include "./SYSTEM/delay/delay.h"

#include "./BSP/UART1/uart1.h"

#include "./BSP/LED/led.h"

int main(void)

    

    HAL_Init();                              /* 初始化HAL库 */

    sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */

    delay_init(72);                          /* 延时初始化 */

    uart2_init(9600);

    led_init();

    while(1)

   { 

       if(led==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

      else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

        if(water==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

       else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

       

       if(sunblock==1)

       {

      

       }

       else 

       {

     

       }

   }

}

#include "./SYSTEM/sys/sys.h"

#include "./SYSTEM/delay/delay.h"

#include "./BSP/UART1/uart1.h"

#include "./BSP/LED/led.h"

int main(void)

    

    HAL_Init();                              /* 初始化HAL库 */

    sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */

    delay_init(72);                          /* 延时初始化 */

    uart2_init(9600);

    led_init();

    while(1)

   { 

       if(led==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

      else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

        if(water==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

       else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

       

       if(sunblock==1)

       {

      

       }

       else 

       {

     

       }

   }

}

#include "./SYSTEM/sys/sys.h"

#include "./SYSTEM/delay/delay.h"

#include "./BSP/UART1/uart1.h"

#include "./BSP/LED/led.h"

int main(void)

    

    HAL_Init();                              /* 初始化HAL库 */

    sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */

    delay_init(72);                          /* 延时初始化 */

    uart2_init(9600);

    led_init();

    while(1)

   { 

       if(led==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

      else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

        if(water==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

       else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

       

       if(sunblock==1)

       {

      

       }

       else 

       {

     

       }

   }

}

#include "./SYSTEM/sys/sys.h"

#include "./SYSTEM/delay/delay.h"

#include "./BSP/UART1/uart1.h"

#include "./BSP/LED/led.h"

int main(void)

    

    HAL_Init();                              /* 初始化HAL库 */

    sys_stm32_clock_init(RCC_PLL_MUL9);      /* 设置时钟, 72Mhz */

    delay_init(72);                          /* 延时初始化 */

    uart2_init(9600);

    led_init();

    while(1)

   { 

       if(led==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

      else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

        if(water==1)

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_RESET);

       }

       else

       {

            HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);

       }

       

       

       if(sunblock==1)

       {

      

       }

       else 

       {

     

       }

   }

}

  uart1.c

#include "./BSP/UART1/uart1.h"

#include "./SYSTEM/sys/sys.h"

#include "string.h"

UART_HandleTypeDef uart2_handle;

uint8_t RX_buff[6];

uint8_t led=0,water=0,sunblock=0;

void uart2_init(uint32_t bandrate)

{

    uart2_handle.Instance=USART2;

    uart2_handle.Init.BaudRate=bandrate;

    uart2_handle.Init.WordLength=UART_WORDLENGTH_8B;

    uart2_handle.Init.Mode=UART_MODE_TX_RX;

    uart2_handle.Init.HwFlowCtl=UART_HWCONTROL_NONE;

    uart2_handle.Init.Parity=UART_PARITY_NONE;

    uart2_handle.Init.StopBits=UART_STOPBITS_1;

    HAL_UART_Init(&uart2_handle);

    HAL_UART_Receive_IT(&uart2_handle, RX_buff, 6);

}

void HAL_UART_MspInit(UART_HandleTypeDef *huart)

{

     if(huart ->Instance ==USART2)

     {

            GPIO_InitTypeDef GPIO_InitType;

            __HAL_RCC_USART2_CLK_ENABLE();

            __HAL_RCC_GPIOA_CLK_ENABLE();

    

         GPIO_InitType.Mode=GPIO_MODE_AF_PP;

         GPIO_InitType.Pin=GPIO_PIN_2;

         GPIO_InitType.Speed=GPIO_SPEED_FREQ_HIGH;

         HAL_GPIO_Init(GPIOA,&GPIO_InitType);

         

         GPIO_InitType.Mode=GPIO_MODE_AF_INPUT;

         GPIO_InitType.Pin=GPIO_PIN_3;

         GPIO_InitType.Pull=GPIO_NOPULL;

         HAL_GPIO_Init(GPIOA,&GPIO_InitType); 

         HAL_NVIC_EnableIRQ(USART2_IRQn);

         HAL_NVIC_SetPriority(USART2_IRQn, 0,0);         

     }

   

}

void USART2_IRQHandler(void)

{

    HAL_UART_IRQHandler(&uart2_handle);

}

void HAL_UART_RxCpltCallback(UART_HandleTypeDef *huart)

{

    if(huart ->Instance ==USART2)

    {

        if(RX_buff[4]==0x04)   

          led=1;         

        else if(RX_buff[4]==0x05)

            led=0;               

        else if(RX_buff[4]==0x06)

            water=1;

        else if(RX_buff[4]==0x07)

            water=0;

        else if(RX_buff[4]==0x08)

            sunblock=1;

        else if(RX_buff[4]==0x09)

            sunblock=0;

       HAL_UART_Receive_IT(&uart2_handle, RX_buff, 6);

    }

}

  led.c

#include "./SYSTEM/sys/sys.h"

#include "./BSP/LED/led.h"

void led_init(void)

{

    GPIO_InitTypeDef GPIOhandled;

    GPIOhandled.Mode=GPIO_MODE_OUTPUT_PP;

    GPIOhandled.Pin=GPIO_PIN_5;

    GPIOhandled.Speed=GPIO_SPEED_FREQ_HIGH;

    __HAL_RCC_GPIOB_CLK_ENABLE();

    HAL_GPIO_Init(GPIOB,&GPIOhandled);

    __HAL_RCC_GPIOE_CLK_ENABLE();

    GPIO_InitTypeDef gpio1_init_struct;

    gpio1_init_struct.Mode=GPIO_MODE_OUTPUT_OD;

    gpio1_init_struct.Pin=GPIO_PIN_5;

    gpio1_init_struct.Speed=GPIO_SPEED_FREQ_LOW;

    HAL_GPIO_Init(GPIOE,&gpio1_init_struct);

     

     

     HAL_GPIO_WritePin(GPIOB, GPIO_PIN_5, GPIO_PIN_SET);   

     HAL_GPIO_WritePin(GPIOE, GPIO_PIN_5, GPIO_PIN_SET); 

}

  代码网盘

  链接:https://pan.baidu.com/s/1Ck7KPaw-wXAdCluQfvTu4A 

  提取码:1022

  总结:本节我们对深圳雷龙语音模块——LSYT201B模组进行了详细的介绍,并且利用模块完成了相关的实验测试,在后面的项目中我们也会用到这个模块,大家如果觉得这个模块好用,也可以进行使用,多多练习,熟能生巧!!

————————————————

【本文转载自CSDN,作者:King~30+】

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值