文章目录[隐藏]
设计一个根据语音指令自动播报温湿度系统
一、项目设备
STM32F4控制板,IO Expansion Shield,语音识别模块,语音合成模块,OLED模块、DHT11模块
二、相关知识点
生活中经常可以在一些地方见到墙上有显示温湿度的温湿度计,能够使人非常方便的查看室内的温湿度环境,从而调节空调等设备改善室内环境,使得室内的人感觉更舒适。本次实验实现的根据语音命令自动报告温湿度的功能能够使人不需要去寻找温湿度计在哪,只需要发出语音命令让识别模块识别到命令即可报告当前的温湿度。
三、项目内容
在STM32CubeMx的配置上,按照湿度测量试验配置好SYS和RCC、I2C1和PB6、PB7引脚。按照预设语音对话实验配置好SPI2与USART2以及PC4、PC5等引脚。完成这些后生成工程文件,在keil5中打开,并向工程中添加oled.c、oled.h、oledfont.h、DHT11.c、DHT11.h、LDChip.c、LDChip.h、Reg_RW.c与Reg_RW.h文件。
首先引用头文件,声明函数,定义变量等。
数组TMP用来存储合成模块要说出的话,数组DU用来存储汉字“度”,数组BA用来存储汉字“百分之”。
接着在main()函数中进行初始化等操作
在/* USER CODE BEGIN 4 /与/ USER CODE END 4 */按下图添加函数。
由于温湿度都是两位数,除以10可得十位,对十取余可得个位,0X30就是十进制的48,查阅ASCII码表可知,48位的值是0,所以通过这个表达式可以得到数字在ASCII码表中的位置,然后将其赋值给TMP数组的相应位置,再将数组DU与数组BA中的汉字也赋值给TMP数组。这样就将一句含有数字和汉字的语句传给了语音合成模块。
数字的编码方式是ASCII,之所以能和汉字一起按照GB2312的编码格式发送给语音合成模块,是因为GB2312兼容ASCII码。在GB2312中,所有的汉字都是按照两个字节编码的,但是数字只有一个字节。因为ASCII一个字节八位的最高位都是0,而GB2312中所有的汉字的字节最高位都是1,所以当解码时,遇到字节是1开头的,就知道这是一个汉字字节,要加上下一个字节组成一个汉字。遇到字节是0开头的,就只把这个字节解释为数字或英文字母。然后在while循环中添加如下代码
四、项目结果
当对语音识别模块说温度时,语音合成模块会自动念出温度,对识别模块说湿度时,语音合成模块会自动念出当前的湿度值。
版权声明:本文为CSDN博主「JIACHUN123」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/weixin_45053407/article/details/121487956
暂无评论