今天带大家认识一款性价比极高的中文语音识别模块——安可信VC-01智能语音识别模块。不仅适合AI初学者入门,也是嵌入式开发人员做语音控制项目的利器!本文将结合VC-01的官方规格书内容、功能特点,并结合MUC主控芯片(如STM32、ESP32)进行项目实战讲解。
一、什么是VC-01语音模块?
VC-01 是安可信(Acontech)推出的一款高性能、低功耗的离线语音识别模块,适合嵌入式语音交互应用。它最大的优势是:
- 支持离线关键词识别
- 无需联网即可实现语音控制
- 支持多种命令词组定制
- 语音识别响应时间快,抗干扰强
- 支持UART串口通信,适配各种主控芯片
二、核心参数
参数 | 描述 |
---|---|
主芯片 | US516P6(32-bit RISC 内核,240 MHz,DSP 指令 & FPU + FFT 加速器) |
存储 | 2 MB Flash,242 KB SRAM |
识别能力 | 支持 150 条本地指令,唤醒距离达 5 m,识别率 ≥ 98%,响应时间 < 100 ms |
音频性能 | 单 MIC 输入,双通道 DAC 输出,内置 AEC 及降噪算法 |
接口 | UART、I²C、PWM、GPIO、SPI、DAC |
工作电压 | 3.6–5 V,电流 > 500 mA,温度范围 –40~85 ℃ |
外形尺寸 | 模块体积约 25.5 × 24 × 3.2 mm,开发板约 42.2 × 35.6 mm |
三、VC-01模块引脚定义
引脚 | 功能说明 |
---|---|
VCC | 电源(3.3V 或 5V) |
GND | 地 |
RXD | 接收串口数据(接主控TX) |
TXD | 发送串口数据(接主控RX) |
EN | 模块使能(低电平有效) |
K1/K2/K3 | 用户自定义按键输入(可触发语音识别) |
安信可语音开发平台的使用
首先进入http://voice.ai-thinker.com
该网址进行注册后,显示该页面
之后点击左上角的创建产品,然后进入到下面页面
然后我们在选择产品类别,选择其他,接着进入下面该页面
我们选择纯离线方案,
然后选择VC-01模组,
之后写入我们产品名称,与语言,下面是我们写好的
点击保存
然后就来到语音配置界面
注意这里,我们应该选择为串口烧录,应该一般该模组没有ST-Link SWD烧录,所以选择为串口
接着下滑,我们就可以配置唤醒词自定义
到了这里,就是可以设置我们想要配置自己主控上的设备,下面给你们举个例子。
案例展示
我们首先先添加一条基础信息,
添加完这个基础信息后还要进行一个控制详情,就是以下图
基本就这样了,挺简单的,网上学习资料有很多,大家多多交流一下
四、STM32 控制代码(标准外设库实现)
1️⃣ 串口初始化代码(USART1)
void USART1_Init(void)
{
RCC_APB2PeriphClockCmd(RCC_APB2Periph_USART1 | RCC_APB2Periph_GPIOA, ENABLE);
// PA9 = TX, PA10 = RX
GPIO_InitTypeDef GPIO_InitStructure;
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_9;
GPIO_InitStructure.GPIO_Speed = GPIO_Speed_50MHz;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_AF_PP;
GPIO_Init(GPIOA, &GPIO_InitStructure);
GPIO_InitStructure.GPIO_Pin = GPIO_Pin_10;
GPIO_InitStructure.GPIO_Mode = GPIO_Mode_IN_FLOATING;
GPIO_Init(GPIOA, &GPIO_InitStructure);
USART_InitTypeDef USART_InitStructure;
USART_InitStructure.USART_BaudRate = 115200;
USART_InitStructure.USART_WordLength = USART_WordLength_8b;
USART_InitStructure.USART_StopBits = USART_StopBits_1;
USART_InitStructure.USART_Parity = USART_Parity_No;
USART_InitStructure.USART_HardwareFlowControl = USART_HardwareFlowControl_None;
USART_InitStructure.USART_Mode = USART_Mode_Tx | USART_Mode_Rx;
USART_Init(USART1, &USART_InitStructure);
USART_Cmd(USART1, ENABLE);
}
2️⃣ 串口接收数据解析
uint8_t VC01_ReceiveBuffer[64];
uint8_t index = 0;
void USART1_IRQHandler(void)
{
if (USART_GetITStatus(USART1, USART_IT_RXNE) != RESET)
{
uint8_t data = USART_ReceiveData(USART1);
VC01_ReceiveBuffer[index++] = data;
// 示例协议格式:0xAA 0x55 CMD_ID
if (index >= 3)
{
if (VC01_ReceiveBuffer[0] == 0xAA && VC01_ReceiveBuffer[1] == 0x55)
{
uint8_t cmd = VC01_ReceiveBuffer[2];
VC01_ExecuteCommand(cmd);
}
index = 0;
}
}
}
3️⃣ 控制灯光或继电器(GPIO 控制)
void VC01_ExecuteCommand(uint8_t cmd)
{
switch (cmd)
{
case 0x01: // 语音命令:“打开灯”
GPIO_SetBits(GPIOC, GPIO_Pin_13); // 点亮LED
break;
case 0x02: // “关闭灯”
GPIO_ResetBits(GPIOC, GPIO_Pin_13); // 熄灭LED
break;
default:
break;
}
}