5316|14

932

帖子

3

TA的资源

纯净的硅(中级)

楼主
 

【NUCLEO-L552ZE测评】+HLK-V20语音识别模块的实验 [复制链接]

 

    通过语音控制家电是我本次评测项目的一个重点,这次实验使用的是从某宝购买的语音识别模块,这个模块具有较高的性价比,缺点就是无法改变识别的内容,只能使用其定制好的语音命令。下面是实验过程中的照片:

 

    下图是语音识别模块,模块通过串口与单片机进行通讯:

    为了方便测试,我使用了一块192*64的LCD显示屏来展现相关的信息:

 

    输出控制部分暂时使用了一块四路继电器模块,在各个继电器上标注了被控制的家电设备,并没有真正连接器对应的家电设备,在测试过程中可以通过观察对应的LED灯亮灭确定执行何种操作,同时也会在LCD屏幕上显示相应的内容:

 

    实验过程并不复杂,因为语音识别在模块内完成,并通过串口将信息发送到单片机,单片机仅仅是将接收到的信息提取几个关键点进行判别,然后显示相应的内容并改变对应的GPIO电平的高低,从而驱动继电器动作,代码如下:

void yy_handler(void)
{
	uint8_t f0,f1,f2,f3,f4;
	f1 = rx_buffer[16];     //取关键字
	f2 = rx_buffer[22];
	f3 = rx_buffer[23];
	f4 = rx_buffer[24];
    LCD_clear_line(2);
	LCD_clear_line(3);
/*
	LCD_write_HEX(40,4,f1);
	LCD_write_HEX(70,4,f2);
	LCD_write_HEX(100,4,f3);
	LCD_write_HEX(130,4,f4);
*/
    switch (f1){
	    case 0x63:
			switch (f3){
			    case 0x63:
					LCD_write_BG(20,2,(uint8_t *)"关闭风扇");
				    OutFs_0;
					break;
				case 0x64:
					LCD_write_BG(20,2,(uint8_t *)"关闭灯光");
					OutDg_0;
				    break;
				case 0x6e:
					LCD_write_BG(20,2,(uint8_t *)"关闭空调");
					OutKt_0;
				    break;
                default:
       	            LCD_write_BG(20,2,(uint8_t *)"暂未处理");
			}
			break;
		case 0x64:
			switch (f2){
			    case 0x61:
					switch (f3){
					    case 0x69:
							LCD_write_BG(20,2,(uint8_t *)"打开开关");
							OutKg_1;
						    break;
						case 0x6f:
							LCD_write_BG(20,2,(uint8_t *)"打开照明");
							break;
						default:
							LCD_write_BG(20,2,(uint8_t *)"暂未处理");
					}
					break;
				case 0x66:
					LCD_write_BG(20,2,(uint8_t *)"打开吹风机");
					break;
				case 0x69:
					LCD_write_BG(20,2,(uint8_t *)"打开饮水机");
				    break;
				case 0x6e:
					LCD_write_BG(20,2,(uint8_t *)"打开电饭煲");
					break;
				case 0x75:
					switch (f3){
					    case 0x61:
							LCD_write_BG(20,2,(uint8_t *)"打开暖气");
							break;
						case 0x62:
							LCD_write_BG(20,2,(uint8_t *)"打开浴霸");
							break;
						default:
							LCD_write_BG(20,2,(uint8_t *)"暂未处理");
					}
					break;
				default:
       	            LCD_write_BG(20,2,(uint8_t *)"暂未处理");
			}
		    break;
		case 0x65:
			LCD_write_BG(20,2,(uint8_t *)"进入休眠");
		    break;			
		case 0x67:
			switch (f2){
			    case 0x61:
                    LCD_write_BG(20,2,(uint8_t *)"关闭电饭煲");
					break;
				case 0x63:
					LCD_write_BG(20,2,(uint8_t *)"关闭吹风机");
					break;
				case 0x6b:
					LCD_write_BG(20,2,(uint8_t *)"关闭开关");
				    OutKg_0;
				    break;
				case 0x6e:
					LCD_write_BG(20,2,(uint8_t *)"关闭暖气");
					break;
				case 0x79:
					switch (f3){
					    case 0x69:
							LCD_write_BG(20,2,(uint8_t *)"关闭饮水机");
						    break;
						case 0x75:
							LCD_write_BG(20,2,(uint8_t *)"关闭浴霸");
							break;
						default:
       	                LCD_write_BG(20,2,(uint8_t *)"暂未处理");
					}
					break;
				case 0x7a:
					LCD_write_BG(20,2,(uint8_t *)"关闭照明");
					break;
				default:
       	            LCD_write_BG(20,2,(uint8_t *)"暂未处理");
			}
			break;
		case 0x6f:
			switch (f2){
			    case 0x64:
					LCD_write_BG(20,2,(uint8_t *)"打开灯光");
				    OutDg_1;
				    break;
				case 0x65:
					LCD_write_BG(20,2,(uint8_t *)"打开风扇");
				    OutFs_1;
				    break;
				case 0x6e:
					LCD_write_BG(20,2,(uint8_t *)"打开空调");
				    OutKt_1;
				    break;
				default:
       	            LCD_write_BG(20,2,(uint8_t *)"暂未处理");
			}
			break;
		case 0x74:
			switch (f2){
			    case 0x5f:
					LCD_write_BG(20,2,(uint8_t *)"打开台灯");
					break;
				case 0x66:
					LCD_write_BG(20,2,(uint8_t *)"关闭台灯");
					break;
				default:
       	            LCD_write_BG(20,2,(uint8_t *)"暂未处理");
			}
			break;
		case 0x77:
		    LCD_write_BG(20,2,(uint8_t *)"准备就绪");
		    break;
		default:
       	    LCD_write_BG(20,2,(uint8_t *)"暂未处理");
	}
}

 

    下面的动画是实验时继电器的动作情况:

 

    这是实验时LCD屏幕显示的内容:

 

    

此帖出自stm32/stm8论坛

最新回复

你是用串口中断接收数据存在全局定义的数组中吗?这部分代码可以给我看看吗,我只能识别第一句在OLED上显示,yy_interrupt()我放main函数了。老哥求解,我卡这了  详情 回复 发表于 2021-6-26 15:37
点赞 关注
 

回复
举报

932

帖子

3

TA的资源

纯净的硅(中级)

沙发
 

这是压缩后的视频文件:

ST_L552_YY0.mp4 (6.5 MB, 下载次数: 11)



 

此帖出自stm32/stm8论坛
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

板凳
 

这个视频文件是屏幕显示内容:

ST_552_YY1.mp4 (7.64 MB, 下载次数: 4)

此帖出自stm32/stm8论坛
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

4
 

加油

下次直接用NUCLEO-L552ZE实现语音识别

此帖出自stm32/stm8论坛

点评

谢谢大佬鼓励,是有这个打算,已经买了一块语音识别模块。  详情 回复 发表于 2020-12-30 09:04
 
 
 

回复

7671

帖子

2

TA的资源

五彩晶圆(高级)

5
 

楼主玩具真多。

此帖出自stm32/stm8论坛
 
个人签名

默认摸鱼,再摸鱼。2022、9、28

 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

6
 
蓝雨夜 发表于 2020-12-29 20:41 加油 下次直接用NUCLEO-L552ZE实现语音识别

谢谢大佬鼓励,是有这个打算,已经买了一块语音识别模块。

此帖出自stm32/stm8论坛

点评

不知道移植MSP432的语言识别库难不难!  详情 回复 发表于 2020-12-30 09:07
 
 
 

回复

5310

帖子

453

TA的资源

五彩晶圆(高级)

7
 
hujj 发表于 2020-12-30 09:04 谢谢大佬鼓励,是有这个打算,已经买了一块语音识别模块。

不知道移植MSP432的语言识别库难不难!

此帖出自stm32/stm8论坛
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

8
 

我买的是LD3320模块,不含单片机芯片。没有接触过MSP432的资料。

此帖出自stm32/stm8论坛
 
 
 

回复

1

帖子

0

TA的资源

一粒金砂(初级)

9
 

博主 有源码嘛

此帖出自stm32/stm8论坛

点评

    这是通过串口接收语音识别模块的数据,然后进行处理的。语音模块识别的代码是厂家烧录好的,用户无法修改。处理接收数据的代码已经全文发布的帖子中了。  详情 回复 发表于 2021-5-8 07:42
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

10
 

    这是通过串口接收语音识别模块的数据,然后进行处理的。语音模块识别的代码是厂家烧录好的,用户无法修改。处理接收数据的代码已经全文发布的帖子中了。

此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

11
 

老哥,你使用串口中断来接受数据的吗?
我整几天了 搞不了,能看一下你的源码吗?
是个菜鸡新手

此帖出自stm32/stm8论坛

点评

    源代码已经发布在一楼,可供参考。调试可以先用厂家的软件在电脑上进行,然后用串口调试助手测试单片机的串口通讯,确保能正常收发,最后再换上语音识别模块,这样容易成功。  详情 回复 发表于 2021-6-26 09:01
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

12
 
lion987 发表于 2021-6-25 23:37 老哥,你使用串口中断来接受数据的吗?我整几天了 搞不了,能看一下你的源码吗?是个菜鸡新手

    源代码已经发布在一楼,可供参考。调试可以先用厂家的软件在电脑上进行,然后用串口调试助手测试单片机的串口通讯,确保能正常收发,最后再换上语音识别模块,这样容易成功。

此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

13
 
hujj 发表于 2021-6-26 09:01     源代码已经发布在一楼,可供参考。调试可以先用厂家的软件在电脑上进行,然后用串口调试助 ...

老哥,客服没给你说的那个软件哦,这个模块可以烧录吗?我一直以为只能用串口接收16进制,然后用stm32判断,而且我的串口中断只执行一次怎么回事

此帖出自stm32/stm8论坛
 
 
 

回复

3

帖子

0

TA的资源

一粒金砂(中级)

14
 
hujj 发表于 2021-6-26 09:01     源代码已经发布在一楼,可供参考。调试可以先用厂家的软件在电脑上进行,然后用串口调试助 ...

你是用串口中断接收数据存在全局定义的数组中吗?
这部分代码可以给我看看吗,我只能识别第一句在OLED上显示,yy_interrupt()我放main函数了。老哥求解,我卡这了

此帖出自stm32/stm8论坛

点评

    1、不知道您购买的识别模块与我购买的是不是同一商家,我是按照商家页面中的链接下载的资料;     2、识别模块我们是无法烧录的,只能按照其提供的识别信息进行判断;      详情 回复 发表于 2021-6-27 09:42
 
 
 

回复

932

帖子

3

TA的资源

纯净的硅(中级)

15
 
lion987 发表于 2021-6-26 15:37 你是用串口中断接收数据存在全局定义的数组中吗?这部分代码可以给我看看吗,我只能识别第一句在OLED上显 ...

    1、不知道您购买的识别模块与我购买的是不是同一商家,我是按照商家页面中的链接下载的资料;

    2、识别模块我们是无法烧录的,只能按照其提供的识别信息进行判断;

    3、您首先要解决通过串口接收语音模块的识别信息,才能完成后续的识别;

    4、串口数据接收的方法有很多,我是先定义一个全局变量(数组)和一个接收完成标志,串口接收到完整的数据后,给标志置1,主循环中识别完成后,给这个标志清零。

    5、完整的代码压缩包在总结贴中,下列的相关帖子及链接可供参考:

【NUCLEO-L552ZE测评】+开箱及建立开发平台 https://bbs.eeworld.com.cn/thread-1152076-1-1.html
【NUCLEO-L552ZE测评】+花样点灯 https://bbs.eeworld.com.cn/thread-1152265-1-1.html
【NUCLEO-L552ZE测评】+驱动LCD19264显示屏 https://bbs.eeworld.com.cn/thread-1152455-1-1.html
【NUCLEO-L552ZE测评】+模拟I2C驱动DS1307日历模块 https://bbs.eeworld.com.cn/thread-1152854-1-1.html
【NUCLEO-L552ZE测评】+串口通讯测试 https://bbs.eeworld.com.cn/thread-1153160-1-1.html
【NUCLEO-L552ZE测评】+HLK-V20语音识别模块的实验 https://bbs.eeworld.com.cn/thread-1153496-1-1.html
【NUCLEO-L552ZE测评】+蓝牙通讯的实验(1) https://bbs.eeworld.com.cn/thread-1154358-1-1.html
【NUCLEO-L552ZE测评】+AT24C32的读写操作实验 https://bbs.eeworld.com.cn/thread-1154939-1-1.html
【NUCLEO-L552ZE测评】+如何接收完整的串口数据 https://bbs.eeworld.com.cn/thread-1155271-1-1.html
【NUCLEO-L552ZE测评】+蓝牙通讯的实验(2) https://bbs.eeworld.com.cn/thread-1155366-1-1.html
【NUCLEO-L552ZE测评】+语音控制家电实验总结 https://bbs.eeworld.com.cn/thread-1155903-1-1.html

 

此帖出自stm32/stm8论坛
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表