百度360必应搜狗淘宝本站头条
当前位置:网站首页 > 技术分析 > 正文

毕业设计|语音识别智能家居制作

liebian365 2025-03-05 17:47 14 浏览 0 评论

智能家居类项目在毕业设计中最为常见,虽然已经到了“烂大街”的程度,但摆正心态,可以加入很多创新点,依然能学到更多知识。

本次分享的项目是Cheng小白毕设,代码和论文都分享出来了,希望可以给正在做毕设的同学一些帮助。项目相关设计资料可以在“达尔闻说”回复:STM32语音识别智能家居,获取。以下是硬件、软件部分内容:

系统功能

本语音控制的智能家居系统可以实现本地在线语音识别,控制家电;通过手机语音远程控制家电;手机可以远程实时获取家内传感器的数据。

1)单片机实现音频信息的采集,播放内置音频信息,获取温湿度传感器数据和光照度传感器数据,通过显示屏显示传感器数据和语音转文字后的信息。

2)网络传输模块实现网络传输,与MQTT Server和语音识别API分别建立TCP连接,通过发布和订阅MQTT的Topic主题进行数据的上传与下行。

3)单片机将采集的音频信息进行base64编码,将编码后的音频数据和TOKEN以及一些必要参数整合成JSON格式整合到HTTP BODY中,单片机通过带流控位的串口与网络传输模块进行数据传输。

4)网络传输模块将接收到串口数据通过TCP通信同步上传到百度语音识别API,传输结束后,等待TCP Server返回HTTP 响应报文,将报文BODY字段数据进行裁剪,只要其中JSON格式的语音识别信息(UTF-8编码),将语音识别信息发送到单片机,单片机通过UTF-8转GBK算法进行最终的语义控制, 并进行对应语音播报。

5)手机APP端利用语音识别API接口进行语音识别,与MQTT Server端建立TCP连接,通过MQTT协议订阅和发布,将转换后语音信息发布到订阅设备,单片机处理收到的订阅信息。

6)单片机将采集到的传感器数据发布到MQTT Server端,APP端可以通过订阅来实时更新传感器数据。

硬件组成

系统硬件主要由九部分组成,分别是单片机、网络传输模块、立体声编解码模块、IO扩展模块、温湿度传感器、光照度传感器与液晶显示屏、按键及LED灯组组成,系统的总体框图如图:

单片机选用了ST公司的STM32F407VET6芯片,通过内部的USART接口与ESP8266 NodeMCU通信,通过丰富的外设功能获取传感器的各项数据;

网络传输模块采用乐鑫科技的ESP8266单片机通过STA模式连路由器链入到Internet,连接百度语音识别API接口进行语音识别,通过MQTT协议连接百度天工物接入平台发送传感器数据;手机端APP通过访问MQTT Server实时更新内部显示传感器数据;

立体声编解码模块采用深圳普中科技有限公司的WM8978模块自带MIC头可以直接采集音频信息;

IO扩展模块采用PCF8574,可以通过I2C引脚最多控制8个PCF8574模块也就是说可以控制64个IO口;

温湿度传感器采用DHT22进行温湿度数据的采集,采集的温度精度为±0.5℃,湿度精度为±2%RH;光照度传感器采用BH1750FVI可以获取0~65535单位为lx光照值数据。

系统软件

系统的软件框图:

单片机将传感器数据和语音识别包通过带硬件流控的USART串口与网络传输模块进行数据的交互;网络传输模块通过Wi-Fi的STA模式连接到路由器,通过向语音识别API发送HTTP数据包获取语音转文字数据报,通过向MQTT Server发送订阅与发布消息,进行传感器数据的上传与手机控制命令的下传;手机APP通过与MQTT Server 订阅和发布消息,获取传感器数据后实时显示,通过手机APP语音识别,识别成功后将识别内容发布到MQTT Server,等待MQTT Server转发消息给订阅的设备。

单片机的程序设计、云端设备参数设置、wifi传输模块软件设计、手机APP程序设计在分享的论文与代码中,可以查看到更多详细的介绍。

需要改进的地方

1)上面项目的控制语音识别开始和结束,都是通过按键进行控制的,缺少了唤醒词的功能,希望之后可以通过采用DTW(Dynamic Time Warping,动态时间归整)算法,进行唤醒词识别。

2)目前只能对获取的语音进行简单的操控,无法进行语音的合成,只能依靠SD卡内存放的音频文件,之后可以将百度语音合成技术也加入到系统中,并将内部命令改成数据库命令,通过海量的知识丰富当前的语音操控。

3)系统只有一个终端设备,之后可以增加节点设备,从而实现一主机控制多从设备。

【学习交流群:197416462】

相关推荐

python如何对字符串进行操作(python如何对字符串进行操作输出)

1.字符串的创建可通过直接赋值、构造或转义字符来创建字符串。#普通字符串s="Hello,World!"#多行字符串(使用三引号)multi_line_str='''Thisi...

Excel表格中11个常用的字符串函数

今天和大家聊聊常用的字符串函数,在不同的条件下,如何选择字符串函数很关键。下面我为大家列举了11个关于字符串的函数公式。一、EXACT(两个字符串进行结果比较)比较两个字符串是否完全相同(这里是要区分...

详细介绍一下Python中如何对字符串进行操作?

在Python中,字符串做为一种常见的数据处理类型,几乎在每个应用程序中都会被用到。而作为Python中使用最广泛的数据类型Python也是提供了很多强大的方法来支持对于字符串的处理操作。下面我们就来...

Java中你知道几种从字符串中找指定的字符的数量

遇到这样的问题,常规的思路估计就是遍历String,然后逐个对比。下面先看循环遍历循环遍历privatestaticintgetNum(StringoriginStr,Stringtarg...

C语言strcspn函数详解:字符串的“扫雷探测器”

strcspn是C语言标准库中的一个函数,定义在头文件中。它用于计算从字符串的开始到首次出现任何属于指定字符集合的字符之间的字符数量。换句话说,strcspn计算的是主字符串中不包含指定字符集...

如何使用 Python 的 f-string 进行字符串格式化

Python中的字符串格式化曾经有点麻烦。必须在...

java判断字符串中是否包含某个字符

1使用String类的contains()方法contains()方法用于判断字符串中是否包含指定的字符或字符串。语法如下:publicbooleancontains(CharSequence...

Python基础:f-string不同数据类型的格式化选项,终极指南!

上一篇文章我们介绍了4种字符串格式化方法,其中最现代、最直观的方式是f-string,从Python3.6开始引入,而且时不时就增加一些超级优雅的小改进。今天,钢铁老豆想要继续给大家展开介绍不同数据...

Excel查找指定字符串,返回相应的结果

通过下面的函数,可以实现查找指定字符串,若找到返回“有”,若找不到返回“无”。=IF(ISNUMBER(SEARCH("失业",G3)),"有","无")...

一个list中,有b.a.b.c.b.b.写个方法去掉所有b

importjava.util.ArrayList;importjava.util.List;publicclassRemoveBFromStringList{/**...

掌握Python f-string(掌握催眠能力之后的日常生活)

f-string,通常称为格式化字符串文本,是Python3.6中添加的一项强大功能,它提供了一种将表达式包含在字符串文本中的清晰实用的方法。,...

深入了解字符串:定义、转义字符和字符串下标

字符串是编程中常见的数据类型之一,用于表示文本信息。在绝大多数编程语言中,字符串都是由一系列字符组成的序列,可以包含字母、数字、符号以及空格等。字符串的定义:...

100个Java工具类之70:字符串处理工具类StringUtils

StringUtils是常用的工具类,提供大量处理字符串的静态方法。StringUtils主要特点...

Shell中针对字符串的切片,截取,替换,删除,大小写操作

切片返回字符串变量var的长度...

Sqlite - 常规函数 - RTRIM(sqlite命令行工具)

在SQLite中,RTRIM函数是一个用于处理字符串的函数,其主要作用是移除字符串右侧(尾部)的指定字符。如果不指定要移除的字符,默认会移除字符串右侧的空格字符。以下是对RTRIM函数的详细...

取消回复欢迎 发表评论: