基于STM32语音识别的智能家居

server/2025/3/3 21:22:31/

摘 要

人们对生活水平的需求伴随着科技的日新月异不断提升,尤其是在日渐成熟的物联网驱动下,智能家居系统备受大众关注。因此,设计一套效率高,控制简便,成本低廉,以及能为用户提供舒适、环保的家居环境的智能家居系统,将有效推动智能设备行业发展,并为旧楼房智能化改造提供可行方案。本文阐述的是以STM32为主控MCU的语音识别智能家居系统的设计与实现。在该家居系统设计中,使用云平台向ESP8266模块发送指令,系统识别指令后对本地照明、门、家用电器等设备完成远程控制;使用语音识别模块LD3320控制家居设备中照明、窗户、家用电器等设备;通过各类传感器采集家居环境中的温湿度、环境的光照强度、空气质量等环境参数,并在OLED屏幕上展示以及上传到云平台上展示;借助语音播报模块,能够实现用户与设备交流,保证设备确定接收指令。该设计操作简单、价格低廉、方便安装,可以广泛应用于办公场所或家庭,具有较高的实用价值。
关键词:智能家居系统,STM32,语音识别,ESP8266无线通信,语音播报

1 系统方案设计

本作品是基于STM32的语音识别智能家居系统,整个家居系统的控制方式有两种,分别是语音识别控制、远程控制,通过语音和云平台控制家居设备。该系统可以通过传感器实时监测家居环境温度、湿度、光照强度、空气质量等并在屏幕上显示出来,通过无线通信模块可以将数据传输到云平台接收。为了实现本次的设计,我按照任务书上列出的功能进行逐一学习和实践,搜集并对比了现在市面上一些正售卖的相关产品,还阅读了一些关于智能家居系统的期刊文章和硕士论文,了解到这些智能家居系统的设计原理和实现基础,最终确定了两种方案。
方案一:采取AT89C51芯片为主控制中心,语音识别模块采用通信方式为SPI的LD3320语音识别模块类型,WI-FI模块选用ESP01型号的模块来实现,采用LCD1602液晶显示屏展示传感器获得的数据,借助DS18B20温度传感器、GY30光照传感器,使用继电器和舵机模拟家居设备。
方案二:采用STM32F103C8T6芯片作为主控制中心,采用通信方式为串口通信的LD3320语音识别模块,WI-FI模块则选ESP01S型号的模块,信息显示采用OLED显示屏,利用JQ8400-FL语音播报模块实现语音播报功能,使用DHT11温湿度传感器监测室内温湿度,BH1750光照传感器监测光照强度,MQ135和MQ9气体传感器监测室内气体情况,同时加入继电器和舵机作为模拟家居设备的触发。经过模块选择、技术实现难度、片上资源的多方面衡量,同时综合比较了价格上的优势后,最终决定采用方案二来实现本次的设计。理由如下:
方案一使用的主控芯片为51单片机,而方案二使用的主控芯片是STM32。51单片机相对较传统,而且使用简单易上手,是设计简单性能的电路的最佳选择,但有一个相对明显的缺点,片上资源不多。相较而言,STM32芯片的功能更加强大,它以高性能、低成本、低功耗著称,运算速度也显著更快。由于本系统的设计涉及到多个模块和电路,如设计中需要占用三个串口、多个I²C复用通道,设计要求的功能也比较繁琐,因此选用STM32芯片来实现更加合适。采用方案二中的传感器相较于方案一可以简化电路设计,节省引脚资源。最后,相较于SPI通信方式的LD3320语音识别模块,串口通信的LD3320语音识别模块编程更加简洁,两者在测试过程中通信效果也几乎相同,而且后者成本更低。ESP01S是一个目前物联网设备市场上很广泛使用的一个型号,它的技术相对成熟、体型小、信号接收效果良好,有利于推动该设计在实际生产、销售发展。结合上述的解释和现实生活中的情况,方案二中的设计明显更加简便,性价比更高,智能家居系统实现可行性更高,因此本系统的设计是采用方案二的设计方案。
硬件需求分析:
(1)基本功能
主控电路能够实现数传感器数据采集、家居设备控制等硬件电路的全面控制;
主控 MCU 能够对数据展示进行储存;
通过LD3320语音识别模块对家居系统进行控制;
主控 MCU能够在接收控制指令后通过JQ8400进行语音播报;
通过ESP8266无线通信模块可对家居系统进行远程监测和远程控制。
(2)主要性能指标
语音识别模块(型号:LDV7):
①工作电压(V):5V或3.3V;
②省电模式耗电:1uA ;
③内置含 mono 16-bit A/D 单声道模数转换,本设计中咪头使用单声道模数转换;
④内置含 stereo 16-bit D/A 双声道数模转换,在本设计中不使用;
⑤内置 20mW 双声道耳机放大器输出,本设计采取语音播报模块替代;
⑥内置 550mW 单声道扬声器放大器输出,本设计中不采用该输出方式;
⑦可识别所有中文词条;
⑧无识别词条数量限制,词条数根据单片机的容量而定,本设计限制50条;
⑨支持并行接口或者 SPI 接口;
语音识别非常灵敏,1米以内识别率可达85%;
WIFI无线通信模块(型号:ESP01S):
①体积小,支持三种协议802.11b/g/n WI-FI SOC模块;
②使用32位低功率CPU,将其单独设计可以作为主控CPU;
③支持STA/AP/AP+STA三种工作模式;
④串口速率:支持110 ~ 4608000 bps ,默认为115200 bps,最高为4Mbps;
⑤内嵌LWIP协议栈;
⑥内含10bit高精度ADC模数转换通道;
⑦供电电压3.0V ~ 3.6V,供电电流 >500mA,运用时可以考虑设计独立电源供电;
⑧正常工作温度:-20 ℃ ~ 70 ℃;
⑨天线形式:板载PCB天线;
⑩支持接口:UART/GPIO/PWM;
(3)其它非功能性指标
可用性:可安装在家居、办公室等地方,显示界面简洁清晰,美观大方,能让除了管理员外的任何用户不必借助操作手册均可使用。
稳定性:稳定性良好,系统与云平台需要实时建立长连接,数据也不容易丢失。
实用性:实用性高,成本低,每个家庭均可安装实现。
本设计研究基于stm32语音识别智能家居系统,该家居系统是以STM32作为主控制芯片配合各种模块电路组成语音识别智能家居的设计。外部集成的模块有ESP8266 WI-FI模块、ds1302时钟模块、人声非特定LD3320 语音识别模块、OLED显示屏、DHT11温湿度传感器、BH1750光照传感器、MQ9和MQ135气体监测传感器、JQ8400语音播报模块、雨滴传感板。这几个模块分别实现系统的基础功能需求,相互连接实现以STM32F103C8T6为核心的系统,各个模块通过串口收发、通用引脚、SPI、IIC等通讯方式收发数据到主控,主控STM32负责接收和处理传感器的数据,再根据语音识别、远程控制获取指令信号完成家居设备控制,如此循环构建一个闭环系统。用户可以依据这些模块的功能随时随地对家中的各种家居设备进行监控。
从家居系统的控制方式上看,该系统可以分为本地语音控制和云端远程控制。在本地系统中,可以通过LD3320语音识别模块配合继电器和舵机完成对部分家用电器设备的控制搭配JQ8400完成语音识别接收后的播报。远程控制是指通过使用onenet平台使用MQTT通信协议实现将指令通过ESP8266 无线通信模块串口发送到主控stm32完成进行处理搭配舵机和继电器,实现对家居设备的控制。当用户返回家前可以通过云端远程提早打开各种电器,通过ESP8266串口发送后,主控接收后打开相关的继电器或舵机实现远程操控;当回到家中,可以直接通过语音开启或关闭家居设备,打破传统一对一红外遥控器的桎梏,大大提高家居设备控制的便捷性。此外,通过OLED屏幕和手机云端可以实时查看家中的各种环境情况如:温度、湿度、光照度、室内环境气体情况等等。通过传感器实时监测家中情况,也可以在家中出现如中暑温度、可燃气体泄漏、空气浑浊情况下,发出警报并且系统自动调节。
基于stm32语音识别智能家居系统最先需要解决的问题是各个模块的功能性问题,再各个模块相互组合配套使用,最后通过软件不断调试优化来实现整个基于stm32语音识别智能家居系统,提高智能程度和实用程度。系统总体框图如图2.1所示。
在这里插入图片描述

图 2.1 硬件系统总体框图

2 语音智能家居系统各模块电路

2.1 系统主控设计

本方案采用最小系统主控模块,主控MCU的芯片为ST公司的STM32F103系列的STM32F103C8T6芯片。这是一款以频率为72MHZ的32位ARM® Cortex-M3 为内核的微处理器,其内部闪存具有512K的容量,内存具有64K的容量,其可直接访问4MB地址,数据总线、地址总线均为32位。STM32芯片属于哈佛架构,哈佛架构属于并行体系结构,在这种架构下程序指令和数据将被分别存储不同的存储空间中,每个存储器能够独立编址、可支持程序独立访问,程序指令执行时还可以预先读取下一条指令。
STM32F103C8T6集合了非常丰富的内核和片上资源如:
数据总线D-bus、系统总线S-bus、2个DMA通用控制器DMA1和DMA2(DMA1拥有 7 个通道,DMA2拥有 5 个通道);
拥有37个通用输入输出接口(I/O)引脚,定时器(高级控制定时器TIM1、通用定时器 TIM2、TIM3、TIM4、独立看门狗定时器 IWDG、窗口看门狗定时器 WWDG、系统嘀嗒定时器 SysTick、内部RTC时钟)、PWM、3个12bit的ADC(16个外部通道和2个内部通道);2个I²C总线接口(I²C1、I²C2)、3个通用同步/异步收发器(USART、USART2、USART3)接口、2个SPI串行外设接口接口(SPI1、SPI2)、1个CAN控制器区域网络接口、1个USB2.0通用串行总线全速接口。
本项目中MCU需要用到三个串口进行通信、两个I²C总线接口,其中一个串口用于LD3320语音识别模块的调试、一个串口用于WIFI无线通信模块的调试、一个串口用于JQ8400模块语音播报,I²C总线接口用于OLED屏幕显示,I²C总线接口用于BH1750光照传感器。鉴于STM32芯片拥有丰富的片上资源和强大的处理能力,能够满足我们的各种功能需求,即使控制复杂的电路也能游刃有余,在同等功能类型的MCU中脱颖而出,因此本设计选用STM32F103C8T6作为硬件电路的主控制器。STM32F103C8T6实物图如图3.1 所示。
在这里插入图片描述

图3.1 STM32F103C8T6实物图
下面将介绍主控STM32中四个必须的外围电路:复位电路、调试电路、启动模式选择电路、电源电路。
复位电路:该设计使用的是按键复位的方式,其工作原理是复位脚是由低电平触发的,通过10k的电阻和100nF的电容将该引脚上拉至高电平,复位按键接地,当按下按键时,复位脚接地,接地之后复位脚的电平迅速将由高电平转变为低电平,进而产生一个复位指示信号,从而使系统复位。如图3.2 所示:
在这里插入图片描述

3 智能家居的软件部分设计

3.1.系统主流程图及程序设计

在本次设计的电路系统中,STM32单片机是作为控制中心,主要向OLED屏幕显示模块、LD3320语音识别模块、ESP8266-01sWI-FI通信模块、JQ8400语音播报模块、MQ9和M135传感器、BH1350光照传感器等模块发送命令和写入数据,同时上述传感器或模块采集的数据也会通过串口、通用IO口、I²C等通信方式传送给STM32单片机。本设计将采用ds1302记录时间通过SPI通信方式传送到OLED显示屏幕显示,定时中断刷新屏幕内容。
软件的设计流程如下:首先通过LD3320语音识别模块实现语音指令的识别和匹配功能,语音识别成功后识别结果将被通过串口1传送到STM32等待处理。待主控STM32接收完毕经过判断识别结果后,发出相应操作指令控制具体的家居设备。此外,传感器、时钟等家居设备会将采集数据传送到主控STM32,并通过OLED屏幕定时刷新展示和使用串口3上传到ONENET云平台。ESP8266模块通过接入手机热点从而使设备联网进而连接云平台,通过MQTT通信方式完成设备与云端的数据上传与指令下发。
在本章的介绍中,首先整理程序的流程和逻辑关系,这里的逻辑关系主要通过绘制流程图来呈现;然后根据各部分的流程图和逻辑关系逐步编写程序并封装起来;再根据主流程逻辑,调用各个部分代码,填充主程序框架。本设计所用的开发软件为keil5和keil4,选择C语言作为编程语言。为了方便编写代码和后期模块化修改,本次设计将采用模块化编程方式,依照不同的功能性建立多个c文件和h文件,将它们放置到同一个工程文件中,在主程序代码编辑完毕后进行连接、编译,最后生成后缀名为.hex的可执行文件,再通过烧录软件烧写到LD3320模块中;而STM32则可以直接在keil5中通过下载器ST-link直接烧录。下面将主要介绍ESP8266-01S模块和LD3320模块的部分关键代码。

4 设备调试与优化方案

4.1.各个模块的调试

调试前准备好的调试工具包括SSCOM串口助手、USB转TTL驱动模块、杜邦线、ESP8266模块、STM32F103C8T6最小系统板。首先将USB转TTL的USB端接在电脑上,而TTL端与STM32的Usart2通过杜邦线连接,在串口调试助手上将波特率设置为默认值115200。另外ESP8266模块通过杜邦线与STM32的Usart3连接。最后设计测试时,设计在联网的过程中,会通过串口2打印联网时候的参数信息,之后ONENET云平台上会显示设备在线。如图5.1和图5.2所示。
在这里插入图片描述

图5.1 onenet设备在线图
在这里插入图片描述

图5.2 设备在线上传数据图

4.2.系统整体调试

在Keil5软件平台上编译主控程序,编译完成以后利用ST-LINK将代码下载到STM32芯片中。将硬件模块焊接搭建完毕后,分别对系统的每个模块进行了软件和硬件的调试后便开始对整个系统进行软硬件联调了。首先开启手机热点,通过充电宝为设计接入5V的电源,智能家居处于上电状态,并等待系统初始化。上电后观察到ESP8266无线通信模块指示灯开始闪烁,OLED屏幕亮起,此时屏幕上显示的HUM、TEMP、LIGHT数据均为0,待传感器预热完成后,显示屏上的数据更新当前的环境温度、湿度、光照度。如图5.4所示。
在这里插入图片描述

4.3.遇到问题及解决方案

4.3.1.硬件设计遇到的问题及解决方法

(1)由于单片机需要连接比较多的电路,从而占用较多的单片机引脚,导致连接模块及继电器的引脚不够。
解决方法:首先经过查找芯片使用手册,分析各个引脚的复用功能,如串口1为PA9、PA10的复用;I²C中SCL、SDA分别是PB6、PB7的复用。其次,更改部分元器件的通信方式,相较于串口通信和I²C通信,SPI通信需要占用更多的引脚,如将SPI型的LD3320更改成串口通信的LD3320;将SPI型的OLED显示屏更改成I²C型。
(2)设计中电路使用的元器件、模块数目量较多,单面制板绘制PCB过于复杂。
解决方法:通过双面板绘制PCB,将主要元器件和模块放在TopLayer(顶层),而将线路连接上与顶层电路有出现交叉的部分和继电器选择放在BottomLayer(底层)。由于制作手工双面板经常无法将顶、底层对准,故选择通过工业板制作双面板,保持了板面的美观性、电路的良好导通性。
(3)设计中低电平触发继电器无法控制,一直保持闭合状态。
解决方法:由于低电平继电器需要2mA电流才能驱动,而通用IO引脚在推挽输出时驱动能力不足,需要外接三极管放大才能驱动继电器。此外,因为IO引脚在开漏输出时,做20mA内电流型的驱动。
(4)LD3320语音识别模块远距离识别率不高,识别关键词容易混淆,导致识别结果发生错误,从而影响语音识
别控制的效果。解决方法:通过LD3320语音识别模块的介绍,我们知道模块在刚上电的时候,时候设备会受电流噪音干扰,所
以语音模块在被唤醒以后,稍微等待一段时间再说出口令语。其次,模块中所使用的咪头是52db咪头,52db咪头抗噪性相对没那么好,可以更换成55db咪头。关于关键词容易混淆问题,由于语音识别是根据关键词列表的中文拼音的模板匹配出最佳结果输出,所以关键词列表的中文拼音应该避免相似。
(5)发光二极管连接到主控STM32的引脚PA15,在配置通用IO后,仍然无法点亮该发光二极管,并且在万用表测量下发现该引脚一直保持高电平状态。
解决方法:查阅芯片资料,发现如果主控STM32F103系列的引脚PA15控制外设,不管如何配置IO口,始终保持输出高电平。这是由于PA15引脚是作为JTDI的仿真调试引脚,必须通过 GPIO_PinRemapConfig
(GPIO_Remap_SWJ_JTAGDisable,ENABLE);释放PA15,才能配置PA15,使它控制外设,还必须把PA15的配置函数置于初始化主程序的末端。像引脚PA15被用于JTAG或者SWD仿真器的调试接口还有引脚PB3、PB4、PA13、PA14。
(6)5VDC直流插座供电存在干扰,导致喇叭会出现微弱的电流音,稍微影响语音正常播报。
解决方法:其一,可以通过主控STM32的micro USB供电,主控内部存在线性稳压芯片,但经过主控内部后存在0.01-0.1V的压降。其二,可以在DC插座并联大小电容,如并联0.01uf和10uf电容作为滤波电容,过滤过高和过低频率信号,减少干扰。
5.3.2.调试过程遇到的问题及解决方法
(1)调试过程中由于电源不稳定或者手机热点信号不好会导致系统不工作,有时候会遇到ESP8266无线通信模块上传数据收不到的情况。解决方法:系统电压或信号稳定稳定之后,复位STM32后,系统会重新连接手机热点,重新发送数据。
(2)STM32在ADC转换后,通过STM32主程序中通过指令读取气体传感器采集的数据会浪费CPU资源。
解决方法:通过STM32的使用手册可知,模数转换之后可以通过直接访问存储器获取数据。第一步,确定STM32使用哪个ADCx 、哪个channel ,明确ADC外设的地址。第二步,确定外设的时钟源和ADC采集方式。第三步,配置ADC和DMA。
(3)下载程序代码的时候Keil5软件弹出了没有目标连接的问题。
解决方法:出现该问题是因为Keil5软件的下载没有提前配置好下载模式,下载模式默认选择的是SW模式,选择ST-LINK Debugger,FLASH Download选择device size为128K,并使用杜邦线将下载器ST-LINK V2的SWCLK、SWDIOSTM32的OCLK、DIO连接。
(4)OLED屏幕刷新在主程序完成,会占用CPU资源,导致系统处理数据缓慢,进而引起传感器收集数据在OLED显示屏幕刷新缓慢。
解决方法:通过设置定时器中断刷新OLED屏幕数据,设置TIM3每隔0.5S进行一次定时中断,中断服务函数为刷新OLED屏幕数据。此外,代码编写中传感器数据读取都是在联网后才进行,可以适当调整程序顺序,将传感器数据采集放置到主程序循环体靠前位置。
(5)ONENET云平台调试过程中设备间隔发送心跳包,但是一段时间设备就会掉线。
解决方法:考虑到心跳包的作用就是确保平台识别设备一直登陆在线,所以如果设备保持不断向云平台上传数据可以保持平台识别设备一直登陆在线,从而代替心跳包的功能。

5 总结与展望

本系统是基于STM32的语音识别智能家居系统,本文开篇介绍了智能家居系统的背景情况和国内外研究现状,从而引出本课题,接着对本系统进行需求分析和提出总体方案设计,其中穿插了对于WIFI无线通信技术和语音识别技术的介绍,详细地将该系统的硬件电路设计和软件设计逐一阐述,最后是各模块和系统整体的调试过程,并列举了硬件设计、软件设计和软硬件联调过程中遇到的问题以及采用的解决方法。
在毕设摸索的过程中,自己开始摸索总结出设计过程:
1、先查询主控的芯片手册,了解各个管脚复用方式。
2、根据主控引脚的复用方式、元器件通信方式初步设计出电路图。
3、根据电路图将每个功能模块独立编写代码。
4、根据逻辑,把各个独立模块的代码在主函数中整合。
5、最后结合软硬件联调,结合文献资料,使用万用表示波器等仪器进行硬件改进、软件修改。
经过了一段时间的努力,从一开始确定毕业设计的题目到后面完成系统设计和系统的整体调试,虽然说这次的毕业设计基本实现了预期定下的目标功能,但仍然存在着很多的不足,比如语音识别的识别精准度在目前基础上难以进一步提高,温湿度等数据未实现语音播报功能,还有由于时间、成本和自身知识储备量不够的原因,并不能将这次的智能家居系统做成一个能符合市场上销售的产品,它仍然存在着很大优化的空间,比如说本系统的显示屏使用的是0.96寸OLED显示器,这是比较基础的显示模块,显示界面比较小,不够将传感器的数据完全展示,可以进一步优化为TFT触摸屏,使操作更加简便和多样化;核心处理器也可以使用市面上更先进、功能更完备的ARM处理器,提高系统的整体运输速率;上位机云平台的功能也可以进一步完善,满足客户自定义连接家居设备的需求,提高智能家居系统的兼容性和互动性;语音识别也可以不局限于识别50条关键词,可尝试接入百度AI开放平台,增加语音识别的关键词数量和识别精准度。相信伴随着科学技术的迅猛发展,未来的智能家居系统会更加智能化。


http://www.ppmy.cn/server/171811.html

相关文章

DeepSeek 1.5B蒸馏模型的J6部署(Llama方式)

前言 DeepSeek 是一款基于人工智能的搜索引擎,旨在提升用户的搜索体验。它利用先进的自然语言处理技术,通过理解查询的上下文和意图,为用户提供更精确、相关的搜索结果。与传统的搜索引擎不同,DeepSeek 不仅仅依赖于关键词匹配&a…

设计模式-单例、策略、代理、建造、工厂

文章目录 单例设计模式策略模式代理设计模式建造者模式工厂设计模式 单例设计模式 单例设计模式保证全局只有一个实例,通常用于资源的共享,比如 spring 中的 bean 默认 就是单例的,所有类注入的对象都是同一个。 在类中绑定一个静态的资源也…

MDC + TraceId分布式链路追踪

一、核心概念深度解析 1.1 TraceId 的设计哲学 实现意义: 请求全生命周期追踪:在分布式系统中,一个用户请求可能跨越多个服务、线程和中间件。TraceId 就像快递单号,能够串联整个请求链路故障定位效率提升:当系统出…

JSON-to-Excel v2.0.0发布,可以在Excel内部,把JSON转换成Excel格式,嵌套的JSON也能转

本文是JSON-to-Excel插件的官方文档 https://json-to-excel.wtsolutions.cn 简化浓缩翻译的中文版,仅供参考。详细的还请查看官方文档。 插件简介 JSON-to-Excel是一款强大的Microsoft Excel插件,专门用于将JSON数据转换为Excel表格格式。这款插件能够…

【C语言】最大公约数与最小公倍数

相信你是最棒哒!!! 目录 一、是什么? 最大公约数(GCD) 最小公倍数(LCM) 二、怎么求? 1.引用函数 2.直接求 总结 提示:以下是本篇文章正文内容,下…

记录MFC联合halcon界面显示开发

要将 Halcon 的测试效果显示在 MFC 程序的界面中,你可以通过以下步骤实现。基本思路是在 MFC 窗口中创建一个合适的区域来显示 Halcon 处理后的图像和图形,通常可以使用 CStatic 控件作为显示区域,并通过 Halcon 的 C 接口(Halcon…

ESP32-S3 42引脚 语音控制模块、设备运转展示 GOOUUU TECH 果云科技S3-N16R8 控制舵机 LED开关 直流电机

最近还是想玩了下esp32,基于原来的开发板,看见佬做了一个语音识别的项目,通过这个语音识别可以控制LED开关和直流电机这些,详情可见视频(推荐)具体硬件就在下方。 信泰微】ESP32-S3 42引脚 语音控制模块、…

从零搭建微服务项目Pro(第1-2章——Quartz实现定时任务模块优化)

前言: 在企业项目中,往往有定时任务发布的需求,比如每天晚9点将今日数据备份一次,或每月一号将上月的销售数据邮件发送给对应的工作人员。显然这些操作不可能是人工到时间点调用一次接口,需要编写专门的模块完成任务的…