You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

428 lines
12 KiB

This file contains invisible Unicode characters!

This file contains invisible Unicode characters that may be processed differently from what appears below. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to reveal hidden characters.

This file contains ambiguous Unicode characters that may be confused with others in your current locale. If your use case is intentional and legitimate, you can safely ignore this warning. Use the Escape button to highlight these characters.

### 一、服务器端下载
https://github.com/xinnan-tech/xiaozhi-esp32-server
### 二、安装$Anaconda3$
下载地址
> https://www.anaconda.com/download
将下面的四个目录添加到环境变量中
```
D:\anaconda3\Library\mingw-w64\bin
D:\anaconda3\Library\bin
D:\anaconda3\Library\usr\bin
D:\anaconda3\Scripts
```
确认是否安装成功
```
WIN+R输入cmd打开控制台输入conda -V
```
使用$Anaconda$ 的黑窗口进行配置
```
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Anaconda (anaconda3)\Anaconda Prompt.lnk
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150744617.png)
设置$Anaconda$镜像
```cmd
conda config --remove-key channels
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/free/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/pkgs/main/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/conda-forge/
conda config --add channels https://mirrors.tuna.tsinghua.edu.cn/anaconda/cloud/msys2/
conda config --show channels
```
**创建环境**
```
conda create --name xiaozhi-esp32-server python=3.10
```
**激活环境**
```
conda activate xiaozhi-esp32-server
```
### 三、部署步骤
**1、包安装**
```cmd
# 开始部署
d:
cd D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\main\xiaozhi-server
pip install -r requirements.txt
```
**2、音频库安装**
```shell
# 音频的编码解码库
pip install opuslib
pip install ffmpeg
```
**安装音频处理工具,录制,转码,剪辑等**
https://github.com/ShiftMediaProject/opus/releases/download/v1.4/libopus_v1.4_msvc17.zip
依据下面的文档指示,对环境代码进行配置:
[解决Exception: Could not find Opus library. Make sure it is installed.](https://blog.csdn.net/Rysxt_/article/details/146361114)
``` python
# 找到报错文件 D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\.venv\Lib\site-packages\opuslib_next\api\__init__.py
if lib_location is None:
lib_location = r'D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\opus.dll'
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721105355122.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721115453134.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721115414928.png)
**3、语音识别库安装**
下载语音识别模型文件
> https://pan.baidu.com/share/init?surl=QlgM58FHhYv1tFnUT_A8Sg&pwd=qvna
将model.pt 放到
```
D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\main\xiaozhi-server\models\SenseVoiceSmall
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721104644515.png)
**4、配置文件**
**配置项目**
- 创建data目录
- 把源码目录下的config.yaml文件复制一份重命名为.config.yaml
**5、Python端服务启动**
```cmd
# 启动后端服务【端口8002】
D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\main\xiaozhi-server\app.py
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721110521298.png)
**6、$JAVA$ $OTA$启动**
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721112548846.png)
**7、启动前端页面**【不启动也可以~】
```cmd
# 安装Node.js
#我的电脑:
D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\main\manager-web
#在地址栏输入 cmd 回车,然后输入:
npm install
npm run serve
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721144828729.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721144851697.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721144932309.png)
**8、测试页面**
```
file:///D:/dsWork/DuoDuoProject/xiaozhi-esp32-server-0.7.1/main/xiaozhi-server/test/test_page.html
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721112711634.png)
```cmd
http://127.0.0.1:8001/#/home
huanghai
DsideaL@123
```
### 四、Windows搭建 ESP IDF 5.3.2开发环境以及编译小智
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721131022851.png)
### 五、修改固件
- **固件编译工具**
` esp-idf-tools-setup-offline-5.3.2.exe`
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721132417926.png)
- **驱动程序**
`CH343SER.EXE`
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721131517125.png)
- **实验材料**
处理器型号 $ESP32-S3-N16R8$
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150754335.png)
屏幕 $0.91$英寸,$SSD$ $1306$,分辨率:$128*32$
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150753720.png)
- **烧录步骤**
**步骤1**
双击桌面上的ESP-IDF 5.3 PowerShell 快捷方式
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721133227523.png)
**步骤2**
https://icnynnzcwou8.feishu.cn/wiki/JEYDwTTALi5s2zkGlFGcDiRknXf
```sh
# 进入工作目录
cd D:\dsWork\DuoDuoProject\xiaozhi-esp32
# 全面清空
del build
# 构建一次
idf.py build
```
**步骤3**
**修改配置文件**
```
D:\dsWork\DuoDuoProject\xiaozhi-esp32\main\Kconfig.projbuild
```
```yaml
# 设置OTA地址
config OTA_VERSION_URL
string "OTA Version URL"
default "http://172.16.1.114:8002/xiaozhi/ota/"
help
The application will access this URL to check for updates.
# 配置本地服务器的服务地址
config WEBSOCKET_URL
depends on CONNECTION_TYPE_WEBSOCKET
string "Websocket URL"
default "ws://172.16.1.114:8000/xiaozhi/v1/"
help
Communication with the server through websocket after wake up.
# 修改默认连接方式
choice CONNECTION_TYPE
prompt "Connection Type"
default CONNECTION_TYPE_WEBSOCKET
help
网络数据传输协议
config CONNECTION_TYPE_MQTT_UDP
bool "MQTT + UDP"
config CONNECTION_TYPE_WEBSOCKET
bool "Websocket"
endchoice
# 设置默认的开发板类型
choice BOARD_TYPE
prompt "Board Type"
default BOARD_TYPE_BREAD_COMPACT_WIFI
help
Board type. 开发板类型
config BOARD_TYPE_BREAD_COMPACT_WIFI
bool "面包板新版接线WiFi"
config BOARD_TYPE_BREAD_COMPACT_WIFI_LCD
bool "面包板新版接线WiFi+ LCD"
config BOARD_TYPE_BREAD_COMPACT_ML307
bool "面包板新版接线ML307 AT"
config BOARD_TYPE_BREAD_COMPACT_ESP32
bool "面包板WiFi ESP32 DevKit"
config BOARD_TYPE_BREAD_COMPACT_ESP32_LCD
bool "面包板WiFi+ LCD ESP32 DevKit"
# 设置默认屏幕
choice DISPLAY_OLED_TYPE
depends on BOARD_TYPE_BREAD_COMPACT_WIFI || BOARD_TYPE_BREAD_COMPACT_ML307 || BOARD_TYPE_BREAD_COMPACT_ESP32
prompt "OLED Type"
default OLED_SSD1306_128X32
help
OLED 屏幕类型选择
config OLED_SSD1306_128X32
bool "SSD1306, 分辨率128*32"
config OLED_SSD1306_128X64
bool "SSD1306, 分辨率128*64"
config OLED_SH1106_128X64
bool "SH1106, 分辨率128*64"
endchoice
```
**设定目标板【默认就是,不用修改】**
```
d:
cd D:\dsWork\QingLong\XiaoZhi\xiaozhi-esp32
idf.py set-target esp32s3
```
**进入配置界面**
```
idf.py menuconfig
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150817323.png)配置一下
进入$Xiaozhi$ $Assistant$选项
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150817839.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150818535.png)
$Board$ $Type$:
config BOARD_TYPE_BREAD_COMPACT_WIFI
bool "面包板新版接线WiFi"
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150812722.png)
$DISPLAY\_OLED\_TYPE$:
$OLED\_SSD1306\_128X32$
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150757608.png)
按ESC退回主界面再点S进行保存。
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150822282.png)
**编译固件**
```
idf.py build
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150834785.png)
**打包$bin$固件**
```
cd scripts
python release.py
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/202504150835200.png)
**打包后的产物**
```
D:\dsWork\DuoDuoProject\xiaozhi-esp32\build\merged-binary.bin
```
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721142527263.png)
- 开始烧录
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721142945436.png)
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721143146062.png)![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250721143213622.png)
烧录完成后按下主板上的RST按钮也就是板子右侧上方第一个按钮。
然后进入配网模式:
查看显示屏上的热点名称即SSID值用手机或电脑连接到此热点对ESP32主板进行配网让其连入WIFI
### 六、网络映射
网络映射
知识库
8000 --->8100
小智
8000 WEB UI --> 27011
8002 OTA+JAVA --> 27012
8003 http server --> 27013
8004 websocket --> 27014
需要注意的是绘制科技的服务器,需要配置一下安全策略的范围:
![](https://dsideal.obs.cn-north-1.myhuaweicloud.com/HuangHai/BlogImages/%7Byear%7D/%7Bmonth%7D/%7Bmd5%7D.%7BextName%7D/20250722075509715.png)
测试页面
file:///D:/dsWork/QingLong/XiaoZhi/xiaozhi-esp32-server/main/xiaozhi-server/test/test_page.html
### 七、相关资料
1. [固件开源地址](https://github.com/78/xiaozhi-esp32)
2. [服务端开源地址](https://github.com/xinnan-tech/xiaozhi-esp32-server)
3. [Windows搭建 ESP IDF 5.4.1开发环境以及编译小智](https://icnynnzcwou8.feishu.cn/wiki/JEYDwTTALi5s2zkGlFGcDiRknXf)
4. [小智 AI 聊天机器人百科全书](
https://ccnphfhqs21z.feishu.cn/wiki/F5krwD16viZoF0kKkvDcrZNYnhb)
5. [购买店铺链接](https://docs.qq.com/sheet/DWmRhbnVHSnRWc2xz?tab=vajqu5)
6. [开源小智Server视频教程](https://space.bilibili.com/2042143558/lists/4859662?type=season)
7. [编译固件方法](https://github.com/xinnan-tech/xiaozhi-esp32-server/blob/main/docs/firmware-build.md)
D:\dsWork\DuoDuoProject\xiaozhi-esp32-server-0.7.1\main\xiaozhi-server\core\connection.py
681行
```python
# 黄海扩展
if '史记' in query:
llm_responses = self.llm.response(
self.session_id,
self.dialogue.get_llm_dialogue_with_memory(
query, self.config.get("voiceprint", {})
),
)
```