安信可内测离线语音模块VB-01与ESP-C3-12F通信


前言

       上个月给大家展示了使用ESP-C3-12F来控制WS2812 RGB灯条(安信可ESP32-C3模组阿里云远程控制WS2812RGB灯条(基于ESP-IDF的SDK)),其中的第三节就提到了VB-01 这个模块。因为当时该模块还处于完全保密状态,不允许做过多的介绍。
       而本篇博文也不会提到如何对模块做二次开发,只介绍外部MCU如何与VB-01进行通信。


一、VB-01模块介绍

       VB-01 是安信可即将上线的一款 离线语音控制模块 ,而且自带单MIC输入和单扬声器输出。用户可以直接把2线的MIC和2线的扬声器接入,不需要附带功放电路MIC滤波电路,控制命令可由智能AI语音进行解码。
       博主自己测试体验来看,误识别的概率还是挺小的,可以说几乎没有。 鉴于还处于保密状态,博主就不展示VB-01的真容了(VB-01不久之后就会安信可官方某宝上架,大家可以关注一下,链接在本文结尾)。为了配合下文,只能给出引脚图。

在这里插入图片描述


二、通信串口选择

1.通信串口介绍

        VB-01一共给出了三组串口: RX0_5V-TXD0_5V、RXD0_3V3-TXD0_3V3和RXD1-TXD1。其中,RX0_5V-TXD0_5V、RXD0_3V3-TXD0_3V3是共用的UART0,也是MCU的通信接口,。而TXD1和RXD1是UART1 用来下载程序用的。

2.UART0

        VB-01和外部MCU通信接口建议使用UART0,默认波特率:38400,也就是图中的: RX0_5V-TXD0_5V、RXD0_3V3-TXD0_3V3。
在这里插入图片描述

3.打印信息说明

        UART0的打印内容如下:

ASR Result: 你好小薇   //中文在Windows 环境呈 乱码状态
Wakeup:你好小薇		   //中文在Windows 环境呈 乱码状态
Send data len:4
Send uart data:0xAA 01 00 BB 
ReadmePlay ID: 4

所打印的信息全部以字符串方式打印。

        ASR Result: 为是被到的指令
        Wakeup: 为唤醒指令 其他指令不会打印这个
        Send data len: 发送数据的字节数
        Send uart data: 发送的数据
        ReadmePlay ID: 播放提示音的ID 号
注:发送的数据和播放提示音通常是一一对应的。


三 、ESP-C3-12F端与VB-01的数据交互

        ESP-C3-12F的角色就是外部MCU,目的就是为了更直观展示VB-01的语音识别功能。

1.读取指令并解析控制

        从上一节提到的VB-01打印信息可以看出:识别控制有两个方式:
        1. 解析VB-01发送的数据:例如:0xAA 01 00 BB;
        2. 解析提示音ID号:
这两种方式都是可以的。博主觉得第二种方式更容易一些,并且灵活,而第一种方式解析更加复杂,但也会更加可靠。
        选择第二种方式还有一个原因是因为ID号也代表了提示音,而且还是字符串数字,可以使用atoi() 函数直接转换成整型数。 ESP-C3-12F的数据解析代码:

int uartDataHandle(uint8_t *data)
{
	uint8_t *temp;
	char *TAG = "uartDataHandle";
	int ID_NUM = 0;
	temp = data;
	if (temp != NULL)
	{
		temp = (uint8_t *)strstr((const char *)temp, "ID:"); //识别“ID:”字符串
		if (temp != NULL)
		{
			temp = (uint8_t *)strstr((const char *)temp, ":");//获取字符串中ID后面的字符串数字
			++temp; //跨过冒号 “ : ”
			ID_NUM = atoi((const char *)temp); //把字符串ID 转换成整型数
			ESP_LOGI(TAG, "Cmd ID:%d", ID_NUM);
			goto __RETURN_ID;
		}
		else
			goto __RETURN_ID;
	}
	else
		goto __RETURN_ID;

__RETURN_ID:
	return ID_NUM;
}

这样就可以通过不同提示音的ID号做不同的动作。

2.控制VB-01播放提示音

        发送播放提示音指令和接收不同,不能发送ID号令VB-01播放提示音。因为VB-01的程序并没有串口接收ID号来播放提示音,它是通过一组4个十六位数据来控制播放的,例如:

unsigned char rcv_uart_buf[RCV_UART_DATA_NUM][RCV_UART_DATA_LEN] =
    {
        {0xAA, 0x02, 0x00, 0xBB}, //播放提示音 BEEP_00
        {0xAA, 0x02, 0x01, 0xBB}, //播放提示音 BEEP_01
        {0xAA, 0x02, 0x02, 0xBB}, //播放提示音 BEEP_02
        {0xAA, 0x02, 0x03, 0xBB}, //如此类推
        {0xAA, 0x02, 0x04, 0xBB},
        {0xAA, 0x02, 0x05, 0xBB},
        {0xAA, 0x02, 0x06, 0xBB},
        {0xAA, 0x02, 0x07, 0xBB},
        {0xAA, 0x02, 0x08, 0xBB},
        {0xAA, 0x02, 0x09, 0xBB},
        {0xAA, 0x02, 0x0A, 0xBB},

所以外部MCU想控制VB-01播放提示音的时候,直接发送4个对应的十六位数据即可,VB-01默认的控制数据和上述的一样。下面是ESP-C3-12F控制VB-01播放提示音的相关代码:

/*控制数组*/
unsigned char beep[][4] = {
	{0xAA, 0x02, 0x03, 0xBB}, //开灯
	{0xAA, 0x02, 0x04, 0xBB}, //关灯
	{0xAA, 0x02, 0x05, 0xBB}, //调成绿色
	{0xAA, 0x02, 0x06, 0xBB}, //调成红色
	{0xAA, 0x02, 0x07, 0xBB}, //调成蓝色
	{0xAA, 0x02, 0x08, 0xBB}, //调成紫色
	{0xAA, 0x02, 0x09, 0xBB}, //调成橙色

	{0xAA, 0x02, 0x0A, 0xBB}, //开始跑
	{0xAA, 0x02, 0x0B, 0xBB}, //停止跑
	{0xAA, 0x02, 0x0C, 0xBB}, //提速
	{0xAA, 0x02, 0x0D, 0xBB}, //降速
	{0xAA, 0x02, 0x0E, 0xBB}, //还在跑
};

//控制代码段
	switch (RGB_24Bit)
	{
	case 0XFF00:
		uart_write_bytes(UART_NUM_1, beep[2], sizeof(beep[0]));
		break;
	case 0xFF0000:
		uart_write_bytes(UART_NUM_1, beep[3], sizeof(beep[0]));
		break;
	case 0xFF:
		uart_write_bytes(UART_NUM_1, beep[4], sizeof(beep[0]));
		break;
	case 0XF05308:
		uart_write_bytes(UART_NUM_1, beep[6], sizeof(beep[0]));
		break;
	case 0X8C0BEE:
		uart_write_bytes(UART_NUM_1, beep[5], sizeof(beep[0]));
		break;
	case 0xFFFFFF:
		uart_write_bytes(UART_NUM_1, beep[0], 4); //播放:已经打开灯了
		break;
	case 0x0:
		uart_write_bytes(UART_NUM_1, beep[1], 4); //播放:已经关灯了
		break;
	default:
		break;
	}

四、总结

       MCU与VB-01的通信其实就只是正常的串口通信,只需要懂得一些字符串操作可以解析数据,并作出控制动作。相信大家,更关注的不是怎么控制播放提示音,而是怎么DIY语音指令,比如让VB-01识别 “小爱同学”,识别“天猫精灵”等指令,或者一些更骚的语音指令。这方面的知识大家就期待一下。演示视频相关会过两天更新到本博文当中。
       本文会同步到安信可科技官方博文:
欢迎关注安信可官方博客:https://aithinker.blog.csdn.net/

安信可模组购买连接:安信可科技某宝连接,关注获取第一手资讯

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值