我嘞个豆,将物件接入AI这么简单?(基于esp-ai将 esp32接入AI)
小明IO 2024-10-07 08:31:01 阅读 88
一、前言
什么是<code>ESP-AI?
最简单、最低成本的AI接入方案,让任何物品都能实现智能对话功能(基于ESP开发板)
技术栈
ESP-AI
分为了服务端和客户端两套代码:
服务端是封装好的库,直接引用后执行即可,除开必要的配置外,一行代码就可以运行起来。服务端使用Nodejs 开发。客户端封装好的文件,引入到代码中即可。客户端使用 Arduino 开发。
整体上技术栈为 javascript
和 c
两种语言的组合。 不用担心,都是配置化的,无需担心不会写这两语言。你只需要大概能看懂配置即可~
地址
ESP-AI
仓库地址:https://github.com/wangzongming/esp-ai
ESP-AI
文档地址:https://espai.fun
效果演示
【超快速的ESP32 AI对话方案。已开源!快接入你的机器人吧~】 https://www.bilibili.com/video/BV1gE421w7Dw/?share_source=copy_web&vd_source=041c9610a29750f498de1bafe953086b
二、软件准备
1. 安装 Nodejs(用下面的 Docker 安装不需要这个环境)
下载地址:https://nodejs.org/en/blog/release/v18.0.0
滚动到最下面,然后选择适合自己电脑位数的安装包下载后安装即可。
2. 安装 Arduino IDE(v2.x)
下载地址:https://www.arduino.cc/en/software
选择合适的安装包安装即可。
三、硬件准备
下面是按演示视频中的配置来的
硬件 | 数量 | 价格 |
---|---|---|
esp32s3(N16R8) | 1 | 25(核心板12) |
INMP441 | 1 | 8 |
Max98357A | 1 | 5 |
LED | 1 | 0.5 |
小喇叭 | 1 | 6 |
面包板 | 1 | 5 |
杜邦线 | 若干 | 1 |
四、服务端
Docker 方式运行
不想看这么多?那就直接使用 Docker
方式进行安装,仅需要一行命令即可,
详情见:docker 方式运行服务端
docker run -itd -p 8080:8080 -v /esp-ai-server/index.js:/server/index.js --name esp-ai-server registry.cn-shanghai.aliyuncs.com/xiaomingio/esp-ai:1.0.0
代码方式运行
新建一个目录在目录中打开终端在终端中执行npm i esp-ai
命令,用于安装ESP-AI
。在目录中新增一个 index.js
文件在文件中写入下面代码
const espAi = require("esp-ai");
const config = {
gen_client_config: ()=>({
return {
iat_server: "xun_fei",
iat_config: {
// 讯飞:https://console.xfyun.cn/services/iat 。打开网址后,右上角三个字段复制进来即可。
appid: "xxx",
apiSecret: "xxx",
apiKey: "xxx",
// 静默时间,多少时间检测不到说话就算结束,单位 ms
vad_eos: 1500,
},
llm_server: "xun_fei",
llm_config: {
// 讯飞:https://console.xfyun.cn/services/iat 。打开网址后,右上角三个字段复制进来即可。
appid: "xxx",
apiSecret: "xxx",
apiKey: "xxx",
llm: "v4.0",
},
tts_server: "xun_fei",
tts_config: {
// 讯飞:https://console.xfyun.cn/services/iat 。打开网址后,右上角三个字段复制进来即可。
appid: "xxx",
apiSecret: "xxx",
apiKey: "xx",
},
}
})
};
espAi(config);
注意代码中实际上就执行了一个方法,然后给方法传入了一些参数,比如上面的案例中传入了讯飞的key
, 这时候需要先去注册讯飞账号,然后将key放进去即可。
运行服务
执行下面代码即可运行服务
node ./index.js
生成环境中请使用 pm2 来运行服务以保证服务的可靠和性能。
<code>pm2 start ./index.js -i max
五、 客户端代码上传
头文件
需要提前将Github
仓库中/client/libraries
中的文件下载放到Arduino IED
的依赖目录中,这个目录默认在:C:\Users\用户名\Documents\Arduino\libraries
(路径没有的话,自己百度一下在 arduino ide中查找这路径的方法)
注意:将仓库中libraries
里面的压缩包都解压出来,然后放到本地中。
除此之外,还需要提前安装好 esp32
(v2.x,版本不能大于2) 开发板环境。
代码上传
客户端代码位于仓库代码的 example/example.ino
中,需要在本地新增一个 example
目录(必须是这个名字),
然后在目录中新增一个 example.ino
文件。
然后将仓库中 example/example.ino
文件中的内容复制进去,修改 example.ino
代码中的下面这几个配置。
// [必 填] 是否调试模式, 会输出更多信息
bool debug = true;
// [必 填] wifi 配置: { wifi 账号, wifi 密码 } 注意:要用双引号!
ESP_AI_wifi_config wifi_config = { "oldwang", "oldwang520" };
// [必 填] 服务配置: { 服务IP, 服务端口 }
ESP_AI_server_config server_config = { "192.168.1.5", 8080 };
// [必 填] 离线唤醒方案:{ 方案, 识别阈值 }, "edge_impulse" | "diy",为 "diy" 时可调用 esp_ai.wakeUp() 方法进行唤醒
ESP_AI_wake_up_config wake_up_config = { "edge_impulse", 0.7 };
因为有一个离线语音识别模型,首次编译会很慢,配置不好的电脑至少半个小时以上的时间~
六、 引脚接线
ESP32-s3 | INMP441 | Max98357A | 电位器(可选) | LED(可选) |
---|---|---|---|---|
3v3 | VDD | VDD | VDD | |
GND | GND | GND | GND | GND |
GND | L/R | |||
4 | SCK | |||
5 | WS | |||
6 | SD | |||
15 | DIN | |||
16 | BCLK | |||
17 | LRC | |||
34/35 | OUT | |||
18 | 正极 |
七、 完成
到这里就完成啦。
对着麦克风喊一声 “小明同学” 吧。
八、 最后
该仓库还在持续优化中,开源不易,点个 Star
支持下吧~
交流群
QQ 交流群: 854445223
声明
本文内容仅代表作者观点,或转载于其他网站,本站不以此文作为商业用途
如有涉及侵权,请联系本站进行删除
转载本站原创文章,请注明来源及作者。