走进离线语音:安信可 VC‑01 智能模块全面拆解与 MCU 实战

发布于:2025-06-10 ⋅ 阅读:(18) ⋅ 点赞:(0)

今天带大家认识一款性价比极高的中文语音识别模块——安可信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;
    }
}