irpas技术客

基于OpenHarmony开发的语音小助手_一口气吃不成胖子

网络 4002

基于OpenHarmony开发的语音小助手

本教程将演示如何在BearPi-HM_Nano开发板上使用GPIO输入功能去读取语音模块信息,实现****开关灯自由****!!

一、实验前器材准备 语音识别模块

语音播放模块

SD卡

无源喇叭

BearPi-HM_Nano开发板

E53—SC1模块

面包板

二、环境搭建 (1)搭建小熊派的开发环境

参考官方文档

三、电路连接 BearPi-HM_Nano开发板引脚连接

GPIO_11——P1.2(语音识别模块)

GPIO_12——P1.2(语音识别模块)

语音播放模块引脚连接

IO1——P1.2(语音识别模块)

IO2——P1.3(语音识别模块)

GND——GND(小熊派)

VCC——VCC(小熊派)

语音识别模块引脚连接

GND——GND(小熊派)

VCC——VCC(小熊派)

P1.2——GPIO_11(小熊派)

P1.3——GPIO_12(小熊派)

无源喇叭引脚连接

正极—SPK1(语音播放模块)

负极—SPK2(语音播放模块)

四、软件介绍 (1) BearPi-HM_Nano开发板 引脚初始化 GpioInit(); **//初始化LED灯** IoSetFunc(**WIFI_IOT_IO_NAME_GPIO_7**, **WIFI_IOT_IO_FUNC_GPIO_7_GPIO**); GpioSetDir(**WIFI_IOT_IO_NAME_GPIO_7**, **WIFI_IOT_GPIO_DIR_OUT**); **//初始化GPIO_11按键,设置为下降沿触发中断** IoSetFunc(**WIFI_IOT_IO_NAME_GPIO_11**, **WIFI_IOT_IO_FUNC_GPIO_11_GPIO**); GpioSetDir(**WIFI_IOT_IO_NAME_GPIO_11**, **WIFI_IOT_GPIO_DIR_IN**); IoSetPull(**WIFI_IOT_IO_NAME_GPIO_11**, **WIFI_IOT_IO_PULL_UP**); GpioRegisterIsrFunc(**WIFI_IOT_IO_NAME_GPIO_11**, **WIFI_IOT_INT_TYPE_EDGE**, **WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW**, ON, ***\*NULL\****); **//初始化GPIO_12,设置为下降沿触发中断** IoSetFunc(**WIFI_IOT_IO_NAME_GPIO_12**, **WIFI_IOT_IO_FUNC_GPIO_12_GPIO**); GpioSetDir(**WIFI_IOT_IO_NAME_GPIO_12**, **WIFI_IOT_GPIO_DIR_IN**); IoSetPull(**WIFI_IOT_IO_NAME_GPIO_12**, **WIFI_IOT_IO_PULL_UP**); GpioRegisterIsrFunc(**WIFI_IOT_IO_NAME_GPIO_12**, **WIFI_IOT_INT_TYPE_EDGE**, **WIFI_IOT_GPIO_EDGE_FALL_LEVEL_LOW**, OFF, ***\*NULL\****); 中断调用函数

这部分代码主要分析语音识别到指令触发中断的功能代码,这里以ON函数为例,语音识别模块P1.2的引脚与主控芯片的GPIO_11连接,首先通过调用IoSetFunc()和GpioSetDir()将GPIO_11设置为普通GPIO的输出模式。从前面原理图可知,当收到指令时,GPIO_11会被下拉到地,所以这里要使用IoSetPull()将GPIO_11引脚设置为上拉,这样才能产生电平的跳变。最后通过GpioRegisterIsrFunc()将中断类型设置为边沿触发,且为下降沿触发,当按键被按下时,GPIO_11会从高电平转为低电平,产生一个下降,这个时候就会触发中断并回调ON函数。在ON函数中实现点亮LED灯操作。

**static** **void** ON(**char** ***arg**) { (**void**)**arg**; GpioSetOutputVal(**WIFI_IOT_IO_NAME_GPIO_7**, 1);} **static** **void** OFF(**char** ***arg**) { (**void**)**arg**; GpioSetOutputVal(**WIFI_IOT_IO_NAME_GPIO_7**, 0);} (2) 语音识别模块代码介绍 ##### **引脚定义** sbit PA3=P1^2; //对应板上标号 P1.2 sbit PA4=P1^3; //对应板上标号 P1.3 ##### **功能实现** switch(dat) /*对结果执行相关操作*/ { case CODE_DMCS: /*命令“开灯”*/ PrintCom("命令识别成功\r\n"); //串口输出提示信息 PA3=0;//让PA1端口为低电平 break; ? case CODE_KFBYZ: /*命令“关灯”*/ PrintCom("命令识别成功\r\n");//串口输出提示信息 PA4=0;//让PA2端口为低电平 break; } 五、实物图 等待指令

接收到“开灯”指令

`


1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,会注明原创字样,如未注明都非原创,如有侵权请联系删除!;3.作者投稿可能会经我们编辑修改或补充;4.本站不提供任何储存功能只提供收集或者投稿人的网盘链接。