随着人们生活水平的提高,对产品的功能要求也越来越高,追求舒适的体验感,特别是对操控性的要求越来越高。目前风扇产品的控制方式有以下几类:
为了解决以上痛点,可以采用纯离线语音识别进行控制,在成本增加不大的情况下,为产品带来更多的亮点和竞争力。启英泰伦针对该产品领域,已开发了整套离线语音风扇方案,下面对该方案进行介绍。
启英泰伦离线语音风扇相对传统风扇方案,可让用户通过语音控制风扇设备,替换传统遥控器或按钮控制的方式,该方案有以下优势:
风扇产品按照使用电源类型可分为交流电风扇、直流电风扇和交直流电风扇三类,其类型可以分为台扇、吊扇、落地扇、无叶风扇等。启英泰伦离线语音风扇方案适用于各类风扇,其中尤其在落地扇上面的应用较多。
语音风扇产品的使用场景为普通家居环境,在安静和中低噪音下可以达到良好的识别率。其中安静环境的环境底噪在35dB ~ 45dB之间,属于中低噪音环境;开启风扇后环境噪音可达45dB ~ 65dB之间。该噪音环境下可以直接选用我司单麦克风语音模块,如CI-B0XGS01S或CI-B0XGS01S-H模块,以达到比较好的性价比。
特别注意,不同的风扇运行过程中,因为扇叶大小和叶片数量,风量大小差异,运行产生的风噪大小也有不小的差异,为了达到最好的语音识别效果,在设计风扇整机结构时,因注意控制噪音小于65dB。
一个基于我司芯片的标准语音产品设计流程如下图所示:
该流程主要针对我司新用户开发产品使用,包含了前期购买样品Demo进行验证,硬件选型,语音对话逻辑、软硬件方案和结构设计,设计完成后的测试,以及生产测试准备和后续批量采购等步骤。如果是已经熟悉我司方案的老用户,可以直接从中间步骤开始,不用再重复进行Demo测试等工作。
下面针对新用户的开发,对上述流程中的各个步骤逐一描述。
针对新用户,可以先从我司授权的经销商或直接从我司官网 ☞样品购买 处购买对应的模块或开发板套件,进行识别效果测试,相关的软硬件技术文档可以从本文档中心处获取。用户测试满意后,可以进行硬件选型。
用户硬件选型可以直接参考 ☞硬件选型 ,如果用户想快速产品化,推荐直接使用我司已设计好的标准模块;如果现有标准模块无法满足产品的结构需求,也可以选用合适的芯片进行硬件板的设计。
选择好合适的芯片或模块后,可根据产品的功能进行下述设计:
如用户为首次进行语音方案开发,建议到 ☞启英泰伦语音AI平台 上获取基于相关芯片的语音产品方案设计Checklist文档,进行逐一检查以确保设计效果。如有技术支持需求请联系我司技术支持人员。
产品方案设计完成形成样品后,建议对该样品进行相关的识别测试,相关测试方法和标准可参考 ☞识别效果测试。同时,还建议根据产品质量的要求进行各类硬件测试,如双85测试、静电测试等。为了保证最终的识别效果,还建议进行硬件底噪的测试及产品装机后的整机功能测试。
样机测试完成后,会转入后续产线批量生产阶段。我司为产品的批量生产做了完善的解决方案,用户可以参考 ☞生产测试 获取更多信息。用户如需要生产测试的相关技术支持,请联系我司技术人员。
用户如果要采购我司产品样品,请点击 ☞样品购买 ,也可以点击 ☞样品和批量采购 获取更多信息。
5.1.1 方案特点¶
我司的CI110X芯片内置多个IO,可直接取代传统电控风扇中的单片机控制方案,实现单芯片完成语音控制和主控控制,整体成本较低,但需要做语音和主控的开发,前期开发周期长。
为了方便用户使用,我司已提前做了相应的开发,可以提供完整的语音风扇主控方案。
5.1.2 方案框图¶
整个方案如上图所示,CI110X芯片作为主控,可以通过麦克风采集外部语音进行识别,通过功放驱动喇叭播音。如为省成本,还可以将功放和喇叭换为蜂鸣器。CI110X芯片还可以接受外部按键及红外信号,兼容传统控制方式。
CI110X芯片可支持数码管显示,以及控制外部的驱动电路,实现电机的控制,可以很好的用一个单芯片实现风扇的全部控制功能。
5.1.3 硬件设计参考¶
风扇电控板的一个硬件参考线路图及IO使用情况见下图,用户可以使用CI110X芯片按照相同的IO使用方式设计硬件电路,可以方便的搭建整套风扇方案。
5.1.4 主控方案SDK包说明¶
我司为用户基于上述硬件设计,提供了完整的SDK包,用户可以到 ☞启英泰伦语音AI平台 上获取相关SDK开发包。
本SDK包有以下功能点:
本SDK包中使用到了硬件timer,使用方式如下:
为了方便代码的移植,每个外设驱动和风扇应用代码都是单独的文件夹,目录说明如下:
目录地址 | 目录说明 | 功能描述 |
---|---|---|
..\components\ir..\components\ir_remote_driver\ | 红外驱动目录(有些蓝牙也是单线通讯方式,与红外的驱动基本一致) | 红外接收功能,接收后的数据会队列通知到deal_userdef_msg,红外的长度可以根据宏定义配置。 #宏定义 #define IR_MAX_DATA_COUNT 120最大红外个数 |
..\components\motor_driver\ | 电机驱动目录 | 当前支持5104的不归零码协议,后续如有其它驱动,CI可以支持 |
..\components\ci_key\ | 使用了2个Touch IC芯片(如品腾PT8041),控制7个按键 | 触摸不同的按键,对应不同的adc数值,故使用两个ADIO 做按键驱动,根据客户的实际产品,请自行调整 |
..\components\digital_tube\ | 数码管驱动目录 | IO 与LED 进行复用。目前支持的是两个数码管+8个LED |
..\components\temperature_sensor\ | 温度传感器驱动目录 | 使用AD+热敏电阻实现,产品可以根据温度进行智能调节风量 |
..\components\buzzer\ | 蜂鸣器驱动目录 | 采用定时器默认4Khz进行声音提示,可以更改 #define BUZZER_HZ 进行配置,单位HZ |
..\sample\internal\sample_1102\src\user_msg_deal.c | 风扇应用层代码 | 根据红外,按键,语音识别的消息进行电机的应用控制 |
针对SDK中一些重要的变量和函数进行说明:
风扇状态变量:
typedef struct
{
unsigned short user_code : 4 ;//用户码固定位 b'1010*
unsigned short positive : 2 ;//正转b'00 反转b'11*
unsigned short sync_motor: 2 ;//同步电机1 停止b'00 同步电机停止b'10*
unsigned short speed_bit: 8 ;//电机工作范围25~255 0表示电机停止*
unsigned char mode; //0:正常风 1:自然风 2:睡眠风 3:智能风*
short time; //0~15H*
unsigned char led; //1开,0关*
unsigned char head; //0关闭 1:左右 2:上下 3:3D*
unsigned char gear; //0关闭 1~24*
}motor_status_struct_data;
风扇初始化函数
路径: ..\sample\internal\sample_1102\src\user_msg_deal.c
/*\* @breif 风扇初始化函数**/
void fan_init(void)
{
//风扇状态初始化
motor_status.user_code = 0xa;
motor_status.sync_motor = 0x0;
motor_status.speed_bit = 0x0;
motor_status.positive = 0x00;
motor_status.mode = 0;
motor_status.head = 0;
motor_status.led = 1;
motor_status.gear = 0;
motor_status.time = 0;
/*风扇软件初始化*/
extern void user_fan_soft_init(void);
user_fan_soft_init();
//电机初始化
agreement_5104_app_init();
//红外初始化
extern void ir_test_recive(void);
ir_test_recive();
//蓝牙初始化
extern void bt_test_recive(void);
bt_test_recive();
//按键初始化
extern void ci_key_init(void);
ci_key_init();
//数码管初始化
extern int digital_tube_init(void);
digital_tube_init();
//蜂鸣器初始化
buzzer_init();
//同步电机2初始化
sync_motor2_hw_init();
//温度传感器初始化
temp_sensor_init();
}
风扇应用任务处理
语音入口和标准SDK一致无改动,蓝牙、语音、按键、红外通过队列sys_msg_queue发送消息到UserTaskManageProcess任务。相关控制处理入口入下图所示例:
uint32_t deal_userdef_msg(sys_msg_t *msg)
{
uint32_t ret = 1;
switch(msg->msg_type)
{
/* 按键消息 */
case SYS_MSG_TYPE_KEY:
{
sys_msg_key_data_t *key_rev_data;
key_rev_data = &msg->msg_data.key_data;
userapp_deal_key_msg(key_rev_data);
break;
}
/* 红外消息 */
case SYS_MSG_TYPE_IR:
{
sys_msg_ir_data_t *ir_rev_data;
ir_rev_data = &msg->msg_data.ir_data;
userapp_deal_ir_msg(ir_rev_data);
break;
}
/* 蓝牙消息*/
case SYS_MSG_TYPE_BT:
{
sys_msg_bt_data_t *bt_rev_data;
bt_rev_data = &msg->msg_data.bt_data;
userapp_deal_bt_msg(bt_rev_data);
break;
}
#if MSG_COM_USE_UART_EN
/* CI串口协议消息 */
case SYS_MSG_TYPE_COM:
{
sys_msg_com_data_t *com_rev_data;
com_rev_data = &msg->msg_data.com_data;
userapp_deal_com_msg(com_rev_data);
break;
}
#endif
/* CI IIC 协议消息 */
#if MSG_USE_I2C_EN
case SYS_MSG_TYPE_I2C:
{
sys_msg_i2c_data_t *i2c_rev_data;
i2c_rev_data = &msg->msg_data.i2c_data;
userapp_deal_i2c_msg(i2c_rev_data);
break;
}
#endif
default:
break;
}
return ret;
}
5.2.1 方案特点¶
如用户不愿意替换原先使用的电控板,也可以用我司的芯片设计语音控制板,和原电控板通过串口进行通讯,也可以实现语音风扇的产品设计。该方式开发相对简单,可以快速对接完成产品,但成本略高,适用于需快速出产品的的方案或者第一次接触语音识别的方案。
该方案的设计框图如下,语音模块与电控模块需要4根线的串口连接,语音模块进行语音识别及根据风扇的状态进行信息播放,控制由电控模块完成。
5.2.2 硬件设计参考¶
用户可以使用我司芯片设计需要要求的语音模块,但为快速开发,推荐直接使用我司的以下标准模块:
用户直接使用我司标准语音模块时,有以下注意事项:
5.2.3 串口通讯方式¶
语音模块与电控模块通过串口进行信息交互,主要有两种方式,一种为语音模块主动播放,同时将信息发电控模块;另一种为语音模块被动播放,其分别描述如下:
语音模块主动播放模式
主动播放方式主要执行以下动作:
该方式的优点在于控制方式简单,由语音模块单线输出信息给电控模块。但缺点在于无法根据风扇的情况及按键情况进行语音反馈。
语音模块被动播放模式
被动播放方式主要执行以下动作:
该方式的优点在于语音模块根据电控模块的状态进行播放对应内容,可以进行最合适的反馈,体验感好;同时如果电控模块通过按键或者遥控进行控制,语音模块也可以进行状态播放。缺点在于会多一次串口通信的过程。
5.2.4 SDK包说明和模块串口通讯协议¶
我司为用户提供了串口通讯方案完整的SDK包,用户可以到 ☞启英泰伦语音AI平台 上获取相关SDK开发包。
模块的串口通讯建议使用我司标准协议,具体格式请参考 ☞串口协议 。
以下是语音模块发给电控模块的一个命令词及协议参考:
命令词 | 帧头 | 长度 | 类型 | 命令 | 序号 | 语音ID | 保留 | 分数 | 累加和 | 帧尾 |
---|---|---|---|---|---|---|---|---|---|---|
小艾小艾 | A5 FC | 07 00 | A0 | 91 | XX | 00 00 00 00 | 00 00 | XX | XXXX | FB |
开风扇 | A5 FC | 07 00 | A0 | 91 | XX | 42 19 74 02 | 00 00 | XX | XXXX | FB |
打开风扇 | A5 FC | 07 00 | A0 | 91 | XX | 41 19 74 02 | 00 00 | XX | XXXX | FB |
关风扇 | A5 FC | 07 00 | A0 | 91 | XX | 82 19 74 02 | 00 00 | XX | XXXX | FB |
关闭风扇 | A5 FC | 07 00 | A0 | 91 | XX | 81 19 74 02 | 00 00 | XX | XXXX | FB |
开摇头 | A5 FC | 07 00 | A0 | 91 | XX | 86 22 74 02 | 00 00 | XX | XXXX | FB |
打开摇头 | A5 FC | 07 00 | A0 | 91 | XX | 85 22 74 02 | 00 00 | XX | XXXX | FB |
风扇摇头 | A5 FC | 07 00 | A0 | 91 | XX | 81 22 74 02 | 00 00 | XX | XXXX | FB |
关摇头 | A5 FC | 07 00 | A0 | 91 | XX | C5 22 74 02 | 00 00 | XX | XXXX | FB |
关闭摇头 | A5 FC | 07 00 | A0 | 91 | XX | C4 22 74 02 | 00 00 | XX | XXXX | FB |
停止摇头 | A5 FC | 07 00 | A0 | 91 | XX | C1 22 74 02 | 00 00 | XX | XXXX | FB |
风大点 | A5 FC | 07 00 | A0 | 91 | XX | E1 38 BC 02 | 00 00 | XX | XXXX | FB |
风大一点 | A5 FC | 07 00 | A0 | 91 | XX | 72 1A 98 01 | 00 00 | XX | XXXX | FB |
风大一些 | A5 FC | 07 00 | A0 | 91 | XX | 73 1A 98 01 | 00 00 | XX | XXXX | FB |
风再大点 | A5 FC | 07 00 | A0 | 91 | XX | 74 1A 98 01 | 00 00 | XX | XXXX | FB |
风小一点 | A5 FC | 07 00 | A0 | 91 | XX | 75 1A 98 01 | 00 00 | XX | XXXX | FB |
风小一些 | A5 FC | 07 00 | A0 | 91 | XX | 76 1A 98 01 | 00 00 | XX | XXXX | FB |
风小点 | A5 FC | 07 00 | A0 | 91 | XX | 5F 39 BC 02 | 00 00 | XX | XXXX | FB |
风再小点 | A5 FC | 07 00 | A0 | 91 | XX | 77 1A 98 01 | 00 00 | XX | XXXX | FB |
最大风 | A5 FC | 07 00 | A0 | 91 | XX | C7 39 BC 02 | 00 00 | XX | XXXX | FB |
最小风 | A5 FC | 07 00 | A0 | 91 | XX | 48 3A BC 02 | 00 00 | XX | XXXX | FB |
定时关机 | A5 FC | 07 00 | A0 | 91 | XX | 01 0F 95 01 | 00 00 | XX | XXXX | FB |
关闭定时 | A5 FC | 07 00 | A0 | 91 | XX | 44 0E 95 01 | 00 00 | XX | XXXX | FB |
睡眠风 | A5 FC | 07 00 | A0 | 91 | XX | 82 27 74 02 | 00 00 | XX | XXXX | FB |
自然风 | A5 FC | 07 00 | A0 | 91 | XX | 03 28 74 02 | 00 00 | XX | XXXX | FB |
正常风 | A5 FC | 07 00 | A0 | 91 | XX | C1 CB 94 01 | 00 00 | XX | XXXX | FB |
声音大点 | A5 FC | 07 00 | A0 | 91 | XX | 47 19 94 01 | 00 00 | XX | XXXX | FB |
声音小点 | A5 FC | 07 00 | A0 | 91 | XX | 87 19 94 01 | 00 00 | XX | XXXX | FB |
定时一小时 | A5 FC | 07 00 | A0 | 91 | XX | 02 37 95 01 | 00 00 | XX | XXXX | FB |
定时两小时 | A5 FC | 07 00 | A0 | 91 | XX | 82 37 95 01 | 00 00 | XX | XXXX | FB |
定时二小时 | A5 FC | 07 00 | A0 | 91 | XX | 83 37 95 01 | 00 00 | XX | XXXX | FB |
定时三小时 | A5 FC | 07 00 | A0 | 91 | XX | 01 38 95 01 | 00 00 | XX | XXXX | FB |
定时四小时 | A5 FC | 07 00 | A0 | 91 | XX | 81 38 95 01 | 00 00 | XX | XXXX | FB |
定时五小时 | A5 FC | 07 00 | A0 | 91 | XX | 01 39 95 01 | 00 00 | XX | XXXX | FB |
定时六小时 | A5 FC | 07 00 | A0 | 91 | XX | 81 39 95 01 | 00 00 | XX | XXXX | FB |
开一档 | A5 FC | 07 00 | A0 | 91 | XX | 41 3F 94 01 | 00 00 | XX | XXXX | FB |
开二档 | A5 FC | 07 00 | A0 | 91 | XX | C1 3E 94 01 | 00 00 | XX | XXXX | FB |
开三档 | A5 FC | 07 00 | A0 | 91 | XX | 01 3F 94 01 | 00 00 | XX | XXXX | FB |
开四档 | A5 FC | 07 00 | A0 | 91 | XX | 41 3F 94 01 | 00 00 | XX | XXXX | FB |
开五档 | A5 FC | 07 00 | A0 | 91 | XX | 81 3F 94 01 | 00 00 | XX | XXXX | FB |
开六档 | A5 FC | 07 00 | A0 | 91 | XX | C1 3F 94 01 | 00 00 | XX | XXXX | FB |
开七档 | A5 FC | 07 00 | A0 | 91 | XX | 01 40 94 01 | 00 00 | XX | XXXX | FB |
开八档 | A5 FC | 07 00 | A0 | 91 | XX | 41 40 94 01 | 00 00 | XX | XXXX | FB |
开九档 | A5 FC | 07 00 | A0 | 91 | XX | 81 40 94 01 | 00 00 | XX | XXXX FB | |
退出唤醒 | A5 FC | 02 00 | A3 | 9A | XX | 00 B2 | XXXX | FB |
以下是一个电控模块发给语音模块的通讯协议参考:
对应播报音 | 帧头 | 长度 | 类型 | 命令 | 序号 | 控制 | 播放类型 | 播放序号 | 保留 | 累加和 | 帧尾 |
---|---|---|---|---|---|---|---|---|---|---|---|
小艾小艾 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 01 00 00 00 | 0 | XXXX | FB |
开风扇 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 02 00 00 00 | 0 | XXXX | FB |
打开风扇 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 03 00 00 00 | 0 | XXXX | FB |
关风扇 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 04 00 00 00 | 0 | XXXX | FB |
关闭风扇 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 05 00 00 00 | 0 | XXXX | FB |
开摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 06 00 00 00 | 0 | XXXX | FB |
打开摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 07 00 00 00 | 0 | XXXX | FB |
风扇摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 08 00 00 00 | 0 | XXXX | FB |
关摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 09 00 00 00 | 0 | XXXX | FB |
关闭摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0A 00 00 00 | 0 | XXXX | FB |
停止摇头 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0B 00 00 00 | 0 | XXXX | FB |
风大点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0C 00 00 00 | 0 | XXXX | FB |
风大一点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0D 00 00 00 | 0 | XXXX | FB |
风大一些 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0E 00 00 00 | 0 | XXXX | FB |
风再大点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 0F 00 00 00 | 0 | XXXX | FB |
风小一点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 10 00 00 00 | 0 | XXXX | FB |
风小一些 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 11 00 00 00 | 0 | XXXX | FB |
风小点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 12 00 00 00 | 0 | XXXX | FB |
风再小点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 13 00 00 00 | 0 | XXXX | FB |
最大风 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 14 00 00 00 | 0 | XXXX | FB |
最小风 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 15 00 00 00 | 0 | XXXX | FB |
定时关机 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 16 00 00 00 | 0 | XXXX | FB |
关闭定时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 17 00 00 00 | 0 | XXXX | FB |
睡眠风 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 18 00 00 00 | 0 | XXXX | FB |
自然风 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 19 00 00 00 | 0 | XXXX | FB |
正常风 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1A 00 00 00 | 0 | XXXX | FB |
声音大点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1B 00 00 00 | 0 | XXXX | FB |
声音小点 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1C 00 00 00 | 0 | XXXX | FB |
定时一小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1D 00 00 00 | 0 | XXXX | FB |
定时两小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1E 00 00 00 | 0 | XXXX | FB |
定时二小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 1F 00 00 00 | 0 | XXXX | FB |
定时三小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 20 00 00 00 | 0 | XXXX | FB |
定时四小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 21 00 00 00 | 0 | XXXX | FB |
定时五小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 22 00 00 00 | 0 | XXXX | FB |
定时六小时 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 23 00 00 00 | 0 | XXXX | FB |
开一档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 24 00 00 00 | 0 | XXXX | FB |
开二档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 25 00 00 00 | 0 | XXXX | FB |
开三档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 26 00 00 00 | 0 | XXXX | FB |
开四档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 27 00 00 00 | 0 | XXXX | FB |
开五档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 28 00 00 00 | 0 | XXXX | FB |
开六档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 29 00 00 00 | 0 | XXXX | FB |
开七档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 2A 00 00 00 | 0 | XXXX | FB |
开八档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 2B 00 00 00 | 0 | XXXX | FB |
开九档 | A5 FC | 07 00 | A1 | 92 | XX | 80 | 92 | 2C 00 00 00 | 0 | XXXX | FB |
注意:
#define VMUP_MSG_DATA_MAX_SIZE (20)//可根据实际数据大小调整
#pragma pack(1)
typedef struct
{
uint16_t header;
uint16_t data_length;
uint8_t msg_type;
uint8_t msg_cmd;
uint8_t msg_seq;
uint8_t msg_data[VMUP_MSG_DATA_MAX_SIZE];
/*uint16_t chksum; send add auto*/
/*uint8_t tail; send add auto*/
}sys_msg_com_data_t;
#pragma pack()
unsigned short Uart_Checksum(sys_msg_com_data_t * msg)
{
unsigned char i;
unsigned short t16_lenth;
unsigned short t16_check = 0;
uint8_t* rxbuf = uint8_t*&msg->msg_type
t16_lenth = msg->data_length + 3;//cmd_type,cmd,sequence 加上data数据的长度
if(t16_lenth > VMUP_MSG_DATA_MAX_SIZE + 3)//data length error
{
return 0xffff;
}
for(i=4;i<t16_lenth;i++)
{
t16_check += rxbuf[i];
}
return t16_check;
}
风扇产品在设计结构时,针对麦克风应当注意以下事项:
下图以落地风扇为例,讲述麦克风结构开孔及位置的建议方式,固定麦克风的结构件也需要考虑麦克风线方便引出导线和避免干扰。
风扇产品在设计结构时,针对喇叭应当注意以下事项:
下图是一个喇叭规格及开孔的建议。
编号 | 参考资料描述 | 获取方式 |
---|---|---|
1 | 标准离线SDK CI110X_SDK_ASR_Offline |
请到 ☞启英泰伦语音AI平台 上获取 |
2 | 风扇SDK Demo: 主控方案SDK 串口通讯方案SDK |
请到 ☞启英泰伦语音AI平台 上获取 |
3 | 测试固件 | 到 ☞启英泰伦语音AI平台 上获取 |
4 | 我司芯片和模块的选型指南 | 请点击 ☞硬件选型指南 查看 |
5 | 我司芯片硬件设计方法参考 | 请点击 ☞硬件设计参考 查看 |
6 | 麦克风和喇叭器件选型 | 请点击 ☞外围器件兼容列表 查看 |
7 | 产品结构设计 | 请点击 ☞产品结构设计 查看 |
8 | 软件开发方法和标准SDK说明 | 请点击 ☞软件开发 查看各部分内容 |
9 | 产品识别性能测试方法 | 请点击 ☞识别效果测试 查看 |
10 | 生产测试的方法 | 请点击 ☞生产测试 查看 |
用户如遇到使用问题,请到启英泰伦语音AI平台上提交技术工单,或直接联系我司技术人员获取协助。
文章浏览阅读1k次。通过使用ajax方法跨域请求是浏览器所不允许的,浏览器出于安全考虑是禁止的。警告信息如下:不过jQuery对跨域问题也有解决方案,使用jsonp的方式解决,方法如下:$.ajax({ async:false, url: 'http://www.mysite.com/demo.do', // 跨域URL ty..._nginx不停的xhr
文章浏览阅读2k次。关于在 Oracle 中配置 extproc 以访问 ST_Geometry,也就是我们所说的 使用空间SQL 的方法,官方文档链接如下。http://desktop.arcgis.com/zh-cn/arcmap/latest/manage-data/gdbs-in-oracle/configure-oracle-extproc.htm其实简单总结一下,主要就分为以下几个步骤。..._extproc
文章浏览阅读1.5w次。linux下没有上面的两个函数,需要使用函数 mbstowcs和wcstombsmbstowcs将多字节编码转换为宽字节编码wcstombs将宽字节编码转换为多字节编码这两个函数,转换过程中受到系统编码类型的影响,需要通过设置来设定转换前和转换后的编码类型。通过函数setlocale进行系统编码的设置。linux下输入命名locale -a查看系统支持的编码_linux c++ gbk->utf8
文章浏览阅读750次。今天准备从生产库向测试库进行数据导入,结果在imp导入的时候遇到“ IMP-00009:导出文件异常结束” 错误,google一下,发现可能有如下原因导致imp的数据太大,没有写buffer和commit两个数据库字符集不同从低版本exp的dmp文件,向高版本imp导出的dmp文件出错传输dmp文件时,文件损坏解决办法:imp时指定..._imp-00009导出文件异常结束
文章浏览阅读143次。当下是一个大数据的时代,各个行业都离不开数据的支持。因此,网络爬虫就应运而生。网络爬虫当下最为火热的是Python,Python开发爬虫相对简单,而且功能库相当完善,力压众多开发语言。本次教程我们爬取前程无忧的招聘信息来分析Python程序员需要掌握那些编程技术。首先在谷歌浏览器打开前程无忧的首页,按F12打开浏览器的开发者工具。浏览器开发者工具是用于捕捉网站的请求信息,通过分析请求信息可以了解请..._初级python程序员能力要求
文章浏览阅读7.6k次,点赞2次,收藏6次。@Service标注的bean,类名:ABDemoService查看源码后发现,原来是经过一个特殊处理:当类的名字是以两个或以上的大写字母开头的话,bean的名字会与类名保持一致public class AnnotationBeanNameGenerator implements BeanNameGenerator { private static final String C..._@service beanname
文章浏览阅读6.9w次,点赞73次,收藏463次。1.前序创建#include<stdio.h>#include<string.h>#include<stdlib.h>#include<malloc.h>#include<iostream>#include<stack>#include<queue>using namespace std;typed_二叉树的建立
文章浏览阅读7.1k次。在Asp.net上使用Excel导出功能,如果文件名出现中文,便会以乱码视之。 解决方法: fileName = HttpUtility.UrlEncode(fileName, System.Text.Encoding.UTF8);_asp.net utf8 导出中文字符乱码
文章浏览阅读2.1k次,点赞4次,收藏23次。第一次实验 词法分析实验报告设计思想词法分析的主要任务是根据文法的词汇表以及对应约定的编码进行一定的识别,找出文件中所有的合法的单词,并给出一定的信息作为最后的结果,用于后续语法分析程序的使用;本实验针对 PL/0 语言 的文法、词汇表编写一个词法分析程序,对于每个单词根据词汇表输出: (单词种类, 单词的值) 二元对。词汇表:种别编码单词符号助记符0beginb..._对pl/0作以下修改扩充。增加单词
文章浏览阅读773次。我在使用adb.exe时遇到了麻烦.我想使用与bash相同的adb.exe shell提示符,所以我决定更改默认的bash二进制文件(当然二进制文件是交叉编译的,一切都很完美)更改bash二进制文件遵循以下顺序> adb remount> adb push bash / system / bin /> adb shell> cd / system / bin> chm..._adb shell mv 权限
文章浏览阅读6.8k次,点赞12次,收藏125次。1. 单目相机标定引言相机标定已经研究多年,标定的算法可以分为基于摄影测量的标定和自标定。其中,应用最为广泛的还是张正友标定法。这是一种简单灵活、高鲁棒性、低成本的相机标定算法。仅需要一台相机和一块平面标定板构建相机标定系统,在标定过程中,相机拍摄多个角度下(至少两个角度,推荐10~20个角度)的标定板图像(相机和标定板都可以移动),即可对相机的内外参数进行标定。下面介绍张氏标定法(以下也这么称呼)的原理。原理相机模型和单应矩阵相机标定,就是对相机的内外参数进行计算的过程,从而得到物体到图像的投影_相机-投影仪标定
文章浏览阅读2.2k次。文章目录Wayland 架构Wayland 渲染Wayland的 硬件支持简 述: 翻译一篇关于和 wayland 有关的技术文章, 其英文标题为Wayland Architecture .Wayland 架构若是想要更好的理解 Wayland 架构及其与 X (X11 or X Window System) 结构;一种很好的方法是将事件从输入设备就开始跟踪, 查看期间所有的屏幕上出现的变化。这就是我们现在对 X 的理解。 内核是从一个输入设备中获取一个事件,并通过 evdev 输入_wayland