### 一、服务器端下载 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 set-target esp32s3 ``` **步骤3** **进入配置界面** ``` 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 websocket --> ws://www.hzkjai.com:27014 8001 WEB UI --> http://www.hzkjai.com:27011 8002 OTA+JAVA --> http://www.hzkjai.com:27012 8003 http server --> http://www.hzkjai.com:27013 需要注意的是绘制科技的服务器,需要配置一下安全策略的范围: ![](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", {}) ), ) ```