当前位置: 首页 > news >正文

【AI智能体】智能音视频-基于乐鑫 ESP32 实现音视频通话

本文介绍如何在乐鑫 ESP32 芯片上实现与智能体音视频通话,你可以选择基于 RTC 实现音视频通话,或基于 WebSocket 实现语音通话。

RTC 音视频通话

乐鑫提供了 esp-adf 示例项目源码,本文将基于该示例项目源码,详细演示如何在乐鑫 ESP32-S3 芯片的 ESP32-S3-Korvo-2 开发板上实现与智能体的音视频通话功能。该开发板适用于开发多种智能产品,包括但不限于音视频通话设备、智能门铃、宠物监控系统、智能音响、儿童玩具以及智能家具面板等。

搭建开发环境

本文基于 esp-adf 示例项目源码进行实现,该仓库已内置稳定版本的 ESP-IDF,无需额外安装。详细的 ESP32-S3 开发环境信息请参见 ESP-IDF 快速入门。

获取示例代码。

在终端创建一个 esp 目录用于存放相关代码。

mkdir ~/esp

    进入 esp 目录并克隆代码。

    cd ~/esp
    git clone https://github.com/espressif/esp-adf.git

      递归更新子模块。

      git submodule update --init --recursive

      在 adf 仓库下运行安装脚本。

      sh ./install.sh
      sh ./export.sh

      配置环境变量,ADF_PATH 和 IDF_PATH 的获取方法请参见 ESP ADF 快速入门。

      ADF_PATH={{你的 adf 路径}}
      IDF_PATH={{你的 idf 路径}}

      适配硬件

      选择开发板

      进入本地 esp-adf 代码的 volc_rtc 目录。

      cd ~/esp/esp-adf/examples/ai_agent/volc_rtc

      设置目标芯片型号,本文使用 esp32s3。

      idf.py set-target esp32s3

      选择开发板。

      idf.py menuconfig

      在弹出的交互界面中选择使用的开发板,本文使用 ESP32-S3-Korvo-2 ,按 S 保存。

      修改 I/O 配置(可选)

      说明:

      如果使用乐鑫官方的 ESP32-S3-Korvo-2 开发板,请忽略该步骤。

      由于本示例使用的 01_RTC_LCD 开发板在视频流和扬声器的针脚与官方 ESP32-S3-Korvo-2 不一致,需修改驱动代码以确保正常运行。

      使用编码 IDE 打开 esp-adf 目录,单击 components/audio_board_board.c 文件。

       

      修改以下内容:

      扬声器 PA 针脚:找到 audio_board_init 函数,将 PA 针脚修改为 TCA9554 的 0 号针脚。将下面的代码替换掉audio_board_init 函数。

      audio_board_handle_t audio_board_init(void)
      {ESP_LOGW(TAG, "Init board Start!");if (board_handle) {ESP_LOGW(TAG, "The board has already been initialized!");return board_handle;}board_handle = (audio_board_handle_t) audio_calloc(1, sizeof(struct audio_board_handle));AUDIO_MEM_CHECK(TAG, board_handle, return NULL);board_handle->audio_hal = audio_board_codec_init();board_handle->adc_hal = audio_board_adc_init();esp_tca9554_config_t pca_cfg = {.i2c_scl = GPIO_NUM_18,.i2c_sda = GPIO_NUM_17,.interrupt_output = -1,};tca9554_init(&pca_cfg);tca9554_set_io_config(BIT(0), TCA9554_IO_OUTPUT);tca9554_set_output_state(BIT(0), TCA9554_IO_HIGH);return board_handle;
      }

        屏幕偏选信号:屏幕型号为 ST7789,触摸 IC 为 GT911。找到 audio_board_lcd_init 函数中的 io_config 对象,将如下代码替换掉io_config中的初始化代码。

        esp_lcd_panel_io_spi_config_t io_config = {.dc_gpio_num = LCD_DC_GPIO,.cs_gpio_num = LCD_CS_GPIO,.pclk_hz = 60 * 1000 * 1000,.lcd_cmd_bits = 8,.lcd_param_bits = 8,.spi_mode = 0,.trans_queue_depth = 10,.on_color_trans_done = cb,.user_ctx = NULL,};

        修改示例项目源码

        你需要修改 esp-adf 示例代码中的 WiFi 信息和扣子配置。

        配置 WiFi 信息。

        在 menuconfig 中,填写 SSID 和 PASSWORD,然后编译下载到开发板中。

        配置扣子。

        在 coze_http_request.h 中修改如下配置:

        参数

        是否必选

        说明

        uri

        必选。

        请填写 https://api.coze.cn/v1/audio/rooms。

        authorization

        必选。

        请填写扣子的访问密钥,用于身份认证与鉴权。

        体验或调试场景:建议开发者生成一个短期的个人访问令牌(PAT),快速跑通 Realtime SDK 的整体流程。个人访问令牌获取方式可参考添加个人访问令牌。

        线上环境:线上环境应使用 OAuth 鉴权方案。OAuth 鉴权方案的详细说明可参考OAuth 应用管理。

        bot_id

        必选。

        智能体 ID,获取方法如下:

        进入智能体的开发页面,开发页面 URL 中 bot 参数后的数字即为智能体 ID。例如, URL 为扣子,则智能体 ID 为73428668*****。

        voice_id

        可选。

        音色 ID。默认采用柔美女友音色,音色 ID 为 7426720361733046281。你可以调用查看音色列表 API 查看当前可用的音色列表,也可以使用系统音色列表。

        修改 HTTP 请求配置。

        说明:

        你也可以自行配置 TLS 证书,配置之后无需修改。

        在 byte_rtc_request.c 文件中,找到 byte_rtc_request 函数中的 http_client_config 变量,将该变量的声明替换为如下的代码:

        esp_http_client_config_t http_client_config = {.url = config->uri,.query = "esp",.event_handler = _http_event_handler,.user_data = &rsp_data,.disable_auto_redirect = true,.buffer_size = DEFAULT_STACK_SIZE,.buffer_size_tx = DEFAULT_STACK_SIZE,.skip_cert_common_name_check = true,.cert_pem = NULL,.transport_type = HTTP_TRANSPORT_OVER_SSL,.crt_bundle_attach = esp_crt_bundle_attach,.is_async = false,.timeout_ms = 10000,.keep_alive_enable = true
        };

        本文介绍如何在乐鑫 ESP32 芯片上实现与智能体音视频通话,你可以选择基于 RTC 实现音视频通话,或基于 WebSocket 实现语音通话。

        RTC 音视频通话

        乐鑫提供了 esp-adf 示例项目源码,本文将基于该示例项目源码,详细演示如何在乐鑫 ESP32-S3 芯片的 ESP32-S3-Korvo-2 开发板上实现与智能体的音视频通话功能。该开发板适用于开发多种智能产品,包括但不限于音视频通话设备、智能门铃、宠物监控系统、智能音响、儿童玩具以及智能家具面板等。

        搭建开发环境

        本文基于 esp-adf 示例项目源码进行实现,该仓库已内置稳定版本的 ESP-IDF,无需额外安装。详细的 ESP32-S3 开发环境信息请参见 ESP-IDF 快速入门。

        获取示例代码。

        在终端创建一个 esp 目录用于存放相关代码。

        mkdir ~/esp

          进入 esp 目录并克隆代码。

          cd ~/esp
          git clone https://github.com/espressif/esp-adf.git

            递归更新子模块。

            git submodule update --init --recursive

            在 adf 仓库下运行安装脚本。

            sh ./install.sh
            sh ./export.sh

            配置环境变量,ADF_PATH 和 IDF_PATH 的获取方法请参见 ESP ADF 快速入门。

            ADF_PATH={{你的 adf 路径}}
            IDF_PATH={{你的 idf 路径}}

            适配硬件

            选择开发板

            进入本地 esp-adf 代码的 volc_rtc 目录。

            cd ~/esp/esp-adf/examples/ai_agent/volc_rtc

            设置目标芯片型号,本文使用 esp32s3。

            idf.py set-target esp32s3

            选择开发板。

            idf.py menuconfig

            在弹出的交互界面中选择使用的开发板,本文使用 ESP32-S3-Korvo-2 ,按 S 保存。

            修改 I/O 配置(可选)

            如果使用乐鑫官方的 ESP32-S3-Korvo-2 开发板,请忽略该步骤。

            由于本示例使用的 01_RTC_LCD 开发板在视频流和扬声器的针脚与官方 ESP32-S3-Korvo-2 不一致,需修改驱动代码以确保正常运行。

            使用编码 IDE 打开 esp-adf 目录,单击 components/audio_board_board.c 文件。

             

            修改以下内容:

            扬声器 PA 针脚:找到 audio_board_init 函数,将 PA 针脚修改为 TCA9554 的 0 号针脚。将下面的代码替换掉audio_board_init 函数。

            audio_board_handle_t audio_board_init(void)
            {ESP_LOGW(TAG, "Init board Start!");if (board_handle) {ESP_LOGW(TAG, "The board has already been initialized!");return board_handle;}board_handle = (audio_board_handle_t) audio_calloc(1, sizeof(struct audio_board_handle));AUDIO_MEM_CHECK(TAG, board_handle, return NULL);board_handle->audio_hal = audio_board_codec_init();board_handle->adc_hal = audio_board_adc_init();esp_tca9554_config_t pca_cfg = {.i2c_scl = GPIO_NUM_18,.i2c_sda = GPIO_NUM_17,.interrupt_output = -1,};tca9554_init(&pca_cfg);tca9554_set_io_config(BIT(0), TCA9554_IO_OUTPUT);tca9554_set_output_state(BIT(0), TCA9554_IO_HIGH);return board_handle;
            }

              屏幕偏选信号:屏幕型号为 ST7789,触摸 IC 为 GT911。找到 audio_board_lcd_init 函数中的 io_config 对象,将如下代码替换掉io_config中的初始化代码。

              esp_lcd_panel_io_spi_config_t io_config = {.dc_gpio_num = LCD_DC_GPIO,.cs_gpio_num = LCD_CS_GPIO,.pclk_hz = 60 * 1000 * 1000,.lcd_cmd_bits = 8,.lcd_param_bits = 8,.spi_mode = 0,.trans_queue_depth = 10,.on_color_trans_done = cb,.user_ctx = NULL,};

              修改示例项目源码

              你需要修改 esp-adf 示例代码中的 WiFi 信息和扣子配置。

              配置 WiFi 信息。

              在 menuconfig 中,填写 SSID 和 PASSWORD,然后编译下载到开发板中。

              配置扣子。

              在 coze_http_request.h 中修改如下配置:

              参数

              是否必选

              说明

              uri

              必选。

              请填写 https://api.coze.cn/v1/audio/rooms。

              authorization

              必选。

              请填写扣子的访问密钥,用于身份认证与鉴权。

              体验或调试场景:建议开发者生成一个短期的个人访问令牌(PAT),快速跑通 Realtime SDK 的整体流程。个人访问令牌获取方式可参考添加个人访问令牌。

              线上环境:线上环境应使用 OAuth 鉴权方案。OAuth 鉴权方案的详细说明可参考OAuth 应用管理。

              bot_id

              必选。

              智能体 ID,获取方法如下:

              进入智能体的开发页面,开发页面 URL 中 bot 参数后的数字即为智能体 ID。例如, URL 为扣子,则智能体 ID 为73428668*****。

              voice_id

              可选。

              音色 ID。默认采用柔美女友音色,音色 ID 为 7426720361733046281。你可以调用查看音色列表 API 查看当前可用的音色列表,也可以使用系统音色列表。

              修改 HTTP 请求配置。

              你也可以自行配置 TLS 证书,配置之后无需修改。

              在 byte_rtc_request.c 文件中,找到 byte_rtc_request 函数中的 http_client_config 变量,将该变量的声明替换为如下的代码:

              esp_http_client_config_t http_client_config = {.url = config->uri,.query = "esp",.event_handler = _http_event_handler,.user_data = &rsp_data,.disable_auto_redirect = true,.buffer_size = DEFAULT_STACK_SIZE,.buffer_size_tx = DEFAULT_STACK_SIZE,.skip_cert_common_name_check = true,.cert_pem = NULL,.transport_type = HTTP_TRANSPORT_OVER_SSL,.crt_bundle_attach = esp_crt_bundle_attach,.is_async = false,.timeout_ms = 10000,.keep_alive_enable = true
              };

              本文介绍如何在乐鑫 ESP32 芯片上实现与智能体音视频通话,你可以选择基于 RTC 实现音视频通话,或基于 WebSocket 实现语音通话。

              RTC 音视频通话

              乐鑫提供了 esp-adf 示例项目源码,本文将基于该示例项目源码,详细演示如何在乐鑫 ESP32-S3 芯片的 ESP32-S3-Korvo-2 开发板上实现与智能体的音视频通话功能。该开发板适用于开发多种智能产品,包括但不限于音视频通话设备、智能门铃、宠物监控系统、智能音响、儿童玩具以及智能家具面板等。

              搭建开发环境

              本文基于 esp-adf 示例项目源码进行实现,该仓库已内置稳定版本的 ESP-IDF,无需额外安装。详细的 ESP32-S3 开发环境信息请参见 ESP-IDF 快速入门。

              获取示例代码。

              在终端创建一个 esp 目录用于存放相关代码。

              mkdir ~/esp

                进入 esp 目录并克隆代码。

                cd ~/esp
                git clone https://github.com/espressif/esp-adf.git

                  递归更新子模块。

                  git submodule update --init --recursive

                  在 adf 仓库下运行安装脚本。

                  sh ./install.sh
                  sh ./export.sh

                  配置环境变量,ADF_PATH 和 IDF_PATH 的获取方法请参见 ESP ADF 快速入门。

                  ADF_PATH={{你的 adf 路径}}
                  IDF_PATH={{你的 idf 路径}}

                  适配硬件

                  选择开发板

                  进入本地 esp-adf 代码的 volc_rtc 目录。

                  cd ~/esp/esp-adf/examples/ai_agent/volc_rtc

                  设置目标芯片型号,本文使用 esp32s3。

                  idf.py set-target esp32s3

                  选择开发板。

                  idf.py menuconfig

                  在弹出的交互界面中选择使用的开发板,本文使用 ESP32-S3-Korvo-2 ,按 S 保存。

                  修改 I/O 配置(可选)

                  如果使用乐鑫官方的 ESP32-S3-Korvo-2 开发板,请忽略该步骤。

                  由于本示例使用的 01_RTC_LCD 开发板在视频流和扬声器的针脚与官方 ESP32-S3-Korvo-2 不一致,需修改驱动代码以确保正常运行。

                  使用编码 IDE 打开 esp-adf 目录,单击 components/audio_board_board.c 文件。

                   

                  修改以下内容:

                  扬声器 PA 针脚:找到 audio_board_init 函数,将 PA 针脚修改为 TCA9554 的 0 号针脚。将下面的代码替换掉audio_board_init 函数。

                  audio_board_handle_t audio_board_init(void)
                  {ESP_LOGW(TAG, "Init board Start!");if (board_handle) {ESP_LOGW(TAG, "The board has already been initialized!");return board_handle;}board_handle = (audio_board_handle_t) audio_calloc(1, sizeof(struct audio_board_handle));AUDIO_MEM_CHECK(TAG, board_handle, return NULL);board_handle->audio_hal = audio_board_codec_init();board_handle->adc_hal = audio_board_adc_init();esp_tca9554_config_t pca_cfg = {.i2c_scl = GPIO_NUM_18,.i2c_sda = GPIO_NUM_17,.interrupt_output = -1,};tca9554_init(&pca_cfg);tca9554_set_io_config(BIT(0), TCA9554_IO_OUTPUT);tca9554_set_output_state(BIT(0), TCA9554_IO_HIGH);return board_handle;
                  }

                    屏幕偏选信号:屏幕型号为 ST7789,触摸 IC 为 GT911。找到 audio_board_lcd_init 函数中的 io_config 对象,将如下代码替换掉io_config中的初始化代码。

                    esp_lcd_panel_io_spi_config_t io_config = {.dc_gpio_num = LCD_DC_GPIO,.cs_gpio_num = LCD_CS_GPIO,.pclk_hz = 60 * 1000 * 1000,.lcd_cmd_bits = 8,.lcd_param_bits = 8,.spi_mode = 0,.trans_queue_depth = 10,.on_color_trans_done = cb,.user_ctx = NULL,};

                    修改示例项目源码

                    你需要修改 esp-adf 示例代码中的 WiFi 信息和扣子配置。

                    配置 WiFi 信息。

                    在 menuconfig 中,填写 SSID 和 PASSWORD,然后编译下载到开发板中。

                    配置扣子。

                    在 coze_http_request.h 中修改如下配置:

                    参数

                    是否必选

                    说明

                    uri

                    必选。

                    请填写 https://api.coze.cn/v1/audio/rooms。

                    authorization

                    必选。

                    请填写扣子的访问密钥,用于身份认证与鉴权。

                    体验或调试场景:建议开发者生成一个短期的个人访问令牌(PAT),快速跑通 Realtime SDK 的整体流程。个人访问令牌获取方式可参考添加个人访问令牌。

                    线上环境:线上环境应使用 OAuth 鉴权方案。OAuth 鉴权方案的详细说明可参考OAuth 应用管理。

                    bot_id

                    必选。

                    智能体 ID,获取方法如下:

                    进入智能体的开发页面,开发页面 URL 中 bot 参数后的数字即为智能体 ID。例如, URL 为扣子,则智能体 ID 为73428668*****。

                    voice_id

                    可选。

                    音色 ID。默认采用柔美女友音色,音色 ID 为 7426720361733046281。你可以调用查看音色列表 API 查看当前可用的音色列表,也可以使用系统音色列表。

                    修改 HTTP 请求配置。

                    你也可以自行配置 TLS 证书,配置之后无需修改。

                    在 byte_rtc_request.c 文件中,找到 byte_rtc_request 函数中的 http_client_config 变量,将该变量的声明替换为如下的代码:

                    esp_http_client_config_t http_client_config = {.url = config->uri,.query = "esp",.event_handler = _http_event_handler,.user_data = &rsp_data,.disable_auto_redirect = true,.buffer_size = DEFAULT_STACK_SIZE,.buffer_size_tx = DEFAULT_STACK_SIZE,.skip_cert_common_name_check = true,.cert_pem = NULL,.transport_type = HTTP_TRANSPORT_OVER_SSL,.crt_bundle_attach = esp_crt_bundle_attach,.is_async = false,.timeout_ms = 10000,.keep_alive_enable = true
                    };

                    创建并加入扣子房间。

                    你需要调用扣子的创建房间接口创建房间,再加入房间,才可以与智能体进行对话。在乐鑫示例代码的 volc_rtc.c 文件中已经实现了创建房间的代码,在实际使用的时候,你需要执行如下操作才能使用相关代码。

                    声明一个全局变量。

                    const char* g_default_room_id = NULL;  // 定义全局变量

                      修改文件中的byte_rtc_engine_create方法,引入请求扣子的代码,并使用扣子返回的 app_id 创建 RTC 引擎。

                       

                        使用扣子返回的 room_id 赋值给全局变量 g_default_room_id 。

                         

                          在voice_read_task方法中,用扣子返回的 room_id 指定对话时的 room_id。

                          byte_rtc_send_audio_data(s_volc_rtc.engine, g_default_room_id, voice_data, voice_data_read_sz, &audio_frame_info);

                          WebSocket 语音通话

                          乐鑫推出基于扣子 WebSocket 封装的轻量级 Espressif Coze SDK,能在 ESP32 嵌入式设备上接入扣子 WebSocket Open API,实现语音通话,具体请参见 Espressif Coze 官网,示例项目源码请参见 esp_websocket_client 示例项目源码。

                          相关文档

                          集成音视频 Realtime 嵌入式 SDK

                          硬件设备基于 WebSocket 实现语音交互

                          http://www.lryc.cn/news/582699.html

                          相关文章:

                        1. 从 CODING 停服到极狐 GitLab “接棒”,软件研发工具市场风云再起
                        2. 20250708-2-Kubernetes 集群部署、配置和验证-使用kubeadm快速部署一个K8s集群_笔记
                        3. Safetensors与大模型文件格式全面解析
                        4. 金融行业信息
                        5. Android 事件分发机制深度解析
                        6. Apache DolphinScheduler保姆级实操指南:云原生任务调度实战
                        7. 【Linux服务器】-安装ftp与sftp服务
                        8. 二刷(李宏毅深度学习,醍醐灌顶,长刷长爽)
                        9. .NET nupkg包的深度解析与安全防护指南
                        10. Linux 信号机制:操作系统的“紧急电话”系统
                        11. 【时时三省】(C语言基础)指针变量作为函数参数
                        12. 实战:Android 15 (API 35) 适配 构建踩坑全记录
                        13. Java零基础笔记07(Java编程核心:面向对象编程 {类,static关键字})
                        14. EXCEL(带图)转html
                        15. linux wsl2 docker 镜像复用快速方法
                        16. 解决阿里云ubuntu内存溢出导致vps死机无法访问 - 永久性增加ubuntu的swap空间 - 阿里云Linux实例内存溢出(OOM)问题修复方案
                        17. 代码详细注释:C语言实现控制台用户注册登录系统
                        18. Spring Boot + Easy Excel 自定义复杂样式导入导出
                        19. MySQL 8.0 OCP 1Z0-908 题目解析(22)
                        20. AI编程的未来是智能体原生开发?
                        21. MyBatis-Plus:深入探索与最佳实践
                        22. Vue的初步学习
                        23. 阿里云mysql数据丢失,如何通过服务器备份在其他服务器上恢复数据,并获取mysql丢失数据,完成mysql数据恢复
                        24. 如何在 Android Framework层面控制高通(Qualcomm)芯片的 CPU 和 GPU。
                        25. AWS OpenSearch Dev Tools使用
                        26. 跨平台软件构建方法及工具介绍
                        27. HCIA-Cloud 是什么?有啥用?
                        28. Vue 2现代模式打包:双包架构下的性能突围战
                        29. 在keil中使用stlink下载程序报错Invalid ROM Table
                        30. 最新团购源码商城 虚拟商城系统源码 全开源