用ESP32做了个小爱同学?开源了!

内容分享3周前发布
0 4 0

我用ESP32做了一个语言模型,就像一个基础版“siri”

用ESP32做了个小爱同学?开源了!

开源网址:https://oshwhub.com/shukkkk/esp32s3_tft_mp3

  • 支持对话(语言识别与合成),对话响应速度几乎在3s以内。
  • 支持触碰交互(按住屏幕说话)
  • 通过修改代码,可以设置AI的对话方式和回答风格
  • 支持用于拓展设计,例如:智能MP3、简易版siri/小爱同学、实时翻译工具…

想实现这些功能,软硬件如何设计?会不会很难?

实则,可能比你以为的更简单!希望我提供的方案能帮到你!

一、硬件设计

用ESP32做了个小爱同学?开源了!

原理图

用ESP32做了个小爱同学?开源了!

PCB图

用ESP32做了个小爱同学?开源了!

实物图

元器件选型说明

  • 选用:ESP32S3-WROOM-1-N16R8
  • INMP441 与 MAX98357A 使用的都是模块
  • 电池插头是1.25间距正接头,仅支持单节3.7v锂电池,typec接口有充电功能,可以给锂电池充电
  • 喇叭:MAX98357A可以推动3w喇叭
  • 串口模块是CH340C,后面有C!
  • 显示屏幕是3.2寸带触摸屏幕

搞定了电路设计,那又要如何实现主要的“对话”功能

二、训练语言模型?不,用现成的!

这里超级好理解。

第一,想实现对话功能,起码得让它“听懂”吧?也就是说,你得STT(语言转文字)和TTS(语音合成)一下!STT和TTS使用讯飞API实现。

用ESP32做了个小爱同学?开源了!

光“听懂”不行啊,得聊起来呀!这就需要大语言模型了。

大语言模型不仅能够生成自然语言文本,还能够深入理解文本含义,处理各种自然语言任务,如文本摘要、问答、翻译等。

大语言模型使用的是火山引擎的豆包同款引擎。

用ESP32做了个小爱同学?开源了!

如何连接API?

上面三个API,是从各自官网控制台获取到KEY后,修改代码中相关的字段,才可以正常连接到API。

代码中还需要修改WiFi的连接信息

用ESP32做了个小爱同学?开源了!

一些说明

讯飞的服务使用webscoket连接APITTS使用了流式处理,一边接收一边播放音频。有时数据处理不严谨会发生错误,这个暂时还没解决,请自行排查修改;STT没有用流式处理(懒),说短句子没有什么影响,发送长句子的话,有一部分时间也是浪费在这里了。

火山引擎使用HTTP连接API(由于火山的webscoket的确 没有调通,才疏学浅见笑了),没有做到流式处理,反应时间部分浪费再了这里。

webscoket响应时间短,通信更流畅。

HTTP也够用,是比较传统的方式。

作者OS:我是软件方面的“新手”,目前算是用“用尽方法”实现了想要的功能,代码可供同道新人参考,高手一笑了之。如各位有意复刻此项目,请务必先下载源码进行编译测试,可编译通过再进行复刻尝试,如若不能还请三思。

三、编译环境如下

编译软件:ArduinoIDE 2.3.2

SDK: ESP32 SDK 2.0.13

使用主要库:TFT_eSPI 2.5.43

开发板设置

用ESP32做了个小爱同学?开源了!

用ESP32做了个小爱同学?开源了!

文章的最后,总结一下工作原理:

ESP32S3使用INMP441接收声音将pcm音频数据发送至讯飞STT语音识别服务转换为文字再将文字发送至大语言模型API提问最后将回答的文字发送至TTS语音合成服务并通过MAX98357A播放音频

过程中用TFT触摸显示屏进行交互显示。

【正文完】

如果你觉得本文还不错,欢迎点赞、收藏、关注三连

我会持续更新优质开源作品~

© 版权声明

相关文章

4 条评论

您必须登录才能参与评论!
立即登录
  • 头像
    跑鱼籽面包 投稿者

    esp32有非常严重的漏洞,已经全面下架停产了。

    无记录
  • 头像
    探究事实还原真相 投稿者

    用了讯飞API和豆包大预言模型,这两个是免费吗?如果是免费的,倒是可以自己做玩儿,但看到豆包的火山引擎是限时免费啊

    无记录
  • 头像
    王丽香 读者

    都不免费

    无记录
  • 头像
    明媚萱草 读者

    收藏了,感谢分享

    无记录