提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档
没啥,单纯就是没有找到其他免费试用的哈哈哈哈哈。
控制台:https://console.xfyun.cn/services/bm35
如果是用Spark Lite的话,反正写的是token无限制

我注册的时候,他送了我X1模型几百万的token,听他意思好像是跟DS差不多的水平,但我其实最终只是想做成类似于语音对话或者是控制硬件的形式,所以X1这个对我来说倒没有太多的必要【插一句题外话,X1是会把推理的那些内容给传下来的,但如果我只是作为对话形式的话,其实我真的很建议官方能够在文档里面说一下有没有相关的配置】

websocket嘛,既然带着web所以肯定是要联网的,而且乐鑫的ESP32他的优势也正是联网(不然我拿个STM32不好嘛),所以先把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
