汇干环 发表于 2025-8-23 15:43:57

ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型

ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型

首先贴一个阿里百炼实时多模态大模型的文档(找对这个文档花了我不少时间):
大模型服务平台百炼控制台
文档给出了一个 websocket python 示例,我们要做的是参考并移植到C环境下:
# pip install websocket-client
import json
import websocket
import os

API_KEY=os.getenv("DASHSCOPE_API_KEY")
API_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime"

headers = [
    "Authorization: Bearer " + API_KEY
]

def on_open(ws):
    print(f"Connected to server: {API_URL}")
def on_message(ws, message):
    data = json.loads(message)
    print("Received event:", json.dumps(data, indent=2))
def on_error(ws, error):
    print("Error:", error)

ws = websocket.WebSocketApp(
    API_URL,
    header=headers,
    on_open=on_open,
    on_message=on_message,
    on_error=on_error
)

ws.run_forever()根据这个示例,我们得出需要以下两个参数:
API_URL = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime"
headers = [ "Authorization: Bearer " + API_KEY]
所以改写进ESP32-idf环境:
#include "esp_websocket_client.h"

void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data);

void websocket_init(void)
{
    esp_websocket_client_config_t ws_cfg = {
      .uri = "wss://dashscope.aliyuncs.com/api-ws/v1/realtime?model=qwen-omni-turbo-realtime",                  // 使用带鉴权参数的URL
      .transport = WEBSOCKET_TRANSPORT_OVER_SSL,   // 明确使用SSL传输
      .reconnect_timeout_ms = 10000,               // 重连超时设置
    };

    client = esp_websocket_client_init(&ws_cfg);

    esp_websocket_client_append_header(client, "Authorization", "Bearer sk-XXXXXXXXXXXXXXXXXXXXXXXXXXXX");

    esp_websocket_register_events(client, WEBSOCKET_EVENT_ANY, websocket_event_handler, NULL);
    esp_websocket_client_start(client);
}

void websocket_event_handler(void *handler_args, esp_event_base_t base, int32_t event_id, void *event_data)
{
    esp_websocket_event_data_t *data = (esp_websocket_event_data_t *)event_data;
    switch (event_id) {
      case WEBSOCKET_EVENT_CONNECTED:
            ESP_LOGI("WS", "连接成功");
            vTaskDelay(4000 / portTICK_PERIOD_MS); // 延迟2秒再启动任务
            break;
      case WEBSOCKET_EVENT_DATA:
            printf("收到数据: %s\n", (char*)data->data_ptr);
            break;
      case WEBSOCKET_EVENT_DISCONNECTED:
            ESP_LOGI("WS", "连接断开,尝试重连...");
            break;
    }
}连接成功后得到以下打印:
I (8740) WS: 连接成功
收到数据: {"event_id":"event_R6ALkF8t1bCgkkNymZvvT","type":"session.created","session":{"object":"realtime.session","model":"qwen-omni-turbo-realtime","modalities":["text","audio"],"instructions":"...model instructions here...","voice":"Chelsie","input_audio_format":"pcm16","output_audio_format":"pcm16","input_audio_transcription":{"model":"gummy-realtime-v1"},"turn_detection":{"type":"server_vad","threshold":0.5,"prefix_padding_ms":300,"silence_duration_ms":800,"create_response":true,"interrupt_response":true},"tools":[],"tool_choice":"auto","temperature":0.8,"max_response_output_tokens":"inf","id":"sess_CFP8GFog5dp8RGOrhoJY3"}}
连接成功!

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

溥价 发表于 2025-12-26 02:01:26

用心讨论,共获提升!

钱艷芳 发表于 2026-1-3 21:17:31

很好很强大我过来先占个楼 待编辑

伯斌 发表于 2026-1-14 03:34:22

不错,里面软件多更新就更好了

周冰心 发表于 2026-1-17 07:10:22

收藏一下   不知道什么时候能用到

劳暄美 发表于 2026-1-20 09:10:43

喜欢鼓捣这些软件,现在用得少,谢谢分享!

吕颐然 发表于 2026-1-20 17:48:22

东西不错很实用谢谢分享

锄淫鲷 发表于 2026-1-22 15:54:13

感谢,下载保存了

铵滔 发表于 2026-1-23 01:56:14

用心讨论,共获提升!

梁宁 发表于 2026-1-28 03:08:31

感谢分享,学习下。

瘴锲如 发表于 2026-1-29 06:35:20

感谢发布原创作品,程序园因你更精彩

纣捎牟 发表于 2026-2-3 04:26:47

分享、互助 让互联网精神温暖你我

龙梨丝 发表于 2026-2-3 23:58:36

喜欢鼓捣这些软件,现在用得少,谢谢分享!

窝酴 发表于 2026-2-6 09:09:25

这个好,看起来很实用

焦尔蕾 发表于 2026-2-9 05:18:23

分享、互助 让互联网精神温暖你我

秤陷曲 发表于 2026-2-9 05:44:27

鼓励转贴优秀软件安全工具和文档!

全叶农 发表于 2026-2-9 16:21:37

新版吗?好像是停更了吧。

蚬蕞遂 发表于 2026-2-9 16:40:32

懂技术并乐意极积无私分享的人越来越少。珍惜

谭皎洁 发表于 2026-2-10 01:43:02

yyds。多谢分享

孜尊 发表于 2026-2-10 23:51:22

很好很强大我过来先占个楼 待编辑
页: [1] 2
查看完整版本: ESP32S3+IDF环境下websocket连接阿里百炼实时多模态大模型