芯片开放社区
直播中

春天一满屋

4年用户 364经验值
擅长:嵌入式技术
私信 关注

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

1、先看看与智能语音开发板CB5654板级适配组件,这个要多看看熟悉
0023.png
其中一部分
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,先解决引脚复用。
0024.png
0025.png
pinmux_init.c文件增加
0026.png
关键部分代码位置:
  1. #include
  2. #include

  3. #include
  4. #include
  5. #include

  6. #include
  7. #include
  8. #include

  9. #include "board.h"

  10. extern void ioreuse_initial(void);

  11. static void board_pinmux_config(void)
  12. {
  13.     //console
  14.     drv_pinmux_config(CONSOLE_TXD, CONSOLE_TXD_FUNC);
  15.     drv_pinmux_config(CONSOLE_RXD, CONSOLE_RXD_FUNC);
  16.         //UART3
  17.         drv_pinmux_config(UART3_TXD, UART3_TXD_FUNC);
  18.     drv_pinmux_config(UART3_RXD, UART3_RXD_FUNC);

  19.     // BT
  20.     drv_pinmux_config(BT_UART_TXD, BT_UART_TXD_FUNC);
  21.     drv_pinmux_config(BT_UART_RXD, BT_UART_RXD_FUNC);
include/board_config.h文件增加:
0027.png
关键部分代码位置:

  1. #ifndef __BOARD_CONFIG_H__
  2. #define __BOARD_CONFIG_H__

  3. #include

  4. /* 系统 */
  5. //1:1.2V  2:1.0V  3:1.4V
  6. #define SOC_DSP_LDO_LEVEL 3

  7. /* console */
  8. #define CONSOLE_TXD PA4
  9. #define CONSOLE_RXD PA5
  10. #define CONSOLE_TXD_FUNC PA4_UART2_TX
  11. #define CONSOLE_RXD_FUNC PA5_UART2_RX
  12. #define CONSOLE_UART_IDX 1
  13. //UART3
  14. #define UART3_TXD PD7
  15. #define UART3_RXD PD8
  16. #define UART3_TXD_FUNC PD7_UART3_TX
  17. #define UART3_RXD_FUNC PD8_UART3_RX
  18. #define UART3_IDX 2

  19. /* LED */
  20. #define PIN_LED_R LED_PIN_NOT_SET
  21. #define PIN_LED_G PD4
  22. #define PIN_LED_B LED_PIN_NOT_SET
  23. #define LED_FLIP_FLAG 1 /* 低电平亮 */
3、串口UART3接的是红外学习模块
0028.jpg
4、appsrcaui_cloudaliyunnlsaui_nlp_action_audio.c 语音触发关键部分代码位置:

  1. /**
  2. * 解析ASR&NLP信息
  3. */
  4. int aui_nlp_action_set_volume(cJSON *js, uint8_t *need_resume)
  5. {
  6.         aos_dev_t *comm_handleB = NULL;       
  7.         char my1[] = {0xFA,0xFD,0x02,0x01,0xDF};
  8.         char my2[] = {0xFA,0xFD,0x02,0x00,0xDF};
  9.        
  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.        
  17.     int    ret      = -1;
  18.     int    vol_step = 10;

  19.     cJSON *action_params = cJSON_GetObjectItemByPath(js, "payload.action_params");
  20.     if(cJSON_IsArray(action_params)) {
  21.         cJSON *param = NULL;
  22.         cJSON *param_name = NULL, *param_value = NULL;
  23.         char *action = NULL;
  24.         cJSON_ArrayForEach(param, action_params) {
  25.             if (cJSON_HasObjectItem(param, "name")) {
  26.                 param_name = cJSON_GetObjectItemCaseSensitive(param, "name");
  27.                 if (json_string_eq(param_name, "sound") && cJSON_HasObjectItem(param, "value")) {
  28.                     param_value = cJSON_GetObjectItemCaseSensitive(param, "value");
  29.                     action = param_value->valuestring;
  30.                     LOGD(TAG, "volume action [%s]000", action);
  31.                                         if (strcmp(action, "down")==0){
  32.                                                 //LOGD(TAG, "---down---");
  33.                                                 uart_send(comm_handleB, &my1, 5);
  34.                                         }
  35.                                         if (strcmp(action, "up")==0){
  36.                                                 //LOGD(TAG, "---up---");
  37.                                                 uart_send(comm_handleB, &my2, 5);
  38.                                         }
  39.                 }
  40.                 if ((json_string_eq(param_name, "degree") && cJSON_HasObjectItem(param, "value"))
  41.                 || (json_string_eq(param_name, "volumn") && cJSON_HasObjectItem(param, "value"))){
  42.                     param_value = cJSON_GetObjectItemCaseSensitive(param, "value");
  43.                     vol_step = atoi(param_value->valuestring);
  44.                     LOGD(TAG, "volume degree [%d]", vol_step);
  45.                 }
  46.             }
  47.         }

  48.         if (strcmp(action, "up") == 0) {
  49.             smtaudio_vol_up(vol_step);
  50.             ret = 0;
  51.         } else if (strcmp(action, "down") == 0) {
  52.             smtaudio_vol_down(vol_step);
  53.             ret = 0;
  54.         } else if (strcmp(action, "max") == 0) {
  55.             smtaudio_vol_set(100);
  56.             ret = 0;
  57.         } else if (strcmp(action, "min") == 0) {
  58.             smtaudio_vol_set(0);
  59.             ret = 0;
  60.         } else if (strcmp(action, "mute") == 0) {
  61.             *need_resume = 0;
  62.             ret          = 0;
  63.         } else if (strcmp(action, "unmute") == 0) {
  64.             *need_resume = 1;
  65.             ret          = 0;
  66.         } else if (strcmp(action, "set") == 0) {
  67.             smtaudio_vol_set(20);
  68.             ret = 0;
  69.         }
  70.     } else {
  71.         LOGE(TAG, "set_volume payload error!");
  72.         return -1;
  73.     }

  74.     return ret;
  75. }

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

附上视频链接:
https://www.bilibili.com/video/BV1o44y1E7Rb/

回帖(2)

谭藤先

2022-1-15 21:09:46
怎么搞到红外和电视的交互协议呢?
举报

风生水兴

2022-1-21 15:43:44
这个希望官方可以出个详细的demo开发说明文档,简单的这些,看起来就有好多的疑问。
应用是很好的一个应用,谢谢。
举报

更多回帖

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