
获取源码
首先就是到 GitHub 上获取源码:
https://github.com/78/xiaozhi-esp32
下载后解压,里面主要是 4 个文件夹,分别是文档、程序、Flash 分区表配置、脚本。

主要看程序,程序里的结构分布如下:
main/
├── application.h/cc # 主应用类
├── assets.h/cc # 资源管理
├── ota.h # OTA升级
├── settings.h # 配置管理
├── system_info.h # 系统信息
├── device_state.h # 设备状态枚举
├── device_state_machine.h # 状态机
├── mcp_server.h # MCP服务器(机器人控制)
├── audio/ # 音频服务
│ ├── audio_service.h/cc
│ ├── audio_processor.h
│ ├── audio_codec.h
│ ├── wake_word.h
│ ├── processors/ # 音频处理器(AFE等)
│ ├── codecs/ # 音频编解码器驱动
│ └── wake_words/ # 唤醒词引擎
├── display/ # 显示模块
│ ├── display.h
│ ├── lvgl_display/ # LVGL图形库
│ ├── oled_display.h
│ └── emote_display.h # Emote显示协议
├── protocols/ # 网络协议
│ ├── protocol.h
│ ├── mqtt_protocol.h/cc
│ └── websocket_protocol.h/cc
├── led/ # LED控制
│ ├── led.h
│ ├── single_led.h
│ └── circular_strip.h
└── boards/ # 硬件板级支持
├── common/ # 通用板类
│ ├── board.h
│ ├── wifi_board.h
│ └── ml307_board.h # 4G模块支持
├── esp-box-3/ # 具体板卡配置
├── electron-bot/ # 机器人平台
└── ... (30+种板卡)
整体架构
┌─────────────────────────────────────────────────────────────────┐
│ Application (主应用层) │
│ ┌───────────────────────────────────────────────────────────┐ │
│ │ 状态管理 │ 事件处理 │ 网络协调 │ OTA升级 │ MCP服务 │ │
│ └───────────────────────────────────────────────────────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Core Services (核心服务层) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │AudioService│ │ Protocol │ │ Assets │ │ Display │ │
│ │(音频处理) │ │ (网络协议) │ │ (资源管理) │ │ (显示输出) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ Board Abstraction (硬件抽象层) │
│ ┌──────────┐ ┌──────────┐ ┌──────────┐ ┌──────────┐ │
│ │AudioCodec │ │ LED │ │ Network │ │ Camera │ │
│ │(音频编解码)│ │ (指示灯) │ │ (网络接口)│ │ (摄像头) │ │
│ └──────────┘ └──────────┘ └──────────┘ └──────────┘ │
├─────────────────────────────────────────────────────────────────┤
│ ESP32 Hardware │
└─────────────────────────────────────────────────────────────────┘
设计的架构还是非常好的,而且有很多资料这里就不展开介绍了。小智有个类似官网百科全书的网址:

https://my.feishu.cn/wiki/F5krwD16viZoF0kKkvDcrZNYnhb
上手操作
如果是和我一样用的是源码已经支持的硬件的话,在搭建好编译下载的环境后,在 boards 文件夹下找到对应的板子文件夹,然后让 AI 根据这个文件夹的内容去编译下载就行了。

编译下载好程序后,根据提示完成配网。然后一些配置就可以在小智控制后台去操作了。

这里可以配置模型、设计人设、声纹识别,甚至设计 UI。
修改源码
上面这套基础流程走通了,后续就可以根据自己的需求修改代码了。我这次的需求比较简单:
增加一个 ADC 温度采集; 重新设计待机界面。
基本上用 Cursor 就能完成。这样改动基本都是硬件板级修改,都是在板级文件夹下进行。

如果跟我一样没有太了解这个项目的话,建议还是不要动框架内的东西,哪怕是用 AI。开始试着改了一下会出现各种奇怪的溢出、声音消失、卡顿等问题。需要修改 AI 部分的话还是要细心了解之后再去动手比较合适。
展示一下这次修改后的 UI 等功能后的小智 AI。

夜雨聆风