想做情感陪伴机器人,看到B站有个项目很有趣,使用一块esp32复刻了B站MeteWu的ESP32大模型聊天项目。
自己做了一些修改,加了一些简单的表情,角色扮演,切换大模型和温湿度传感器等功能。可以用于玩具,聊天机器人,大模型对话,学习,创作,角色扮演等方面。因为ESP32自身带蓝牙,WIFI,支持很多传感器,事实上是可以语音控制家里的能上网的设备和带蓝牙的设备,加个红外模块,也可以通过语音控制家里的空调电视之类。计划通过串口作为小机器人的大脑控制中心。
硬件包括:
ESP32板子
INMP441全向麦克风、
MAX98357 I2S音频放大器模块+喇叭、
1.8寸(128x160)RGB_TFT屏幕,
还需要一些面包线,想使用方便一些,可能需要面包板或者esp32拓展板,一些外壳或者螺丝固定。
其中屏幕不是必须,如果不需要播放视频图片,当然有了更好,可以通过屏幕输出信息,后期可以做一些动画表情,我的屏幕带SD卡读卡器,可以放图片和音乐。整个项目中,大头是显示屏和ESP32的主板,这两个要二十多,其他的元器件都是几块钱一个。
我是野路子,不太喜欢使用面包板。为了插线和使用方便,我使用了一块拓展板,二块多钱,又使用了两根铜柱把拓展板和TFT屏固定在一起,其他的麦克风,喇叭和温湿度计放在中间固定。这种接近箱形或者柱体立体结构,更方便我寻找一个合适的盒子或者瓶子保护起来,如下图,春左边是麦克风,右边是信号放大器和喇叭,拖着的是温湿度传感器;
目前语音功能主要包括唤醒,语音命令和大模型对话三部分。
唤醒,正常情况下,esp32休眠可以在电池供电的场合极大减小电量消耗,增长使用时间,同时切通了和大模型的连接,节省流量和大模型token。通过悟空,你好,八戒,二蛋等唤醒词唤醒,同时根据唤醒词切换不同身份,模仿悟空,八戒,夫子,二次元猫娘,美女,帅哥之类和你对话。现在没有使用悟空,八戒对应的配音,只区分了男女角色。喜欢的也可以搞成父母的声音,老师的声音,这样辅导孩子作业会更有代入感,都是可以修改的。
语音指令主要解析为操作指令,比如打开空调,打开电灯,室温温度,天气情况,播放音乐,播放幻灯片,切换大模型,调整音量,打印日志,取消打印等,可以按需要添加修改,没有上限。
大模型对话主要是通过调用迅飞星火,阿里通义千问或者抖音的豆包等对话功能,提供诸如学习英语,普通话,数学,物理知识,写诗,写小说,讲故事,讲笑话等功能。三个大模型可以语音切换,播放声音也能通语音控制。
通过语音切换大模型,需要提前在代码里配置,目前迅飞,豆包,阿里都有免费的,申请后配置一下参数。也可以和离线语音模块通过串口结合使用,唤醒和本地命令使用离线语音,大模型对话,唤醒ESP32接班。
后面打算把屏幕利用起来,根据场景做一些可爱的表情,然后加上摄像头,这样组成一个机器人的控制中枢,有麦克风做耳朵,有喇叭说话,有屏幕做表情,有摄像头做眼睛,然后扩展一些红外,wifi,蓝牙控制家里的智能电器,装上舵机做手脚。
主要的元件:
一。 ESP32板子,我买的是30PIN的,好像13块
二。INMP441全向麦克风、好像六块多
三。MAX98357 I2S音频放大器模块+喇叭、这个合起来三五块就行,不会焊接的话,喇叭可以买那些大号2.54插头支持杜邦线直接插了用的。其他都是标准组件,喇叭是比较坑的,不会焊的最好是直接买带2.54插头并且带壳的,这样不容易损坏,没壳的太容易断线了,有壳的音响效果也好一些,买过好多不带壳了,用几次线就断了,最后不得已买了电烙铁自己焊,
四。1.8寸(128x160)RGB_TFT屏幕,这个有点小贵,十几块,也有几十的,
硬件接线,麦克风和放大器使用I2S协议,tft lcd表面看是I2C协议,实际是spi协议,sd使用spi协议,播放音频放大器在main修改,TFT屏在user_setup中修改,支持很多种屏幕,按自己买的TFT屏幕修改,默认是ST7735,麦克风在i2S中修改,要根据esp32引脚功能和模块支持的协议修改:
一。麦克风:
VDD -> 3.3v
GND -> GND
SD -> GPIO22
WS -> GPIO15
SCK -> GPIO4
还有个左右声道的,接个低电平就行
二,音频放大模块:
Vin -> VIN
GND -> GND
LRC -> GPIO27
BCLK -> GPIO26
DIN -> GPIO25
三,1.8寸OLED屏幕:
VDD -> VIN
GND -> GND
SCL -> GPIO18
SDA -> GPIO23
RST -> GPIO12
DC -> GPIO32
CS -> GPIO5
有个背光的,接个高电就可以
四,我接一个温湿度传感器,温度还可以,湿度感觉不太准,数据偏湿,不清楚啥原因
温湿度传感器data接gpio33.
五。接个了测试LED灯,使用gpio16
六。接了SD卡
// SPI GPIOs
#define SD_CS 21
#define SPI_MOSI 19
#define SPI_MISO 13
#define SPI_SCK 14
引脚可以修改,不过比较麻烦,esp32的引脚每个功能不一样,接错了就会出各种问题。后面还想接个T 卡。引脚可以参数下面别人写的引脚分配。
开发的环境:
vscode, esp-idf,PIO HOME,
代码:
https://github.com/blogercn/ESP32_AI_LLM
参考:
ESP32 引脚分配_esp32 sd0引脚-CSDN博客
常见机内总线——I2C、SPI、I2S、UART、TDM-CSDN博客