最近成功用 ESP32-S3 做出了小智 AI 聊天机器人(xiaozhi-esp32 项目),从环境搭建到最后和小智对话,中间踩了无数坑。这里完整记录我的过程和遇到的所有问题,希望帮到同样入坑的朋友。

一、最终成果

  • 硬件:ESP32-S3 开发板
  • 固件:xiaozhi-esp32 开源项目
  • 环境:Windows + VSCode + ESP-IDF v6.1
  • 最终效果:联网后屏幕显示激活码,在 xiaozhi.me 绑定后即可 AI 语音对话 ✅

二、搭建步骤

1️⃣ 安装 ESP-IDF 开发环境

  • 官网下载 ESP-IDF 安装器,我装的是 v6.1,默认装到 C:\Espressif 和 C:\esp
  • VSCode 安装 ESP-IDF 扩展,用扩展的 Configure 向导配置版本和工具路径

2️⃣ 获取项目

  • GitHub 下载 xiaozhi-esp32 源码 zip,解压备用

3️⃣ 选择目标芯片并构建

  • Ctrl+Shift+P → ESP-IDF: Set Espressif Device Target → 选 esp32s3
  • 点底部状态栏 🔥 Build 按钮构建(首次构建约 5~15 分钟)

4️⃣ 烧录

  • USB 连接开发板,选择 COM 口(我的是COM10)
  • 烧录方式选 UART(不要选 JTAG!)
  • 点 ⚡ Flash 烧录,完成后打开 🖥️ Monitor 看日志

5️⃣ 配网激活

  • 板子启动后连接 WiFi
  • 屏幕显示:激活设备 xiaozhi.me xxxxxx(六位验证码)
  • #include <esp_log.h>
    #include <esp_err.h>
    #include <nvs.h>
    #include <nvs_flash.h>
    #include <driver/gpio.h>
    #include <esp_event.h>
    #include <freertos/FreeRTOS.h>
    #include <freertos/task.h>
    
    #include "application.h"
    
    #define TAG "main"
    
    extern "C" void app_main(void)
    {
        // Initialize NVS flash for WiFi configuration
        esp_err_t ret = nvs_flash_init();
        if (ret == ESP_ERR_NVS_NO_FREE_PAGES || ret == ESP_ERR_NVS_NEW_VERSION_FOUND) {
            ESP_LOGW(TAG, "Erasing NVS flash to fix corruption");
            ESP_ERROR_CHECK(nvs_flash_erase());
            ret = nvs_flash_init();
        }
        ESP_ERROR_CHECK(ret);
    
        // Initialize and run the application
        auto& app = Application::GetInstance();
        app.Initialize();
        app.Run();  // This function runs the main event loop and never returns
    }
    
  • 登录 xiaozhi.me → 控制台 → 添加设备 → 输入验证码 → 绑定成功 🎉

三、踩坑记录(重点!)

💥 坑 1:Python 虚拟环境路径冲突

报错:

'C:\Espressif\...\python.exe' is currently active in the environment
while the project was configured with 'D:\Espressif\...\python.exe'.

原因: 之前在 D 盘装过一次 ESP-IDF,项目缓存记录的还是 D 盘旧路径。
解决: 删除项目里的 build 文件夹和 sdkconfig,用新环境重新构建。

💥 坑 2:项目路径带空格和括号(最隐蔽的坑!)

报错:

ninja: error: rebuilding 'build.ninja': subcommand failed

原因: 项目文件夹名是 xiaozhi-esp32-main (1)(浏览器重复下载自动加的后缀),路径里的空格和括号会让 CMake/Ninja 崩溃。
解决: 把项目移到干净路径,如 C:\esp\project\xiaozhi-esp32-main,无空格、无括号、无中文,删除 build 后重新构建,一次通过!

💥 坑 3:VSCode 满屏“无法打开源文件 nvs.h / FreeRTOS.h”

原因: 这是 IntelliSense 提示问题,不是编译失败。项目没成功构建过,build/compile_commands.json 还没生成。
解决: 先构建成功,红线基本自动消失;不行就 C/C++: Reset IntelliSense Database。

💥 坑 4:烧录时报 OpenOCD 错误

报错:

OpenOCD server failed to start: esp_usb_jtag: could not find or open device!
Can't perform JTAG flash

原因: 烧录方式选成了 JTAG,而普通开发板应该用串口烧录。
解决: ESP-IDF: Select Flash Method → 选 UART,选对 COM 口,再点 Flash。

四、总结心得

  1. 项目路径一定要干净:无空格、无括号、无中文,建议放 C:\esp\project\
  2. 重装环境后记得删 build 缓存,旧路径残留会导致各种诡异报错
  3. 报错别慌,看终端最后几行,ESP-IDF 的报错信息其实写得很清楚
  4. 普通开发板烧录用 UART,JTAG 是调试用的
  5. 遇到问题善用 Ctrl+Shift+P 里的 ESP-IDF 命令和 Doctor 诊断工具
Logo

作为“人工智能6S店”的官方数字引擎,为AI开发者与企业提供一个覆盖软硬件全栈、一站式门户。

更多推荐