0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

雷龍LSYT201B語言模塊結(jié)合STM32使用(噪聲環(huán)境也能高精度)

jim ? 來源:雷龍發(fā)展 ? 作者:雷龍發(fā)展 ? 2024-09-10 17:04 ? 次閱讀

雷龍LSYT201B語音模塊配合STM32使用視頻示例:https://www.bilibili.com/video/BV1SZ421M7oE?t=2.9

前言

基于YT2228芯片開發(fā)的一款面向智能家居控制的離線語音控制模組,離線語音模塊,集成藍(lán)牙功能,可適配各種不同的應(yīng)用場景,方便使用,減少開發(fā)周期。模塊通過麥克風(fēng)對語音進(jìn)行采集,然后由語音芯片進(jìn)行識別處理,識別成功的結(jié)果可通過語音進(jìn)行播報(bào)和通過串口下發(fā)指令給整機(jī)控制板。

一、LSYT201B

一、產(chǎn)品簡介

YT2228 是根據(jù)智能語音交互市場需求及思必馳算法的發(fā)展方向定義開發(fā)的 “芯片+算法”人工智能人機(jī)語音交互解決方案,具有高性能、低功耗等特點(diǎn)。

該芯片通過軟硬融合的方法,具備快速賦予各類設(shè)備語音交互的能力,極大的提高了用戶體驗(yàn)和產(chǎn)品靈活性。該芯片支持家居5m交互,本地最多可識別150詞,具備多輪交互能力。

二、產(chǎn)品特征

2.1 處理器

? 32位處理器,支持FPU(Hardware Float Point Unit)

? 運(yùn)行頻率:240MHz

? 內(nèi)置 2MB FLASH

? 64中斷向量

? 4級別中斷優(yōu)先級

2.2 外設(shè)

? USB1.1

? 4個(gè)多功能16位定時(shí)器,支持捕獲和PWM模式

? 3個(gè)16位PWM發(fā)生器,可用于驅(qū)動電機(jī)

? 2個(gè)SPI

? 所有GPIO支持外部中斷

2.3 音頻

? 兩通道 16 位 DAC,SNR> = 95dB

? 單通道 16 位 ADC,SNR> = 90dB

? 采樣率支持 8KHz / 11.025KHz / 16KHz / 22.05KHz / 24KHz

/32KHz / 44.1KHz / 48KHz

2.4 藍(lán)牙

? 符合藍(lán)牙 V5.1 + BR + EDR + BLE 規(guī)范

? 滿足 Class1 class2 和 class3 傳輸功耗需求

? 支持 GFSK 和 π/ 4 DQPSK 所有包裝類型

? 最大+ 6dbm 發(fā)射功率

? 接收器最小靈敏度

2.5 電源

? VBAT供電DC: 3.0V - 5.5V

? VDDIO可輸出50mA@2.2-3.6V

? 模組功耗:50mA

2.6 封裝

? VSSOP28(0.635)/QSOP28

2.7 溫度

? 工作溫度:-40℃ to +85℃

? 存儲溫度:-65℃ to +150℃

2.8 應(yīng)用領(lǐng)域

? 智能家電(生活電器、廚房家電等)

? 智能衛(wèi)浴、智能照明、智能家居

? 智能玩具

? 空調(diào)伴侶

二、使用步驟

現(xiàn)在也已經(jīng)大致了解了這個(gè)模塊的功能,那么能不能結(jié)合單片機(jī)來使用呢。

1.UART 控制協(xié)議

先來看一下他的通信協(xié)議

采用標(biāo)準(zhǔn) UART 異步串口接口, 3.3V TTL 電平。通訊格式

波特率9600、數(shù)據(jù)位8 位、停止位1 位、奇偶校驗(yàn)位無、流控?zé)o。

wKgZombgC7KAZwKdAABX02j1KsU015.pngwKgaombgC7SAbiHHAAFt00Hq9Qw683.png

有了這些東西去對他進(jìn)行開發(fā)還不是輕輕松松,關(guān)鍵效果怎么樣呢(太強(qiáng)了,從視頻里就能看出)

2.代碼

廢話不多說直接貼代碼。由于STM32接收的是ASII碼,我們先將他轉(zhuǎn)十六進(jìn)制字符串,然后用strcmp來對字符串作比較。

代碼如下:

#include "sys.h"

#include "usart.h"

#include "led.h"

#include "string.h"

//

//如果使用ucos,則包括下面的頭文件即可.

#if SYSTEM_SUPPORT_OS

#include "includes.h" //ucos 使用

#endif

#if 1

#pragma import(__use_no_semihosting)

//標(biāo)準(zhǔn)庫需要的支持函數(shù)

struct __FILE

{

int handle;

};

FILE __stdout;

//定義_sys_exit()以避免使用半主機(jī)模式

_sys_exit(int x)

{

x = x;

}

//重定義fputc函數(shù)

int fputc(int ch, FILE *f)

{

while((USART2->SR&0X40)==0);//循環(huán)發(fā)送,直到發(fā)送完畢

USART2->DR = (u8) ch;

return ch;

}

#endif

/*使用microLib的方法*/

/*

int fputc(int ch, FILE *f)

{

USART_SendData(USART1, (uint8_t) ch);

while (USART_GetFlagStatus(USART1, USART_FLAG_TC) == RESET) {}

return ch;

}

int GetKey (void) {

while (!(USART1->SR & USART_FLAG_RXNE));

return ((int)(USART1->DR & 0x1FF));

}

*/

#if EN_USART1_RX //如果使能了接收

//串口1中斷服務(wù)程序

//注意,讀取USARTx->SR能避免莫名其妙的錯誤

u8 USART_RX_BUF[USART_REC_LEN]; //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).

//接收狀態(tài)

//bit15, 接收完成標(biāo)志

//bit14, 接收到0x0d

//bit13~0, 接收到的有效字節(jié)數(shù)目

u16 USART_RX_STA=0; //接收狀態(tài)標(biāo)記

u8 USART2_RX_BUF[USART_REC_LEN]; //接收緩沖,最大USART_REC_LEN個(gè)字節(jié).

//接收狀態(tài)

//bit15, 接收完成標(biāo)志

//bit14, 接收到0x0d

//bit13~0, 接收到的有效字節(jié)數(shù)目

u16 USART2_RX_STA=0; //接收狀態(tài)標(biāo)記

void uart_init(u32 bound){

//GPIO端口設(shè)置

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1|RCC_APB2Periph_GPIOA, ENABLE); //使能USART1,GPIOA時(shí)鐘

//USART1_TX GPIOA.9

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9; //PA.9

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.9

//USART1_RX GPIOA.10初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;//PA10

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.10

//Usart1 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = USART1_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 3; //子優(yōu)先級3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器

//USART 初始化設(shè)置

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式

USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗(yàn)位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式

USART_Init(USART1, &USART_InitStructure); //初始化串口1

USART_ITConfig(USART1, USART_IT_RXNE, ENABLE);//開啟串口接受中斷

USART_Cmd(USART1, ENABLE); //使能串口1

}

void uart2_init(u32 bound){

//GPIO端口設(shè)置

//GPIO端口設(shè)置

GPIO_InitTypeDef GPIO_InitStructure;

USART_InitTypeDef USART_InitStructure;

NVIC_InitTypeDef NVIC_InitStructure;

RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA, ENABLE); //使能GPIOA時(shí)鐘

RCC_APB1PeriphClockCmd(RCC_APB1Periph_USART2,ENABLE); //使能USART2

//USART2_TX GPIOA.2

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_2; //PA.2

GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP; //復(fù)用推挽輸出

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.2

//USART1_RX GPIOA.3初始化

GPIO_InitStructure.GPIO_Pin = GPIO_Pin_3;//PA3

GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;//浮空輸入

GPIO_Init(GPIOA, &GPIO_InitStructure);//初始化GPIOA.3

//Usart2 NVIC 配置

NVIC_InitStructure.NVIC_IRQChannel = USART2_IRQn;

NVIC_InitStructure.NVIC_IRQChannelPreemptionPriority=3 ;//搶占優(yōu)先級3

NVIC_InitStructure.NVIC_IRQChannelSubPriority = 2; //子優(yōu)先級3

NVIC_InitStructure.NVIC_IRQChannelCmd = ENABLE; //IRQ通道使能

NVIC_Init(&NVIC_InitStructure); //根據(jù)指定的參數(shù)初始化VIC寄存器

//USART 初始化設(shè)置

USART_InitStructure.USART_BaudRate = bound;//串口波特率

USART_InitStructure.USART_WordLength = USART_WordLength_8b;//字長為8位數(shù)據(jù)格式

USART_InitStructure.USART_StopBits = USART_StopBits_1;//一個(gè)停止位

USART_InitStructure.USART_Parity = USART_Parity_No;//無奇偶校驗(yàn)位

USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;//無硬件數(shù)據(jù)流控制

USART_InitStructure.USART_Mode = USART_Mode_Rx | USART_Mode_Tx; //收發(fā)模式

USART_Init(USART2, &USART_InitStructure); //初始化串口2

USART_ITConfig(USART2, USART_IT_RXNE, ENABLE);//開啟串口接受和發(fā)送中斷

USART_Cmd(USART2, ENABLE);

}

void USART2_IRQHandler(void) //??2??????

{

u8 Res,t;

/

if(USART_GetITStatus(USART2, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)

{

Res =USART_ReceiveData(USART2); //讀取接收到的數(shù)據(jù)

if((USART2_RX_STA&0x8000)==0)//接收未完成

{

if(USART2_RX_STA&0x4000)//接收到了0x0d

{

if(Res!=0x0a)USART2_RX_STA=0;//接收錯誤,重新開始

else USART2_RX_STA|=0x8000; //接收完成了

}

else //還沒收到0X0D

{

if(Res==0x0d)USART2_RX_STA|=0x4000;

else

{

USART2_RX_BUF[USART2_RX_STA&0X3FFF]=Res ;

USART2_RX_STA++;

if(USART2_RX_STA>(USART2_REC_LEN-1))USART2_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收

}

}

}

}

}

void USART1_IRQHandler(void) //串口1中斷服務(wù)程序

{

u8 Res;

char result[100];

char hex_string[30];

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntEnter();

#endif

if(USART_GetITStatus(USART1, USART_IT_RXNE) != RESET) //接收中斷(接收到的數(shù)據(jù)必須是0x0d 0x0a結(jié)尾)

{

Res =USART_ReceiveData(USART1); //讀取接收到的數(shù)據(jù)

sprintf(hex_string,"%02X", Res);

//printf("%srn",hex_string);

sscanf(hex_string + 5, "%s", hex_string);

if(!strcmp(hex_string,"03"))

{

GPIO_ResetBits(GPIOB,GPIO_Pin_5);

GPIO_ResetBits(GPIOE,GPIO_Pin_5);

}

if(!strcmp(hex_string,"04"))

{

GPIO_SetBits(GPIOB,GPIO_Pin_5);

GPIO_SetBits(GPIOE,GPIO_Pin_5);

}

if((USART_RX_STA&0x8000)==0)//接收未完成

{

if(USART_RX_STA&0x4000)//接收到了0x0d

{

if(Res!=0x0a)USART_RX_STA=0;//接收錯誤,重新開始

else USART_RX_STA|=0x8000; //接收完成了

}

else //還沒收到0X0D

{

if(Res==0x0d)USART_RX_STA|=0x4000;

else

{

USART_RX_BUF[USART_RX_STA&0X3FFF]=Res ;

USART_RX_STA++;

if(USART_RX_STA>(USART_REC_LEN-1))USART_RX_STA=0;//接收數(shù)據(jù)錯誤,重新開始接收

}

}

}

}

#if SYSTEM_SUPPORT_OS //如果SYSTEM_SUPPORT_OS為真,則需要支持OS.

OSIntExit();

#endif

}

#endif

總結(jié)

兄弟們,太強(qiáng)了,25塊錢能夠抗噪聲的語音識別播報(bào)一體模塊,還要什么自行車。就是喚醒詞不能自己定制,需要聯(lián)系技術(shù)人員幫你定制。(可以遠(yuǎn)程)

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

雷龍發(fā)展公司致力于為客戶提供一站式的離線語音解決方案。我們的服務(wù)涵蓋了多個(gè)領(lǐng)域,包括家電、醫(yī)療器械、安防報(bào)警、汽車電子、多媒體、通信、電話錄音、工業(yè)自動化控制、玩具及互動消費(fèi)類產(chǎn)品等。通過我們的專業(yè)知識和經(jīng)驗(yàn),我們能夠滿足各類產(chǎn)品的語音交互需求,讓用戶享受更加智能、便捷的使用體驗(yàn)。

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請聯(lián)系本站處理。 舉報(bào)投訴
  • STM32
    +關(guān)注

    關(guān)注

    2263

    文章

    10847

    瀏覽量

    353773
  • 智能家居
    +關(guān)注

    關(guān)注

    1925

    文章

    9437

    瀏覽量

    183389
  • 人機(jī)語音
    +關(guān)注

    關(guān)注

    0

    文章

    3

    瀏覽量

    7132
收藏 人收藏

    評論

    相關(guān)推薦

    物聯(lián)網(wǎng)系統(tǒng)中高精度RTK定位方案的實(shí)現(xiàn)_高精度定位模塊

    物聯(lián)網(wǎng)系統(tǒng)中為什么要使用高精度定位模塊 物聯(lián)網(wǎng)系統(tǒng)中使用高精度定位模塊的原因主要體現(xiàn)在以下幾個(gè)方面: 提高定位精度 厘米級
    的頭像 發(fā)表于 09-26 17:53 ?421次閱讀
    物聯(lián)網(wǎng)系統(tǒng)中<b class='flag-5'>高精度</b>RTK定位方案的實(shí)現(xiàn)_<b class='flag-5'>高精度</b>定位<b class='flag-5'>模塊</b>

    北斗高精度智能安全帽|厘米級高精度定位|云端一體化|智能全能

    關(guān)于安全,深圳鼎信小編有話說! 傳統(tǒng)安全帽通常只提供基本的防護(hù)作用,如防止物體打擊、減輕環(huán)境噪聲等。它們通常不具備定位、監(jiān)測和智能化管理等功能。因此,在某些高精度、高安全性的作業(yè)環(huán)境中,傳統(tǒng)安全帽
    的頭像 發(fā)表于 09-24 11:31 ?180次閱讀

    語音模塊——LSYT201B模組(超詳細(xì))

    /1Ck7KPaw-wXAdCluQfvTu4A   提取碼:1022   總結(jié):本節(jié)我們對深圳雷龍語音模塊——LSYT201B模組進(jìn)行了詳細(xì)的介紹,并且利用模塊完成了相關(guān)的實(shí)驗(yàn)測試,
    發(fā)表于 09-20 18:37

    AT372-6P單頻高精度定位模塊datasheet

    單頻RTK模塊是一種基于全球衛(wèi)星導(dǎo)航系統(tǒng)(GNSS)的高精度定位技術(shù)模塊,主要運(yùn)用單頻接收器接收衛(wèi)星信號,并結(jié)合基準(zhǔn)站數(shù)據(jù)進(jìn)行差分計(jì)算,以實(shí)現(xiàn)高精度
    的頭像 發(fā)表于 08-25 15:04 ?255次閱讀
    AT372-6P單頻<b class='flag-5'>高精度</b>定位<b class='flag-5'>模塊</b>datasheet

    TX6212B高精度、低噪聲、CMOS LDO穩(wěn)壓器英文手冊

    TX6212B系列高速低噪聲LDOTX6212B系列是LDO高精度噪聲CMOS 穩(wěn)壓器可應(yīng)用在 電池供電設(shè)備 通訊設(shè)備?移動電話 便攜式游
    發(fā)表于 07-30 12:35 ?0次下載

    語音控制模塊_雷龍發(fā)展

    )來指示傳輸數(shù)據(jù)是否正確   停止位:數(shù)據(jù)傳輸結(jié)束,傳輸線恢復(fù)?!?”狀態(tài) []()   3 雷龍語音模塊原理圖   通過麥克風(fēng)輸入口接收語音,再將語音信號轉(zhuǎn)換為數(shù)字信號,數(shù)字信號通過uart通信傳輸
    發(fā)表于 06-14 17:18

    什么是高精度定位平板?

    高精度定位平板是一種結(jié)合高精度定位技術(shù)和強(qiáng)大計(jì)算能力的平板電腦,廣泛應(yīng)用于測繪、地理信息系統(tǒng)(GIS)、精準(zhǔn)農(nóng)業(yè)、工程建設(shè)和公共安全等領(lǐng)域。其核心特點(diǎn)在于能夠提供亞米級甚至厘米級的定位精度
    的頭像 發(fā)表于 06-12 17:53 ?725次閱讀

    高精度噪聲 3A LDO 穩(wěn)壓器PCD3933數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《高精度噪聲 3A LDO 穩(wěn)壓器PCD3933數(shù)據(jù)手冊.pdf》資料免費(fèi)下載
    發(fā)表于 04-15 14:48 ?0次下載

    高精度噪聲 1.5A LDO 穩(wěn)壓器PCD3932數(shù)據(jù)手冊

    電子發(fā)燒友網(wǎng)站提供《高精度噪聲 1.5A LDO 穩(wěn)壓器PCD3932數(shù)據(jù)手冊.pdf》資料免費(fèi)下載
    發(fā)表于 04-15 14:47 ?0次下載

    3A、低輸入電壓、低噪聲、高精度、低壓降 (LDO) 穩(wěn)壓器TPS7A53B數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《3A、低輸入電壓、低噪聲、高精度、低壓降 (LDO) 穩(wěn)壓器TPS7A53B數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 03-21 11:21 ?0次下載
    3A、低輸入電壓、低<b class='flag-5'>噪聲</b>、<b class='flag-5'>高精度</b>、低壓降 (LDO) 穩(wěn)壓器TPS7A53<b class='flag-5'>B</b>數(shù)據(jù)表

    STM32H743VGT6用來測量秒誤差達(dá)到的最高精度是多少?

    STM32H743VGT6用來測量秒誤差達(dá)到的最高精度是多少
    發(fā)表于 03-14 07:26

    3A、低輸入電壓、低噪聲、高精度、低壓降 (LDO) 穩(wěn)壓器TPS7A53B數(shù)據(jù)表

    電子發(fā)燒友網(wǎng)站提供《3A、低輸入電壓、低噪聲、高精度、低壓降 (LDO) 穩(wěn)壓器TPS7A53B數(shù)據(jù)表.pdf》資料免費(fèi)下載
    發(fā)表于 02-29 09:55 ?1次下載
    3A、低輸入電壓、低<b class='flag-5'>噪聲</b>、<b class='flag-5'>高精度</b>、低壓降 (LDO) 穩(wěn)壓器TPS7A53<b class='flag-5'>B</b>數(shù)據(jù)表

    Aigtek:如何設(shè)計(jì)一個(gè)高精度電壓源

    在現(xiàn)代電子系統(tǒng)中,高精度電壓源是許多應(yīng)用的基礎(chǔ),如精密儀器、測試測量設(shè)備、通信系統(tǒng)等。設(shè)計(jì)一個(gè)高精度電壓源需要深入了解電源電路的原理和各種影響電壓穩(wěn)定性的因素,同時(shí)結(jié)合高性能的元器件和精密的控制技術(shù)
    的頭像 發(fā)表于 02-27 11:40 ?570次閱讀
    Aigtek:如何設(shè)計(jì)一個(gè)<b class='flag-5'>高精度</b>電壓源

    24位高精度ADC MCT1247產(chǎn)品介紹

    MCT1247是24位高精度ADC,該芯片不僅集成了低噪聲PGA、單循環(huán)數(shù)字濾波器、高精度Δ-Σ AD轉(zhuǎn)換器和內(nèi)部振蕩器等模塊,還提供了內(nèi)置低漂移基準(zhǔn)電壓以及兩個(gè)匹配的可編程激勵電流源
    的頭像 發(fā)表于 01-07 10:40 ?1118次閱讀
    24位<b class='flag-5'>高精度</b>ADC MCT1247產(chǎn)品介紹

    高精度測量中運(yùn)放的噪聲對最終測量結(jié)果的具體影響如何通過定量結(jié)算得出?

    高精度測量中運(yùn)放的噪聲對最終測量結(jié)果的具體影響如何通過定量結(jié)算得出? 高精度測量中運(yùn)放的噪聲對最終測量結(jié)果的具體影響是一個(gè)重要的問題。在本文中,我們將詳細(xì)介紹
    的頭像 發(fā)表于 11-09 15:48 ?751次閱讀