当前位置: 首页 > news >正文

ESP32-S3 小智 AI 开发环境搭建与固件编译烧录(MCP 控制 GPIO 点亮 LED 灯示例)

文章目录

  • 小智 AI 官网
  • 小智 AI 文档
  • 小智 AI 源码
  • 小智 AI 简介
  • Web 烧录固件
  • 小智 AI 控制台
  • 开发环境
    • 下载 xiaozhi-esp32 源码
    • 搭建 IDF 开发环境
      • 下载 esp-idf 源码
      • 配置 IDF 环境变量
      • IDF 常用命令
    • 编译 xiaozhi-esp32 源码
      • 选择目标芯片
      • 项目配置
      • 编译项目
      • 烧录固件
      • 监控串口
  • 立创实战派ESP32-S3开发板资源标注图
  • 立创实战派ESP32-S3开发板原理图
  • MCP 控制 GPIO 点亮 LED

在 Mac 环境 下搭建 ESP-IDF 开发环境,编译并烧录 小智 AI 语音机器人(xiaozhi-esp32) 固件。
小智 AI 是一款基于 Qwen / DeepSeek 等大模型 的智能语音助手,通过 MCP 协议 实现多端控制,支持语音唤醒、OLED 显示、声纹识别、MQTT 通信、离线唤醒词、自定义表情等功能。

文章涵盖内容包括:

  • ✅ 环境搭建(ESP-IDF v5.4 与工具链安装)
  • 🧰 源码下载与目标芯片配置
  • ⚙️ idf.py 常用命令讲解
  • 🚀 项目编译与固件烧录
  • 💡 基于 MCP 的 GPIO 控制示例(C++ 代码实现绿灯点亮)

小智 AI 官网

  • https://www.gtai-tech.com/

小智 AI 文档

  • https://docs.gtai-tech.com/welcome

小智 AI 源码

  • https://github.com/78/xiaozhi-esp32

小智 AI 简介

小智 AI 聊天机器人作为一个语音交互入口,利用 Qwen / DeepSeek 等大模型的 AI 能力,通过 MCP 协议实现多端控制。

  • 已实现的功能:

    • Wi-Fi / ML307 Cat.1 4G
    • 离线语音唤醒 ESP-SR
    • 支持两种通信协议(Websocket 或 MQTT+UDP)
    • 采用 OPUS 音频编解码
    • 基于流式 ASR + LLM + TTS 架构的语音交互
    • 声纹识别,识别当前说话人的身份 3D Speaker
    • OLED / LCD 显示屏,支持表情显示
    • 电量显示与电源管理
    • 支持多语言(中文、英文、日文)
    • 支持 ESP32-C3、ESP32-S3、ESP32-P4 芯片平台
    • 通过设备端 MCP 实现设备控制(音量、灯光、电机、GPIO 等)
    • 通过云端 MCP 扩展大模型能力(智能家居控制、PC桌面操作、知识搜索、邮件收发等)
    • 自定义唤醒词、字体、表情与聊天背景,支持网页端在线修改 (自定义Assets生成器)
  • 固件烧录

    • 新手第一次操作建议先不要搭建开发环境,直接使用免开发环境烧录的固件。

    • 固件默认接入 xiaozhi.me 官方服务器,个人用户注册账号可以免费使用 Qwen 实时模型。

Web 烧录固件

  • https://fw.gtai-tech.com/

在这里插入图片描述

注: 烧录完成后如果 出现黑屏 可以按下主板 复位键

小智 AI 控制台

  • https://xiaozhi.me/

在这里插入图片描述

开发环境

  • TRAE CN 或 VSCode
  • 安装 ESP-IDF 插件,选择 SDK 版本 5.4 或以上
  • 本项目使用 Google C++ 代码风格,提交代码时请确保符合规范

下载 xiaozhi-esp32 源码

  • https://github.com/78/xiaozhi-esp32
git clone --branch v2.0.3 --depth 1 https://github.com/78/xiaozhi-esp32.git

注: 下载最新稳定版本 v2.0.3,不推荐最新版编译可能会报错。

搭建 IDF 开发环境

注: 当前示例 xiaozhi-esp32 版本 2.0.3 对应的 ESP-IDF 最低版本要求 ≥ 5.4.0。

  • 《ESP32-S3 ESP-IDF 编程指南》

  • Mac 环境安装开发所需工具

brew install cmake ninja dfu-util
  • 查看源码对应的 IDF 版本号

在这里插入图片描述

下载 esp-idf 源码

  • https://github.com/espressif/esp-idf
git clone --branch v5.5 --depth 1 --recursive https://github.com/espressif/esp-idf.gitcd esp-idf# 安装 ESP32-S3 开发所需的工具链、Python 包和依赖组件
./install.sh esp32s3
# 或为多个目标芯片安装所需工具
./install.sh esp32,esp32c3,esp32s3# 配置环境变量,让 ESP-IDF 的工具链和 Python 环境在当前终端会话中可用
. ./export.sh

在这里插入图片描述

配置 IDF 环境变量

echo '. $HOME/esp-idf/export.sh' >> ~/.zshrc
source ~/.zshrc
# 或
echo '. $HOME/esp-idf/export.sh' >> ~/.bash_profile
source ~/.bash_profile

在这里插入图片描述

注: 配置好环境变量后,每次打开新终端 IDF 工具链都会自动生效。

IDF 常用命令

idf.py --version
idf.py --help# 选择目标芯片
idf.py set-target esp32s3# 项目配置
idf.py menuconfig# 构建项目
idf.py build# 烧录固件
idf.py flash
idf.py flash -p /dev/cu.usbmodem14101# 监控串口,查看串口日志
idf.py monitor

编译 xiaozhi-esp32 源码

cd xiaozhi-esp32

选择目标芯片

idf.py set-target esp32s3

在这里插入图片描述

项目配置

idf.py menuconfig

在这里插入图片描述

  1. 按方向键选择 Xiaozhi Assistant 回车键进入子项

在这里插入图片描述

  1. 选择 Board Type 回车键进入子项选择 立创·实战派 ESP32-S3 开发板

在这里插入图片描述
在这里插入图片描述

注: 根据自己当前开发板来选择。

  1. 保存配置修改并退出(按 Q 键后会弹出保存提示再输入 Y )

在这里插入图片描述

编译项目

idf.py build

在这里插入图片描述
在这里插入图片描述

注: 每次打开新的终端进行项目编译都必须重复以上操作步骤,从 idf.py set-target esp32s3idf.py build

烧录固件

idf.py flash
# 或
idf.py flash -p /dev/cu.usbmodem14101

在这里插入图片描述
在这里插入图片描述

注: 烧录完成后如果 出现黑屏 可以按下主板 复位键

监控串口

在这里插入图片描述
在这里插入图片描述

立创实战派ESP32-S3开发板资源标注图

在这里插入图片描述
在这里插入图片描述

立创实战派ESP32-S3开发板原理图

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

MCP 控制 GPIO 点亮 LED

  • main/boards/lichuang-dev/lamp_G.h
#include "mcp_server.h"       // 引入自定义头文件,定义了 McpServer 类等接口
#include <esp_log.h>          // 引入 ESP-IDF 的日志库,用于打印日志#define TAG_ "绿灯事件:"       // 定义日志标签宏,方便日志输出时区分模块来源// ============================
// 定义一个类:Green_Lamp(绿灯控制器)
// ============================
class Green_Lamp  {// 私有成员区
private:bool power_ = false;    // 成员变量,表示绿灯当前的开关状态(true=开,false=关)gpio_num_t gpio_num_;   // 保存控制绿灯的 GPIO 引脚编号// 定义普通成员函数,用于返回绿灯状态std::string GetStatus(const PropertyList& props) {ESP_LOGW(TAG_, "获取到了绿灯的当前状态,当前状态为%s", power_ ? "开" : "关");return power_ ? "{\"灯光状态:\":绿灯是开着的!}" : "{\"灯光状态:\":绿灯是关着的!}";}// 公有成员区
public:// 构造函数:Green_Lamp(gpio_num)// 语法:explicit 构造函数,防止隐式类型转换// 作用:初始化 GPIO 并注册 MCP 工具explicit Green_Lamp (gpio_num_t gpio_num) : gpio_num_(gpio_num) {// 初始化 GPIO 配置结构体gpio_config_t cfg = {.pin_bit_mask = (1ULL << gpio_num_),    // 指定使用的 GPIO 引脚.mode = GPIO_MODE_OUTPUT,               // 设置为输出模式.pull_up_en = GPIO_PULLUP_DISABLE,      // 禁用上拉.pull_down_en = GPIO_PULLDOWN_DISABLE,  // 禁用下拉.intr_type = GPIO_INTR_DISABLE,         // 禁用中断};// 调用 ESP-IDF API 配置 GPIOESP_ERROR_CHECK(gpio_config(&cfg));// 初始化为低电平(关闭状态)gpio_set_level(gpio_num_, 0);// ===========================// 注册 MCP 工具(绿灯相关控制接口)// ===========================// 获取单例模式的 MCP 服务器实例auto& server = McpServer::GetInstance();// 注册时,使用 std::bind 绑定成员函数using std::placeholders::_1;  // 占位符,代表参数传入位置server.AddTool("绿灯.获取开关状态",                // 工具名称"返回绿灯的开/关状态",              // 工具描述PropertyList(),                  // 工具参数(此处为空)// 将类成员函数与当前对象绑定,返回一个可调用对象(行为与 Lambda 一致)// &Green_Lamp::GetStatus 指向成员函数的指针// _1 占位符,对应回调传入的第一个参数(即 const PropertyList&)std::bind(&Green_Lamp::GetStatus, this, _1));server.AddTool("绿灯.打开", "打开绿灯",PropertyList(), [this](const PropertyList&) {power_ = true;gpio_set_level(gpio_num_, 1);    // 设置为高电平ESP_LOGW(TAG_, "已打开绿灯!");    // 日志记录return true;                     // 返回告诉小智执行成功!});server.AddTool("绿灯.关闭", "关闭绿灯",PropertyList(), [this](const PropertyList&) {power_ = false;gpio_set_level(gpio_num_, 0);    // 设置为低电平ESP_LOGW(TAG_, "已关闭绿灯!");    // 日志记录return true;                     // 返回告诉小智执行成功!});}
};
  • main/boards/lichuang-dev/lichuang_dev_board.cc
// ...#include "lamp_G.h"class LichuangDevBoard : public WifiBoard {
// 私有成员区
private:// ...// 物联网初始化,逐步迁移到 MCP 协议void InitializeTools() {// static LampController lamp(LAMP_GPIO);static Green_Lamp lamp_G(GPIO_NUM_11);}// 公有成员区
public:LichuangDevBoard() : boot_button_(BOOT_BUTTON_GPIO) {// ...// 初始化工具InitializeTools();GetBacklight()->RestoreBrightness();}
}

在这里插入图片描述

  • 编译烧录固件
idf.py build
idf.py flash
  • 监控串口
idf.py monitor

注: 主板网络连接成功后就可以通过语音控制 LED 灯了。例:“小智帮我打开绿灯”

http://www.dtcms.com/a/545747.html

相关文章:

  • 算法 day 38
  • 构建AI智能体:七十八、参数的艺术:如何在有限算力下实现高质量的AI诗歌创作
  • 东网站建设有赞短链接生成
  • 怎么建设自己的卡盟网站wordpress如何自动采集网站图片
  • 做网站 挣广告联盟的佣金做网站的企业有哪些
  • RDP攻击(Remote Desktop Protocol Attack)是什么?
  • RK3576机器人核心:三屏异显+八路摄像头,重塑机器人交互与感知
  • [强化学习] 第三篇:价值—策略—优势的动态闭环
  • 培训型网站 建设方案军刀seo
  • .net网站开发教程辽宁丹东建设厅网站
  • VMware 宿主机给麒麟虚拟机共享文件夹
  • Kubevirt部署好后系统镜像的dv存储创建
  • 基于凭据管理系统实现Nacos服务端配置中数据库密码加密的实践方案
  • 自己做网站最新视频教程wordpress 响应分页
  • wordpress酷黑主题厦门seo报价
  • 开发·SpringBoot+Vue
  • KingbaseES数据库性能调优工具全面解析
  • MySQL 数据备份
  • 电子商务网站的建设方法发布网站制作
  • 深圳外贸网站开发建设推广网站排行榜
  • 《考研408数据结构》第七章(6.1~6.3图的概念、存储方式、深/广度遍历)复习笔记
  • 解决Nacos 2.+版本集群启动报错问题
  • Rust 异步取消(Cancellation)策略:从原理到实践的深度解析
  • 湘潭网站建设 磐石网络优质wordpress .mo文件编辑
  • Spring Boot 框架开发 REST API 接口实践
  • 邓州网站优化新手代理怎么找客源
  • 重庆网站优化网站怎样自己不花钱在电脑上做网页
  • Python驱动的无人机生态三维建模与碳储/生物量/LULC估算全流程实战技术
  • 怎么帮客户做网站建站宠物网站开发与实现结论
  • NTP与RTC两者优先级