ESP32 idf websocket 讯飞星火大模型 接入

ESP32 idf websocket 讯飞星火大模型 接入

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档


没啥,单纯就是没有找到其他免费试用的哈哈哈哈哈。
控制台:https://console.xfyun.cn/services/bm35
如果是用Spark Lite的话,反正写的是token无限制
控制台里面的提示
我注册的时候,他送了我X1模型几百万的token,听他意思好像是跟DS差不多的水平,但我其实最终只是想做成类似于语音对话或者是控制硬件的形式,所以X1这个对我来说倒没有太多的必要【插一句题外话,X1是会把推理的那些内容给传下来的,但如果我只是作为对话形式的话,其实我真的很建议官方能够在文档里面说一下有没有相关的配置】
X1送的token


websocket嘛,既然带着web所以肯定是要联网的,而且乐鑫的ESP32他的优势也正是联网(不然我拿个STM32不好嘛),所以先把wifi的例程先给跑通。
idf的wifi例程路径
一般来说选择好端口,选择好,选好芯片型号就没啥问题的,先烧录进去瞅一眼。
如果烧录有问题,具体看提示什么问题,比如说:

  • 芯片型号不对,提示什么Not esp32c3 but esp32s3的,具体我也忘了
    ==>就是我说的芯片型号没选好,选回来就行;
  • 串口连接不上
    这个问题,有点复杂,可能跟以下原因有关:
    ==>某个IO没有上拉,对于ESP32C3来说,需要上拉IO08(供应商说的,如果不上拉大概率下载不了程序),好像ESP32S3也行,其他的就需要根据技术规格书来确定了;
    ==>接线的问题,EN跟BOOT这两个应该一般人都不会错,TX/RX反接试一下; 科大讯飞 星火 教程
    ==>下载的时候其实是需要EN跟BOOT进行下拉的,这其实跟硬件有关系,但我现在偷懒了,不画按键了,直接买那个带EN和BOOT脚的下载器,一步到位。
  • 其他就百度CSDN啦。。。。

第一次看到这玩意的时候,我是挺懵的,主要是我也不知道他官方的wifi账号密码是啥
宏定义
直接给他改了就行,把他改成你家的wifi名和wifi密码就可以了;
在这里插入图片描述

不想用宏,用变量去管理的话,在这里改也行(因为我是有配网的要求的,所以我是用blufi来管理这个账号密码的,后面有时间我也可能会写(如果…))
在这里插入图片描述

这里需要关注一下自己用的esp idf的版本了
好像是V5.0.0以上,乐鑫自带的环境就没有自带websocket client了,
所以需要自己去准备一下
1、可以用idf.py add-dependency的方式(参考链接);
2、直接下载到本地,然后自己写cmakelists去调用,下载链接,建议先跑通esp_websocket_client的例程再说
所以我的组件是这样子的:
base里面放的就是一些通用件,例如flash、wifi信息、个人配置;
xunfei里面就是放了esp_websocket_client,还有就是我自己调用esp_websocket_client后写的一些函数
在这里插入图片描述
经过测试,顶层的cmakelists需要这么增加路径:
在这里插入图片描述

一共分以下步骤:
第一步:生成鉴权url;
第二步,生成请求体;
第三步,发送并接受流式信息,组包,最终打印。

下面思路:先来看看官方的python程序做了啥,然后分析C语言要做什么,然后再写(chao)代码。

在这里插入图片描述

3.1.1 date参数

官方示例:


因此我们可以看到,在这里我们要做什么东西:
1、获取当前时间;
2、生成指定格式的时间格式。

3.1.1.1 获取网络授时


3.1.1.2 按照要求格式生成时间字符串


3.1.2 authorization参数

3.1.2.1 字符串

首先,按照官方的格式,先生成这个格式的字符串


换行符、空格之类的要一模一样,建议最好是在后面加密的时候校验一下(下面会有加密校验的)

然后我说他最坑的地方来了,他就提了一句:

host指的是spark-api.xf-yun.com,
那么path呢,要改啥,嗯,没写(当时候我确实也没有很详细去研究),然后一直就鉴权错误了
path指的是GET后面的“/v1.1/chat”,这个也要跟着改
我直接这么写了,亲测只要改宏,就可以无缝衔接X1和Lite


3.1.2.2 hmac-sha256算法加密

这里我确实不是很懂,所以我直接丢给DS了,边看边改;
跟着官方的用例做就行了,然后用乐鑫的mbedtls库。
我个人建议是不要直接复制DS的代码,最好是手敲一下,我是很怕突然报一大堆错的,我还是比较喜欢vscode的自动补全

3.1.3 生成最终的url

没啥好像的,就是把3.1.2.2生成的结果跟域名拼在一起就行了,这里需要注意一下,空格和加号要换成特定的符号,如下:


如果不知道我这代码是啥意思,建议先拼在一起,然后把目标url跟你生成的url都一起丢给DS,然后叫他给你写个函数,估计即使我上面这个函数了

链接

这个就是拼json了,看看自己用的模型示例跟着需求改就行,如下:


参数配置这么写就行,其他跟着官方例程走就好了,超时时间别太小就行


其实就一句话


根据程序来看呢,他是通过op_code来判断数据流有没有结束的


他的结果给给你发很多东西的,实际上你只需要下面这些内容,也是一样,把结果丢给DS,让他给你生成就行



目前就做到了发问跟把结果放一起,后续估计会往下做:
1、基于乐鑫的tts进行语音播报;
2、看看怎么用用大模型来控制硬件。
好了,有缘下次见

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/279882.html原文链接:https://javaforall.net

(0)
上一篇 2026年3月14日 下午2:06
下一篇 2026年3月14日 下午2:06


相关推荐

关注全栈程序员社区公众号