4.21 ASR01-语音识别模块(来自 TaurusHard 的贡献)
4.21.1 模块来源
资料下载: https://pan.baidu.com/s/1WhuG4pz550goR8PbW1GrzA?pwd=8889 提取码:8889
4.21.2 规格参数
工作电压:5V
工作温度:-40℃~85℃
引脚数量:12(5V、GND、TX、DHT、IO1-IO8(3.3V))
模块尺寸:36mm x 36mm
4.21.3 模块应用讲解
该模块需搭配天问 Block 软件使用。
4.21.3.1 软件下载
该模块需搭配天问 Block 软件使用,下载地址:http://www.twen51.com/new/twen51/index.php
下载安装后还需要安装 CH340 驱动,可以自行百度安装。
4.21.3.2 新建实例
软件安装完成后双击打开,在右上角的设备中选择"TWEN-ASR",如下图所示。
点击左下角"添加扩展",添加鹿小班识别库(若已存在请忽略此步),如下图所示。 删除界面上的例程,只使用鹿小班识别库中的语句,如下图所示。 使用这些语句时进行简单的拖动即可,用这些语句编写如下程序(也可以参考官方例程进行简单修改,编写自己的程序):4.21.3.3 生成模型编译下载
注:生成模型和编译下载程序需要使用天问 Block 账号,注册一个即可。 点击右上角生成模型,生成时间大概为 1-3 分钟。
生成模型后将 USB 线插入电脑,确保软件识别到串口,然后点击编译下载即可。 等待烧录成功后,模块会播报欢迎词(如果连接喇叭的情况下),此时可以进行测试。4.21.4 移植工程
4.21.4.1 引脚选择
| ASR01 | 立创·梁山派 |
|---|---|
| GND | GND |
| 5V | 5V |
| IO1 | PF6 |
| IO2 | PF9 |
4.21.4.2 移植步骤
4.21.3.2 小节中编写的实例本质上是识别两个 IO 口的低脉冲,类似于对按键的检测,所以我们在 Hardware 文件夹下新建一个 LED 文件夹和一个 KEY 文件夹,在 LED 文件夹中创建 led.h 和 led.c,在 KEY 文件夹下创建 key.h 和 key.c。
led.h
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: TaurusHard
* 修改日期: 2023年09月25日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#ifndef _LED_H
#define _LED_H
#include "sys.h"
#define LED1_CLK RCU_GPIOE
#define LED1_PORT GPIOE
#define LED1_PIN GPIO_PIN_3
#define LED2_CLK RCU_GPIOD
#define LED2_PORT GPIOD
#define LED2_PIN GPIO_PIN_7
#define LED3_CLK RCU_GPIOG
#define LED3_PORT GPIOG
#define LED3_PIN GPIO_PIN_3
#define LED4_CLK RCU_GPIOA
#define LED4_PORT GPIOA
#define LED4_PIN GPIO_PIN_5
#define LED1 PEout(3)
#define LED2 PDout(7)
#define LED3 PGout(3)
#define LED4 PAout(5)
#define LED1_CTL(x) gpio_bit_write(LED1_PORT, LED1_PIN, x)
#define LED2_CTL(x) gpio_bit_write(LED2_PORT, LED2_PIN, x)
#define LED3_CTL(x) gpio_bit_write(LED3_PORT, LED3_PIN, x)
#define LED4_CTL(x) gpio_bit_write(LED4_PORT, LED4_PIN, x)
void led_init(void);
#endif2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
led.c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: TaurusHard
* 修改日期: 2023年09月25日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "led.h"
void led1_init(void)
{
/* 使能时钟 */
rcu_periph_clock_enable(LED1_CLK);
/* 配置为输出模式 上拉模式 */
gpio_mode_set(LED1_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LED1_PIN);
/* 配置为推挽输出 50MHZ */
gpio_output_options_set(LED1_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED1_PIN);
LED1 = 0;
}
void led2_init(void)
{
/* 使能时钟 */
rcu_periph_clock_enable(LED2_CLK);
/* 配置为输出模式 上拉模式 */
gpio_mode_set(LED2_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LED2_PIN);
/* 配置为推挽输出 50MHZ */
gpio_output_options_set(LED2_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED2_PIN);
LED2 = 0;
}
void led3_init(void)
{
/* 使能时钟 */
rcu_periph_clock_enable(LED3_CLK);
/* 配置为输出模式 上拉模式 */
gpio_mode_set(LED3_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LED3_PIN);
/* 配置为推挽输出 50MHZ */
gpio_output_options_set(LED3_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED3_PIN);
LED3 = 0;
}
void led4_init(void)
{
/* 使能时钟 */
rcu_periph_clock_enable(LED4_CLK);
/* 配置为输出模式 上拉模式 */
gpio_mode_set(LED4_PORT, GPIO_MODE_OUTPUT, GPIO_PUPD_PULLUP, LED4_PIN);
/* 配置为推挽输出 50MHZ */
gpio_output_options_set(LED4_PORT, GPIO_OTYPE_PP, GPIO_OSPEED_50MHZ, LED4_PIN);
LED4 = 0;
}
void led_init(void)
{
led1_init();
led2_init();
led3_init();
led4_init();
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
key.h
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: TaurusHard
* 修改日期: 2023年09月25日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#ifndef _KEY_H
#define _KEY_H
#include "sys.h"
#include "systick.h"
#define KEY1_RCU RCU_GPIOF // 按键1端口时钟
#define KEY1_PORT GPIOF // 按键1端口
#define KEY1_PIN GPIO_PIN_6 // 按键1引脚
#define KEY2_RCU RCU_GPIOF // 按键2端口时钟
#define KEY2_PORT GPIOF // 按键2端口
#define KEY2_PIN GPIO_PIN_9 // 按键2引脚
#define KEY1 PFin(6)
#define KEY2 PFin(9)
void key_init(void); // key gpio引脚配置
void key_scan(void); // 按键扫描
#endif /* KEY_H */2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
key.c
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: TaurusHard
* 修改日期: 2023年09月25日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "key.h"
#include "sys.h"
#include "led.h"
#include "stdio.h"
/************************************************
函数名称 : key_init
功 能 : keygpio引脚配置
参 数 : 无
返 回 值 : 无
作 者 : LC
*************************************************/
void key_init(void)
{
/* 开启时钟 */
rcu_periph_clock_enable(KEY1_RCU);
rcu_periph_clock_enable(KEY2_RCU);
/* 配置GPIO模式 */
gpio_mode_set(KEY1_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY1_PIN);
gpio_mode_set(KEY2_PORT, GPIO_MODE_INPUT, GPIO_PUPD_PULLUP, KEY2_PIN);
}
/************************************************
函数名称 : key_scan
功 能 : 按键扫描函数
参 数 : 无
返 回 值 : 无
作 者 : LC
*************************************************/
void key_scan(void)
{
if(KEY1 == RESET) // 按键按下
{
delay_ms(20); // 延迟消抖
if(KEY1 == RESET) // 再次检测按键是否按下
{
// 开灯
LED1 = 1;
printf("LED ON\r\n");
while(KEY1 == RESET)
; // 等待按键松开
}
}
if(KEY2 == RESET) // 按键按下
{
delay_ms(20); // 延迟消抖
if(KEY2 == RESET) // 再次检测按键是否按下
{
// 关灯
LED1 = 0;
printf("LED OFF\r\n");
while(KEY2 == RESET)
; // 等待按键松开
}
}
delay_ms(50);
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
4.21.5 移植验证
在 main.c 中增加以下代码,检测 ASR01 引脚变化。进而根据语音判断执行何种动作。
/********************************************************************************
* 测试硬件:立创·梁山派开发板GD32F470ZGT6 使用主频200Mhz 晶振25Mhz
* 版 本 号: V1.0
* 修改作者: TaurusHard
* 修改日期: 2023年09月25日
* 功能介绍:
******************************************************************************
* 梁山派软硬件资料与相关扩展板软硬件资料官网全部开源
* 开发板官网:www.lckfb.com
* 技术支持常驻论坛,任何技术问题欢迎随时交流学习
* 立创论坛:club.szlcsc.com
* 其余模块移植手册:https://dri8c0qdfb.feishu.cn/docx/EGRVdxunnohkrNxItYTcrwAnnHe
* 关注bilibili账号:【立创开发板】,掌握我们的最新动态!
* 不靠卖板赚钱,以培养中国工程师为己任
*********************************************************************************/
#include "gd32f4xx.h"
#include "stdio.h"
#include "systick.h"
#include "uart.h"
#include "led.h"
#include "key.h"
int main(void)
{
nvic_priority_group_set(NVIC_PRIGROUP_PRE2_SUB2); // 优先级分组
systick_config(); // 滴答定时器初始化 1us
usart_gpio_config(115200U); // 串口初始化
led_init(); // LED初始化
key_init(); // 按键初始化
while(1)
{
key_scan(); // ASR01引脚检测
}
}2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
将 DAP-Link 连接至电脑 USB 接口,打开串口调试助手,编译代码下载到梁山派开发板后,运行代码,说出“你好小派”唤醒语音模块,语音模块回复“你好”;说出“开灯”,语音模块回复“已打开灯光”,LED1 会亮起,同时串口打印出“LED ON”;说出“关灯”,语音模块回复“已关闭灯光”,LED1 会熄灭,同时串口打印出“LED OFF”,以下为演示视频。
移植成功代码见下文件。
通过网盘分享的文件:立创·梁山派GD32F470ZGT6开发板【模块移植手册代码】
链接: https://pan.baidu.com/s/1pp44yjD1Dhh7U9iZ2a11IA 提取码: LCKF