智能硬件集成

本文档旨在帮助您如何在智能硬件上完成AI实时互动应用的搭建。

场景描述

针对智能穿戴设备、陪伴机器人、智能家居等智能硬件对高质量、低延迟AI交互的需求,AI实时互动提供了一套完善的硬件集成方案。该方案旨在帮助开发者迅速验证并将对话式AI集成到智能硬件中,从而实现“AI常态化”的目标。该方案适用于多种场景,包括AI玩具、教育硬件、陪伴设备、穿戴个人助手以及家居语音助手。

前提说明

  • 目前提供杰理AC791 乐鑫ESP32-S3两种芯片支持。更多芯片支持,请提交工单咨询。

  • 您需要开通AI实时互动,并且提前好创建智能体。详细内容,请参见音视频通话快速入门

  • 您需要申请智能硬件License。具体详情,请您联系商务经理。

集成步骤

乐鑫ESP32-S3

交互流程

image

源码下载

下载地址请参见GitHub开源项目

环境配置

搭建ESP-ADF开发环境,请参见乐鑫高级开发框架指南

跑通Demo

  1. 请参考乐鑫官网搭建开发环境。本Demo需要用到音频3A,所以需要在esp-idf目录中还需要打一个补丁,否则会报 “AUDIO_THREAD: Not found right xTaskCreateRestrictedPinnedToCore”的错误。

    cd esp-adf/esp-idf   # esp-idf目录
    git apply ../idf_patches/idf_v5.4_freertos.patch
  2. CloneDemo源码到本地,打开工程编译Kconfig.projbuild配置文件,填写WiFi、智能体信息及License。

    menu "Example Configuration"
    
    config WIFI_SSID
        string "WiFi SSID"
    	default "xxx"
    	help
    		SSID (network name) for the example to connect to.
    
    config WIFI_PASSWORD
        string "WiFi Password"
        default "xxx"
    	help
    		WiFi password (WPA or WPA2) for the example to use.
    
    		Can be left blank if the network has no security set.
    
    config AUDIO_PLAY_VOLUME
        int "Audio play volume"
        default 90
    
    config AUDIO_RECORDER_AEC_ENABLE
        bool
        default y
    
    config RTC_APP_ID
        string "智能体关联的RTC应用Id(警告:仅用于开发调试使用)"
        default "xxx"
    
    config RTC_APP_KEY
        string "智能体关联的RTC应用Keyd(警告:仅用于开发调试使用)"
        default "xxx" 
    
    config RTC_USER_ID
        string "当前用户参与智能体通话的用户Id(建议每个设备使用唯一的Id)"
        default "123"
    
    
    config VOICE_AGENT_ID
        string  "语音智能体ID(需要提前在控制台上创建智能体)"
        default "xxx"
    
    config VOICE_AGENT_REGION
        string "语音智能体所属区域)"
        default "cn-xxx"
    
    
    config LICENSE_PRODUCT_ID
        string "请输入License产品ID,请联系商务经理获取"
        default "xxx"
    
    config LICENSE_AUTH_CODE
        string "请输入License授权码,请联系商务经理获取"
        default "xxx"
    
    config LICENSE_DEVICE_ID
        string "设备序列号"
        default "xxx"
    
    
    endmenu
    重要

    RTC_APP_KEY此次在本地生成签名Token,仅用于开发阶段的本地调试。对于线上版本,请勿内置RTC_APP_KEY,请使用服务端生成签名并下发方式。请参见生成ARTC鉴权Token生成Token,在智能硬件场景,生成的Token无需进行base64转化,直接将json结果进行下发。

  3. 编译Demo工程及烧录,请参见ESP-IDF编程指南

  4. 运行Demo,监控窗口会输出初始化、设置按键事件监听、链接WiFi的日志,当打印出 “Main: [ 5 ] Initialize finish, listen to events” 后,说明初始化完成,此时可以按播放键(左侧上键)开始进行通话。

    I (1309) sleep_gpio: Configure to isolate all GPIO pins in sleep state
    I (1315) sleep_gpio: Enable automatic switching of GPIO sleep configuration
    I (1322) main_task: Started on CPU0
    I (1325) esp_psram: Reserving pool of 32K of internal memory for DMA/internal allocations
    I (1333) main_task: Calling app_main()
    I (1336) Main: [ 1 ] Initialize start
    I (1355) Main: [1.1] Initialize peripherals
    I (1356) Main: [ 2 ] Start and wait for Wi-Fi network
    W (1368) wifi:Password length matches WPA2 standards, authmode threshold changes from OPEN to WPA2
    W (1402) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:43
    W (1410) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:43
    W (1418) PERIPH_WIFI: Wi-Fi disconnected from SSID xxx, auto-reconnect enabled, reconnect after 1000 ms
    W (4825) PERIPH_WIFI: Wi-Fi disconnected from SSID xxx, auto-reconnect enabled, reconnect after 1000 ms
    W (5894) PERIPH_WIFI: WiFi Event cb, Unhandle event_base:WIFI_EVENT, event_id:4
    I (7426) Main: [2.1] Initializing SNTP
    I (9042) Main: [ 3 ] Start codec chip
    W (9042) i2c_bus_v2: I2C master handle is NULL, will create new one
    W (9082) ES7210: Enable TDM mode. ES7210_SDP_INTERFACE2_REG12: 2
    I (9094) Main: [ 4 ] Set up event listener
    I (9095) Main: [ 5 ] Initialize finish, listen to events

错误说明

如果运行Demo后,出现以下证书过期的报错,一般情况下是连WiFi不稳定,NTP时间校对请求失败了,导致获取SDK使用初始时间进行校验从而校验不通过。

[1970-01-01 00:00:35.715][ERROR] [license.c:276][hermes_sdk] license response code is 400, dataSize: 321
[1970-01-01 00:00:35.717][ERROR] [license.c:300][hermes_sdk] license refresh fail with code=-3, svcCode=InvalidTimeStamp. Expired, regeustId=c401D243-E831-5AD9-A756-283A94D314FF
[1970-01-01 00:00:35.730][ERROR] [license.c:375][hermes_sdk] parse license response failed with result: -3
[1970-01-01 00:00:35.739][ERROR] [artc _aicall.c:79][hermes_sdk] raise error event code: -10001 msg: action return: -2147481342

您需要在运行本Demo时请确保WiFi可正常访问,例如切换热点等;本DemoWiFi链接仅做简单示例,在实际生成时建议做好wifi断连后重连工作,在重连后重新对时。

杰理AC791

交互流程

image

源码下载

下载地址请参见GitHub开源项目

环境配置

搭建杰理AC791序列开发版环境,请参见杰理开发环境安装说明

跑通Demo

  1. Clone杰理SDK到本地。

  2. CloneDemo源码到杰理的apps/demo里,Clone修改目录名为demo_artc_aicall

    - FW-AC79_AIOT_SDK
      - apps
        - demo
          - demo_artc_aicall (注意,这里文件名是下划线分割)
  3. 在目录demo_artc_aicall里,使用CodeBlocks IDE打开工程文件board/wl82/AC791N_DEMO_ARTC_AICALL.cbp

  4. 进入artc_device_helper.c文件,修改WiFiSSIDPWD。

    // 设置WiFissidpwd,用于链接网络
    #define WIFI_STA_SSID "ssid"
    #define WIFI_STA_PWD  "pwd"
  5. 进入artc_aicall_demo.c文件,修改License及智能体信息。

    // 智能体通话的License信息
    #define LICENSE_PRODUCT_ID "xxx"  // License产品Id
    #define LICENSE_AUTH_CODE "xxx"   // License授权码
    #define LICENSE_DEVICE_ID "xxx"   // 设备唯一Id
    
    // 当前用户参与智能体通话的用户Id
    #define USER_ID "xxxx"               
    // 智能体Id
    #define VOICE_AGENT_ID "xxxx"
    // 智能体所在的区域
    #define AGENT_REGION "xxxx"
    // 智能体关联的RTC应用Id
    #define RTC_APP_ID "xxxx"
    // 智能体关联的RTC应用Key
    #define RTC_APP_KEY "xxxx"
    重要

    RTC_APP_KEY此次在本地生成签名Token,仅用于开发阶段的本地调试。对于线上版本,请勿内置RTC_APP_KEY,请使用服务端生成签名并下发方式。请参见生成ARTC鉴权Token生成Token,在智能硬件场景,生成的Token无需进行base64转化,直接将json结果进行下发。

  6. 编译Demo工程。如何编译,请参见杰理官网文档

  7. 运行Demo。通电后,按下按键与智能体进行互动。

        - `K1`: 启动智能体通话
        - `K2`: 挂断通话
        - `K3`: 打断智能体讲话
        - `K4`: 停止发送音频给智能体
        - `K5`: 继续发送音频给智能体
  8. 查看实时日志,请连接串口并且通过串口工具进行查看。