一:前言
在这个快速发展的科技时代,人们对智能化生活方式的渴望愈发强烈。无论是家用电器还是日常服务,都在不断进化以提供更为便捷、高效且个性化的用户体验。不过,目前市场上的智能产品在诸如网络连接、语音互动及图像识别等关键领域仍面临挑战,未能完全达到用户对理想智能生活的期待。
鉴于此,我们带着无比的热情与坚定的责任感,正式启动了《XIAO 智能助手》项目,旨在打造一个能够触动人心的全新智能解决方案。🚀🚀🚀 我们的目标是通过以下三大核心功能,引领智能生活的新浪潮:
- 一键智能配网:简化设备连接过程,让用户无需技术背景也能轻松完成网络设置。(已废弃)
- GPT语音助手:采用最前沿的语音识别技术,使用户能够以自然语言进行交流,享受更加流畅、人性化的交互体验。
- 精准智能识图:利用深度学习算法提升图像识别精度,帮助用户快速获取所需信息或执行特定任务。
我们相信,《XIAO 智能助手》不仅将革新个人与家庭的生活方式,也将开启智能科技的新篇章。🌟🌟🌟
二、项目概述
本项目聚焦于创新与用户需求,旨在推出一款既强大又易于使用的智能助手——《XIAO 智能助手》。我们坚持用户至上的原则,全心全意地投入到产品的设计与开发中,力求为用户提供卓越的价值和服务。我们的愿景是让《XIAO 智能助手》成为每一位用户日常生活与工作中的理想伴侣,为其带来前所未有的便捷、效率以及愉悦体验。🎈🎈🎈
三、实现的功能
3.1 智能配网(已废弃)
打破传统配网的繁琐步骤,我们实现了快速、自动的网络连接配置。用户只需简单开启设备,《XIAO 智能助手》便能自动搜索并连接至可用的无线网络,免除手动输入复杂密码和参数的麻烦。更进一步,当检测到网络环境变化时,系统还能智能切换至最佳网络选项,确保用户始终享受稳定流畅的连接体验。🤞🤞🤞
参考地址:【ESP32 手机配网教程】_esp32 配网-CSDN博客
注意:此功能考虑到运行的流畅度,目前设置配网工作还是需要在代码中更改,如果大家需要添加可参考上述博客,采用蓝牙或者热点连接网络😊😊😊
3.2 语音助手
此前鄙人做过这方面测试,下面对比两篇博客关于语音助手功能的差异性
博客地址 | 【ESP32S3 接入MiniMax文本语音大模型对话&语音克隆教程】 | 【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】 |
---|---|---|
硬件 | ESP32S3 + MAX98357 + MAX9814 | ESP32S3 Sense + TTS模块 |
特色功能 | 支持通过语音指令触发TTS(Text-to-Speech)功能,实现文字转语音输出,支持音色切换。 | 不完全依赖网络,语音快速响应。 |
调用架构 | 百度STT+MiniMAX文本语音大模型 | 百度STT+MiniMAX文本大模型+硬件TTS |
鄙人评分 | 8分 | 9分 |
这两篇博客虽然都围绕语音助手的功能展开讨论,但侧重点有所不同。后续设计的拓展板包含这两种硬件方案,增加了可玩性。前者更多关注于语音合成技术的应用,现文字转语音输出,支持音色切换。;而后者则不完全依赖网络,语音快速响应实现更加自然流畅的人机对话。考虑到代码的复杂性,后续实物主要围绕ESP32S3 Sense + TTS模块硬件进行程序设计。💕💕💕
参考地址:
【基于MAX98357的Minimax(百度)长文本语音合成TTS 接入教程】-CSDN博客
【ESP32S3 接入MiniMax文本语音大模型对话&语音克隆教程】_esp32s3接入minimax-CSDN博客
3.3 智能识图
使用ESP32S3 Sense开发板接入阿里云的大模型服务,实现图像的理解功能。我们将使用ESP32的摄像头模块拍摄照片,并通过阿里云提供的API接口发送图像数据,最后接收并解析API返回的结果。
参考地址:【ESP32S3 Sense接入阿里云大模型图像理解】-CSDN博客
四、硬件设计
我采用嘉立创设计的PCB板,然后转到KiCAD中,可以正常转换,下面是效果图
4.1 原理图
为了可以实现上面的两套方案,我把两套硬件设计在拓展板上。
顺便加了SSD1306显示屏以及按键模块,这里按键的长按与短按来触发语音助手和图像理解功能。
这里的舵机接口可以与第一套语音助手的MAX9814端口共用,主要想巧妙实现一下具身智能的语音大模型控制功能。💖💖💖
4.2 PCB板图
充电模块直接购买模块LDO5V转3.3V,5V是直接从typec端口获取。所有外设供电采用LDO模块,供电采用双层板设计,底层铺铜,底层还有本次活动方的logo。🎶🎶🎶
4.3 3D效果图
板子大小是长72cm*46cm,四周倒角带固定座孔,整体封装比较拉胯,主要是方便手动焊接,带有色环电阻复古风。😊😊😊
故障:电源开关当时没有检查好,导致无法关断外设电源,为了解决这个问题,我直接短路中上两个引脚成功修复。
五、程序设计
下面是本项目的程序框架
从程序框架中非常清楚本项目的设计内容,系统主要分为三个线程(主线程,屏幕显示线程,具身智能线程),采用按键的短按与长按来触发语音助手和图像理解的功能实现。程序设计主要是
- 整合语音助手四种GPT大模型(MiniMAX,豆包,通义千问,文心一言)调用
- 整合阿里云大模型图像代码
- 添加按键输入SSD屏幕和TTS模块输出交互显示功能
代码文件如下😁😁😁,具体信息看设计资源的Platformio代码文件
5.1 环境配置
这次采用Plantformio开发,主要方便AI编程调用,基于Vscode编程设计🤣🤣🤣
platformio.ini文件
; PlatformIO Project Configuration File
;
; Build options: build flags, source filter
; Upload options: custom upload port, speed and extra flags
; Library options: dependencies, extra library storages
; Advanced options: extra scripting
;
; Please visit documentation for the other options and examples
; https://docs.platformio.org/page/projectconf.html
[env:seeed_xiao_esp32s3]
platform = espressif32
board = seeed_xiao_esp32s3
framework = arduino
lib_deps =
olikraus/U8g2 @ ^2.36.2
bblanchon/ArduinoJson@^7.2.0
plerup/EspSoftwareSerial@^8.2.0
tikaflow/UTF8ToGB2312@^1.1.52
SPI
Wire
madhephaestus/ESP32Servo@^3.0.5
upload_port = COM4
psram = true
5.2 整合语音助手四种GPT大模型调用
Gpt.h
修改下面代码位置,关于这些参数如何设置,请参考我的博客专栏esp32国产大模型接入_2345VOR的博客-CSDN博客
#ifndef GPT_H
#define GPT_H
// 3. Replace with your MiniMax API key
String apiUrl = "https://api.minimax.chat/v1/text/chatcompletion_v2";
const char *apiKey = "eyJhbGciOiJSUzI1NiIsInR5cCI6IkpXVCJ9.eyJHcm91cE5hbNlck5hbWUiOiIyMzQ1dm9yIiwiQWNjb3VudCI6IiIsIlN1YmplY3RJRCI6IjE3NTk0ODIxODAxMDAxNzAyMDgiLCJQaG9uZSI6IjE1MDcyNjQxNTYxIiwiR3JvdXBJRCI6IjE3NTk0ODIxODAwOTU5NzU5MDQiLCJQYWdlTmFtZSI6IiIsIk1haWwiOiIiLCJDcmVhdGVUaW1lIjoiMjAyNC0xMC0xNCAyMjoyODo0NSIsImlzcyI6Im1pbmltYXgifQ.xcIqNlrjffSbx2JLnBmGvh7XHL0j941Vo3qYFo_zxWZD6yfVqCp4nU-AQP6zvXxZBK3G3ocjzUXgd0WpnUrYaUWwOVkpKUbhMBGgmmXxOg4N8vcWCkgN3LbQYkqD5_n7II0ubZjIe9SrWOds9T4m6NLgVZZhEMU0JpmL9w2S2JLu_Ce1yIom3zg7zo1_wopnIWoEdNwGLi9P_GqiwPnGo7WR3p6Qo1LJsYk9amyl4sZk2daYMP1BQG07IlDh4Po3cS7HbioAXMMH-I6iJ0evR227rEUi2A4_I8acgTsOTSj-5UMmUJ_aKTLMuS_t8qz_wzcu_m0mas_eWQVVb0-Ggg";
String token_key = String("Bearer ") + apiKey;
// 3. Replace with your baidu voice detect token
// 百度 API 鉴权配置
String baidu_apiid = "BXL2YS33B67Xw5XDq";
String baidu_apisecret = "pb2zIW2Nct4lhk9hDKPK4eKX";
// 豆包API鉴权
String doubao_url = "https://ark.cn-beijing.volces.com/api/v3/chat/completions";
String doubao_apiKey = "e2238fa2-df26-45633201c8ab";
// 2. Replace with your ali_apiKey API key
const char *ali_apiKey = "sk-76a347d3439c6415d82b1695";
#endif
5.3 整合阿里云大模型图像代码
不休Image.h
#ifndef IMAGE_H
#define IMAGE_H
#endif
5.4 添加按键输入SSD屏幕和TTS模块输出交互显示功能
不休Tts.h
#ifndef TTS_H
#define TTS_H
#endif // TTS_H
5.5 主程序设计多线程任务调用
main.cpp,修改WiFi密码,注意长按短按的触发时间,然后根据自己的网络情况设置百度token获取方式,一个可以管30天
#include <Arduino.h>
#include "base64.h"
#include <WiFi.h>
#include <I2S.h>
#include <ArduinoJson.h>
#include <SoftwareSerial.h>
#include "esp_task_wdt.h"
#include "Gpt.h"
#include "Tts.h"
#include "Image.h"
#define MYPORT_TX 1
#define MYPORT_RX 2
uint8_t voicedata[] = {0xFD, 0x00, 0x06, 0x01, 0x01, 0x5B, 0x76, 0x31, 0x5D}; // voicedata[7] = 0x31 ~ 0x39
// 1. Replace with your network credentials
// const char *ssid = "Doctor's_home";
// const char *password = "115115115";
const char *ssid = "IQOO";
const char *password = "12345678";
// 2. Check your Aduio port
const int buttonPin = 9; // the number of the pushbutton pin
#define SHORT_PRESS_TIME 100 // 短按时间阈值,单位为毫秒
#define LONG_PRESS_TIME 400 // 长按时间阈值,单位为毫秒
// baidu_token_key = getAccessToken(baidu_apiid, baidu_apisecret); // 本地鉴权,获取令牌
baidu_token_key = "24.8d217475e5a695b3a8854ab49aa8538.282335-57722200";
六、项目展示
6.1 上传代码
参考platformio.ini文件配置上传代码,代码上传成功如下
6.2 系统初始化
复位开发板,屏幕初始化成功!
串口打印正常输出,此时会有语音提示,太哇塞啦🙌🙌🙌
6.3 智能助手交互
整合语音助手四种GPT大模型(MiniMAX,豆包,通义千问,文心一言)调用
首先输入字符(M/D/B/A)任意一个选择大模型,然后短按按钮开关,对着麦克风提问,下面是正确响应的效果
硬件交互显示
此时SSD屏幕会显示三行,Q第一行是提问,A第二行是回答,第四行N是记录对话次数,M标志位是当前选择的模型D(豆包),TTS模块输出上面的回答。显示和语音交互完美呈现🤣🤣🤣
6.4 图像理解
这里正是调用ESP32S3 Sense摄像头采集数据,然后调用阿里云大模型进行图像理解,此部分是采用长按按钮开关触发,交互如下:
硬件交互
这个图像理解非常容易重启😒,大家一定要耐心哦!
6.5 具身智能
我这个具身智能是个伪命题,就是语音内容识别到判断answer中是否包含灯或者机字符,舵机就会来回动一动,哈哈哈😜😜😜
七、项目总结
这是我第七次参加嵌入式相关的网上比赛活动
● 第一次是RT-Thread的[【基于RT-Thread+RA6M4的智能鱼缸系统设计之鱼我所欲也】](https://club.rt-thread.org/ask/article/3edb6751a0ad28a2.html)活动,作品是2022年暑假做的获得第六名,还是比较开心!
● 第二次2023年寒假做的是[【基于MAX7800羽毛板语音控制ESP8266小车】](https://www.eetree.cn/project/detail/1309),成绩还不错第七名,让对小车车的可玩性又近了一步!
● 第三次2023年春做的[【基于腾讯云的CH32V307开发板远程机械臂小车】](https://blog.csdn.net/vor234/article/details/129008908),由于图床引用CSDN导致最后评审没有显示出来,最后获得安慰奖!
● 第四次2023年冬做的[【FastBond2阶段2——基于ESP32C3开发的简易IO调试设备 - 电子森林 (eetree.cn) 】](https://www.eetree.cn/project/detail/2222) ,最终获得三等奖,再接再厉哦!
● 第五次实现了[【基于LicheePi-4A的 人脸识别系统软件设计】](https://vor2345.blog.csdn.net/article/details/134864483),人脸识别系统软件设计和调试全流程,加深了对tkinter GUI设计思路,对LicheePi-4A 国产单板计算机更有信心,最终获得参与奖!
● 第六次实现了2024年寒假练 - 基于xiao ESP32S3 Sense的自动化HA鱼缸设计,探讨如何运用Seeed Xiao ESP32-S3 Cam开发板设计一款自动化、可接入Home Assistant(简称HA)的智能鱼缸系统。最终获得第一名,结实了许多朋友,视野开阔了许多。
这一次我是代码量最多的一次,无论是功能的解耦,还是多线程任务调度,让我关于Platformio C++编程充满期待。搭配国产通义灵码编程插件,编程效率嘎嘎上升,与此同时智能终端有更深刻认识啦!😘😘😘
建议:
- 希望硬禾与Seeed多多合作定期举办博客活动,让更加优质的国产嵌入式生态做大做强;
- 期待硬禾平台推出更多有质量有意义持续性的创客活动!
- 建议硬禾不仅开展线上活动,后期可以尝试线下活动,多多与开发者,企业,高校互动,共同探索内需外患。🤣🤣🤣
非常硬禾举行FastBond活动,大家都为这个国内嵌入式生态出一份力,只要努力认真做了都会有所收获,期盼这些作品在将来某一天为构建美好未来贡献一份微博之力!
我后期会持续更新我测评的一系列国内开发板测评,并且会积极参加有质量的玄铁杯活动🛹🛹🛹每天都一点点结合实际需求联动丰富生活,从而实现对外部世界进行充分的感知,尽最大努力认识这个有机与无机的环境,科学地合理地进行创作和发挥效益,然后为人类社会发展贡献一点微薄之力。🤣🤣🤣
🥳🥳🥳再次非常感谢硬禾的相关组织者支持等等🥳🥳🥳期待这一次的成绩哟!
参考文献:
esp32国产大模型接入_2345VOR的博客-CSDN博客