stm32利用语音识别与播报智能控制led灯

最新更新时间:2022-09-06来源: csdn关键字:stm32  语音识别  智能控制  led灯 手机看文章 扫描二维码
随时随地手机看文章

上次写了一个语音识别的文章,但是那个模块是用串口进行通信的。这次要讲的是另一种识别与播报模块,这种模块相对于上次那种,功能更多,当然价格也更贵。这种识别模块与播报模块都是利用IIC进行传输的,所以本次利用了stm32f103c8t6控制板上面的两个IIC分别是PB6、PB7以及PB10、PB11。本文章主要实现的功能是: 根据说出的指令让识别模块识别到相应的词语后,做出相应的动作,并且利用播报模块说出对应动作是否完成。在这里我只是简单的控制led灯,当然你也可以控制其他东西,如家用电器等等。


其中语音识别模块有三种模式,循环模式:模块时刻处于语音识别状态;口令模式:当检测到口令时候进行语音识别;按键模式:当按下按键后处于语音识别模式,模块没有设置板载按键,通过主控板设置按键检测程序,检测到按键后通过 I2C 发送按键模式启动命令,该按键模式可以由自己定义任意的按键。


而语音模板模块支持任意中文、英文文本的合成,可以采用 GB2312、GBK、BIG5 和UNICODE 四种编码方式。每次合成的文本量最多可达 4K 字节。模块对文本进行分析,对常见的数字、号码、时间、日期、度量衡符号等格式的文本,芯片能够根据内置的文本匹配规则进行正确的识别和处理;对一般多音字也可以依据其语境正确判断读法;另外针对同时有中文和英文的文本,可实现中英文混读。支持多种控制命令如合成文本、停止合成、暂停合成、恢复合成、状态查询等。可设置对应字母的播报方式,如字母发音、单词发音等,还可以通过设置通过汉语拼音进行汉语播报。内置多个发音人物,可以通过设置选择对应的发音人进行语音播放,语音播报的语速、语调、音量等均可以设置。模块还有其他如数字符号等的特殊播报设置。


接下来分别给出两个模块的图片及链接

语音识别模块(本质是LD3320)

语音播报模块

本文章是以stm32为主来控制这两个模块,在文章最下面的资源中包含了microbit、arduino、树莓派、51、32、jetson nano等例程都有。

上面两个模块的接线也相对比较简单,具体如下:

语音识别模块 -----------语音合成播报模块

IIC1 ------------------------IIC2

VCC->单片机5V --------VCC->单片机5V

SCL->单片机PB6 ------SCL->单片机PB10

SDA->单片机PB7 ------SDA->单片机PB11

GND->单片机GND ----GND->单片机GND

下面附上效果视频:

stm32语音识别与播报智能控制led灯


接在再附上主程序:


#include "stm32f10x.h"

#include "bsp_i2c.h"

#include "bsp_usart1.h"

#include  "led.h"

/*

语音识别模块 语音合成播报模块

IIC1 IIC2

VCC->单片机5V VCC->单片机5V

SCL->单片机PB6 SCL->单片机PB10

SDA->单片机PB7 SDA->单片机PB11

GND->单片机GND GND->单片机GND

*/


int main(void)

{

u8 result = 0xff;

LED_Init();   //初始化与LED连接的硬件接口

//I2C初始化

I2C_Bus_Init();

NVIC_Configuration();

USARTx_Config();

#if 1

I2C_ByteWrite(ASR_CLEAR_ADDR,0x40);//清除掉电保存区,录入前需要清除掉电保存区

LD3320_delay(150000);//flash擦除时间较长,需要较长的延时

I2C_ByteWrite(ASR_MODE_ADDR,0x01);//设置检测模式;

AsrAddWords(0,"xiao ya");

AsrAddWords(4,"kai deng");   

    AsrAddWords(5,"guan deng");


#endif

I2C_ByteWrite(ASR_REC_GAIN,0x45);  //识别的灵敏

RGB_Set(255,255,255);

LD3320_delay(10000);//flash擦除时间较长,需要较长的延时

RGB_Set(0,0,0);

SetVolume(10);

SetReader(Reader_XiaoYan);

while(1)

{

I2C_BufferRead(ASR_RESULT,&result,1);

printf("result = %dn",result);

if(result==0)

{

speech_text("[x1]sound204",GB2312);

while(GetChipStatus() != ChipStatus_Idle)

{

  delay(50);

}

}

if(result==4)

{

GPIO_ResetBits(GPIOA,GPIO_Pin_1);   //给PA1置0

speech_text("灯已经打开",GB2312);

while(GetChipStatus() != ChipStatus_Idle)

{

  delay(50);

}

}

if(result==5)

{

GPIO_SetBits(GPIOA,GPIO_Pin_1);   //给PA1置1

speech_text("灯已经关闭",GB2312);

while(GetChipStatus() != ChipStatus_Idle)

{

  delay(50);

}

}

LD3320_delay(10000);

}

}


/*********************************************END OF FILE**********************/


关键字:stm32  语音识别  智能控制  led灯 编辑:什么鱼 引用地址:stm32利用语音识别与播报智能控制led灯

上一篇:利用stm32+app inventor与esp8266通信
下一篇:stm32利用oled显示屏与按键进行PID参数调节实现人机交互

推荐阅读

STM32】DMA基本原理、寄存器、库函数(1)
DMA的基本介绍01 DMA的基本定义DMA,全称Direct Memory Access,即直接存储器访问。DMA传输将数据从一个地址空间复制到另一个地址空间,提供在外设和存储器之间或者存储器和存储器之间的高速数据传输。当CPU初始化这个传输动作,传输动作本身是由DMA控制器来实现和完成的。DMA传输方式无需CPU直接控制传输,也没有中断处理方式那样保留现场和恢复现场过程,通过硬件为RAM和IO设备开辟一条直接传输数据的通道,使得CPU的效率大大提高。02 DMA的主要特征每个通道都直接连接专用的硬件DMA请求,每个通道都同样支持软件触发。这些功能通过软件来配置;在同一个DMA模块上,多个请求间的优先权可以通过软件编程设置(共有四
发表于 2023-02-03
STM32】DMA基本原理、寄存器、库函数(2)
05 DMA中断状态寄存器(DMA_ISR)作用:可以获取DMA传输的状态标志。注意:此寄存器为只读寄存器,所以在这些位被置位后只能通过其他的操作来清除。06 DMA中断标志清除寄存器(DMA_IFCR)作用:通过往寄存器内写1来清除DMA_ISR被置位的位。DMA通道配置过程下面是配置DMA通道x的过程(x代表通道号):在DMA_CPARx寄存器中设置外设寄存器的地址。发生外设数据传输请求时,这个地址将是数据传输的源或目标;在DMA_CMARx寄存器中设置数据存储器的地址。发生外设数据传输请求时,传输的数据将从这个地址读出或写入这个地址;在DMA_CNDTRx寄存器中设置要传输的数据量。在每个数据传输后,这个数值递减;在DMA_C
发表于 2023-02-03
工程师笔记|带有空片检测功能的STM32需注意的GPIO设计
引言从STM32F0部分型号开始,比如STM32F04x和STM32F09x,STM32越来越多的型号具有了空片检测(Empty Check)功能。以前,STM32的启动由BOOT0和BOOT1来决定,在引入了空片检测功能之后,则在BOOT0=0的情况下,还需要分两种情况:一是内部已经存在代码,则从用户存储区启动;二是如果是空片,则从系统存储区启动,执行内部Bootloader。它带来什么好处呢?客户如果是空片上板,无需对BOOT0引脚进行跳线,就可以直接使用内部Bootloader进行串口或其他通讯口进行代码烧录了,可以说非常地方便。但是,这同时为GPIO的设计带来一个非常大的风险,在电路设计时需要引起注意,做好相应的措施。问题起
发表于 2023-02-02
142 条 STM32 学习笔记(必收藏)
1、AHB系统总线分为APB1(36MHz)和APB2(72MHz),其中2>1,意思是APB2接高速设备。2、Stm32f10x.h相当于reg52.h(里面有基本的位操作定义),另一个为stm32f10x_conf.h专门控制外围器件的配置,也就是开关头文件的作用3、HSE Osc(High Speed External Oscillator)高速外部晶振,一般为8MHz,HSI RC(High Speed InternalRC)高速内部RC,8MHz4、LSE Osc(Low Speed External Oscillator)低速外部晶振,一般为32.768KHz,LSI RC(Low Speed InternalRC
发表于 2023-02-02
基于51单片机实现旋转LED灯报警(Proteus仿真)
具体功能实现:当按下开关时,蜂鸣器报警,同时LED旋转式亮灯。使用器件:AT89C51、按键、电阻、蜂鸣器(SOUNDER)、8只LED灯Proteus仿真原理图:仿真:知识介绍:Proteus布线为了让整个原理图看上去简洁明了,我们对元器件的导线进行标号,而不是直接和芯片相连。定时中断系统简图定时器资源定时器个数:3个(T0,T1,T2),T0和T1与传统的51单片机兼容,T2是此型号单片机增加的资源。(T0和T1的操作方式是所有51单片机共有的)中断号:外部中断0 interrupt 0定时器0 interrupt 1外部中断1 interrupt 2定时器中断1 interrupt 3串口中断 interrupt 4中断系统执
发表于 2023-02-01
工程师笔记|如何开发与存储位置无关的 STM32 应用
1、前言最近有客户询问,能否使用 STM32CubeIDE 在编译时通过设置某个编译选项,让STM32 应用与存储位置无关。这样的优势是能使同一个固件被烧在 STM32 Flash 里的不同位置, 而在系统 Bootloader 里只需要跳到相应的位置就可以正常执行固件代码。客户希望STM32 代码从 Flash 里执行,不复制到 RAM 里;客户希望是一个完整的映像,而不仅仅是其中某个函数做到了位置无关。2、分析在嵌入式场景下,不一定有操作系统。即使有操作系统,一般也是 RTOS。一般 RTOS没有一个通用的程序加载器。因此,存储位置无关的需求,在这时可以说无关紧要。但是,如果客户需要进行在线固件更新,例如 IoT 应用的固件升级
发表于 2023-02-01
小广播
设计资源 培训 开发板 精华推荐

何立民专栏 单片机及嵌入式宝典

北京航空航天大学教授,20余年来致力于单片机与嵌入式系统推广工作。

换一换 更多 相关热搜器件
电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2023 EEWORLD.com.cn, Inc. All rights reserved