芯片开放社区
直播中

qjqb

8年用户 1278经验值
擅长:5762
私信 关注
[技术讨论]

【1024平头哥开发套件开发体验】之智能语音控制电视实现

1、先看看与智能语音开发板CB5654板级适配组件,这个要多看看熟悉


其中一部分

bootimgs文件夹              - 引导固件

configs文件夹                 - 默认的系统分区及编译链接文件

dspalg_cxc文件夹             - 士兰语音识别方案核间通讯接口

include文件夹          - 包含引脚配置定义、OS配置文件、LWIP配置文件

audio文件夹            - 音频初始化及 软VAD低功耗框架

base_init.c                 -  板级初始化

pinmux_init.c    -  引脚复用配置

soc_lpm.c             -  低功耗适配

board_lpm.c             - 板级低功耗处理

package.yaml     - 组件配置文件


2、开发板上有一排插针,其中两个引脚是UART3,先解决引脚复用。




pinmux_init.c文件增加



关键部分代码位置:

  1. '''C

  2. #include

  3. #include


  4. #include

  5. #include

  6. #include


  7. #include

  8. #include

  9. #include


  10. #include "board.h"


  11. extern void ioreuse_initial(void);


  12. static void board_pinmux_config(void)

  13. {

  14.     //console

  15.     drv_pinmux_config(CONSOLE_TXD, CONSOLE_TXD_FUNC);

  16.     drv_pinmux_config(CONSOLE_RXD, CONSOLE_RXD_FUNC);

  17.         //UART3

  18.         drv_pinmux_config(UART3_TXD, UART3_TXD_FUNC);

  19.     drv_pinmux_config(UART3_RXD, UART3_RXD_FUNC);


  20.     // BT

  21.     drv_pinmux_config(BT_UART_TXD, BT_UART_TXD_FUNC);

  22.     drv_pinmux_config(BT_UART_RXD, BT_UART_RXD_FUNC);

  23. '''


include/board_config.h文件增加:


关键部分代码位置:

  1. '''C

  2. #IFndef __BOARD_CONFIG_H__

  3. #define __BOARD_CONFIG_H__


  4. #include


  5. /* 系统 */

  6. //1:1.2V  2:1.0V  3:1.4V

  7. #define SOC_DSP_LDO_LEVEL 3


  8. /* console */

  9. #define CONSOLE_TXD PA4

  10. #define CONSOLE_RXD PA5

  11. #define CONSOLE_TXD_FUNC PA4_UART2_TX

  12. #define CONSOLE_RXD_FUNC PA5_UART2_RX

  13. #define CONSOLE_UART_IDX 1

  14. //UART3

  15. #define UART3_TXD PD7

  16. #define UART3_RXD PD8

  17. #define UART3_TXD_FUNC PD7_UART3_TX

  18. #define UART3_RXD_FUNC PD8_UART3_RX

  19. #define UART3_IDX 2


  20. /* LED */

  21. #define PIN_LED_R LED_PIN_NOT_SET

  22. #define PIN_LED_G PD4

  23. #define PIN_LED_B LED_PIN_NOT_SET

  24. #define LED_FLIP_FLAG 1 /* 低电平亮 */

  25. '''


3、串口UART3接的是红外学习模块



4、appsrcaui_cloudaliyunnlsaui_nlp_action_audio.c 语音触发关键部分代码位置:

  1. '''C

  2. /**

  3. * 解析ASR&NLP信息

  4. */

  5. int aui_nlp_action_set_volume(cJSON *js, uint8_t *need_resume)

  6. {

  7.         aos_dev_t *comm_handleB = NULL;      

  8.         char my1[] = {0xFA,0xFD,0x02,0x01,0xDF};

  9.         char my2[] = {0xFA,0xFD,0x02,0x00,0xDF};



  10.         comm_handleB = uart_open_id("uart", 2);


  11.         uart_config_t configabc;

  12.     uart_config_default(&configabc);

  13.     configabc.baud_rate = 115200;

  14.     uart_config(comm_handleB, &configabc);

  15.         uart_set_type(comm_handleB, UART_TYPE_GENERAL);



  16.     int    ret      = -1;

  17.     int    vol_step = 10;


  18.     cJSON *action_params = cJSON_GetObjectItemByPath(js, "payload.action_params");

  19.     if(cJSON_IsArray(action_params)) {

  20.         cJSON *param = NULL;

  21.         cJSON *param_name = NULL, *param_value = NULL;

  22.         char *action = NULL;

  23.         cJSON_ArrayForEach(param, action_params) {

  24.             if (cJSON_HasObjectItem(param, "name")) {

  25.                 param_name = cJSON_GetObjectItemCaseSensitive(param, "name");

  26.                 if (json_string_eq(param_name, "sound") && cJSON_HasObjectItem(param, "value")) {

  27.                     param_value = cJSON_GetObjectItemCaseSensitive(param, "value");

  28.                     action = param_value->valuestring;

  29.                     LOGD(TAG, "volume action [%s]000", action);

  30.                                         if (strcmp(action, "down")==0){

  31.                                                 //LOGD(TAG, "---down---");

  32.                                                 uart_send(comm_handleB, &my1, 5);

  33.                                         }

  34.                                         if (strcmp(action, "up")==0){

  35.                                                 //LOGD(TAG, "---up---");

  36.                                                 uart_send(comm_handleB, &my2, 5);

  37.                                         }

  38.                 }

  39.                 if ((json_string_eq(param_name, "degree") && cJSON_HasObjectItem(param, "value"))

  40.                 || (json_string_eq(param_name, "volumn") && cJSON_HasObjectItem(param, "value"))){

  41.                     param_value = cJSON_GetObjectItemCaseSensitive(param, "value");

  42.                     vol_step = atoi(param_value->valuestring);

  43.                     LOGD(TAG, "volume degree [%d]", vol_step);

  44.                 }

  45.             }

  46.         }


  47.         if (strcmp(action, "up") == 0) {

  48.             SMTaudio_vol_up(vol_step);

  49.             ret = 0;

  50.         } else if (strcmp(action, "down") == 0) {

  51.             smtaudio_vol_down(vol_step);

  52.             ret = 0;

  53.         } else if (strcmp(action, "max") == 0) {

  54.             smtaudio_vol_set(100);

  55.             ret = 0;

  56.         } else if (strcmp(action, "min") == 0) {

  57.             smtaudio_vol_set(0);

  58.             ret = 0;

  59.         } else if (strcmp(action, "mute") == 0) {

  60.             *need_resume = 0;

  61.             ret          = 0;

  62.         } else if (strcmp(action, "unmute") == 0) {

  63.             *need_resume = 1;

  64.             ret          = 0;

  65.         } else if (strcmp(action, "set") == 0) {

  66.             smtaudio_vol_set(20);

  67.             ret = 0;

  68.         }

  69.     } else {

  70.         LOGE(TAG, "set_volume payload error!");

  71.         return -1;

  72.     }


  73.     return ret;

  74. }

  75. '''


经过较漫长的编译与烧录之后,就可以愉快的玩耍了。


附上视频链接:


文章转载自:平头哥芯片开放社区 作者:Spring123

更多回帖

发帖
×
20
完善资料,
赚取积分