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

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

文章目录

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

文章涵盖内容包括:

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

小智 AI 官网

小智 AI 文档

小智 AI 源码

小智 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 烧录固件

在这里插入图片描述
注: 烧录完成后如果 出现黑屏 可以按下主板 复位键

小智 AI 控制台

在这里插入图片描述

开发环境

下载 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。
brew install cmake ninja dfu-util 
  • 查看源码对应的 IDF 版本号
在这里插入图片描述

下载 esp-idf 源码

git clone --branch v5.5 --depth 1 --recursive https://github.com/espressif/esp-idf.git cd 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 的日志库,用于打印日志#defineTAG_"绿灯事件:"// 定义日志标签宏,方便日志输出时区分模块来源// ============================// 定义一个类: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 协议voidInitializeTools(){// 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 灯了。例:“小智帮我打开绿灯”

Read more

【架构】前端 pnpm workspace详解

前端 pnpm workspace 架构详解 一篇帮你搞懂 pnpm workspace 的实战向教程,从「为啥要用」到「怎么配」全给你捋清楚;每个知识点都会讲清是什么、为什么、怎么用、注意啥,方便你系统学习、随时查阅、直接落地。 一、先聊聊:我们到底遇到了啥问题? 做前端久了,多包、monorepo、组件库联调这些事一多,就会踩到一堆具体又磨人的坑。下面把这些痛点拆开说:具体表现 → 典型场景 → 对你有啥影响。搞清楚这些,后面再看 pnpm workspace 解决啥就一目了然。 1.1 node_modules 膨胀,磁盘和时间都遭殃 具体表现:用 npm 搞 monorepo 时,根目录一个

15. Web可访问性最佳实践:让每个用户都能平等访问

15. Web可访问性最佳实践:让每个用户都能平等访问 引言 Web 可访问性是前端开发的重要组成部分,它确保所有用户,包括残障人士,都能平等地访问和使用网站。作为一名把代码当散文写的 UI 匠人,我始终认为:好的设计不仅要美观,更要包容。就像一首好的音乐,不仅要动听,更要让所有人都能欣赏。Web 可访问性,就是为了让这种包容成为现实。 什么是 Web 可访问性? Web 可访问性(Web Accessibility)是指网站、工具和技术能够被所有人使用的程度,无论他们是否有残疾。这包括: * 视觉障碍(如失明、低视力) * 听觉障碍(如耳聋) * 运动障碍(如无法使用鼠标) * 认知障碍(如学习困难) 可访问性的重要性 1. 法律要求:许多国家和地区都有关于 Web 可访问性的法律法规 2. 扩大受众:提高可访问性可以让更多人使用你的网站

OpenClaw Web Search 完全指南(2026年3月最新)

OpenClaw Web Search 完全指南(2026年3月最新) 本文详细介绍 OpenClaw 内置 web_search 工具的 5 个官方搜索渠道,以及 Tavily 技能的使用方法。帮助你选择最适合的免费/付费方案。 目录 * OpenClaw 搜索功能概述 * 5 个官方搜索渠道详解 * 1. Brave Search API * 2. Google Gemini * 3. Grok (xAI) * 4. Kimi (Moonshot) * 5. Perplexity * 免费额度对比表 * 推荐配置方案 * Tavily Web Search 技能 * 配置步骤详解 * 常见问题 OpenClaw 搜索功能概述 OpenClaw 提供两种搜索能力:

我用百度智能云跑OpenClaw,AI帮我24小时盯盘、找黑马

OpenClaw(也就是Clawdbot)爆火,成为2026年现象级AI应用,被业界认为是Agent今后的主要发展方向。简单来说,它是一个能够自己操作电脑干活的智能体,你只需要通过聊天工具给他发指令,它就会自动规划和执行任务。 一位博主给了OpenClaw 50美元,让它自生自灭,结果AI通过高频捕捉套利机会,在交易当中获利,仅48小时之内将50美元滚到了2980美元。 这个案例给了我启发:何不让OpenClaw来帮我赚钱,给他操盘思路,复现一个AI炒股大神,并且让大多数人都能轻松抄作业。 于是我开始尝试,首先要搞定OpenClaw的部署,我推荐使用云主机的部署方式,国内各家科技公司都提供了OpenClaw接入服务,下面以百度智能云为例,简单说下部署的过程。 01 百度智能云:轻松部署,极简交互 打开百度智能云官网,现在每天开放 500 个名额,可以一分钱开通,快抢福利吧: https://cloud.baidu.com/product/BCC/moltbot.html 确认订单、完成支付后,就可以准备安装和配置了。