旧手机-ESP32C6小智AI情绪小车

2026-09-303

【项目背景】

不用自己写语音识别、不用云主机、不用加屏幕——给小车的"大脑"直接接上 小智手机版 App(连虾哥的 MCP 服务器),主控用 ESP32-C6-DevKitM-1 开发板 当"关节",一辆 L298N 驱动的四轮小车 就会**"看脸色行事"**:

  • 你说「我今天有些情绪低落」——小车先左右摇摆,再慢悠悠驶到你面前停住,像在安慰你;
  • 你说「我好高兴啊」——小车立刻前后快速窜动,比你还开心;
  • 你说「气死我了」——小车开始快速冲撞式前进后退,替你"跺脚"。

整台车是一块 亚克力激光切割车身,车顶开好手机槽,小智 App 的手机直接放上去就能玩,完全不需要电脑中继、不需要树莓派。

本项目已在实机验证:小智 AI 语音对话、情绪识别、四轮动作执行全部跑通。
旧手机-ESP32C6小智AI情绪小车_image_1.webp


一、项目架构

你说话 ──▶ 小智手机版App(语音识别 + 大模型对话)
                │ 情绪理解:高兴/难过/生气/疲惫...
                ▼
        wss://api.xiaozhi.me/mcp/ (虾哥服务器,MCP 协议)
                │ 调用小车注册的工具
                ▼
        ESP32-C6 ◀── WiFi(2.4G)
                │ L298N 双H桥(PWM 调速)
                ▼
        四轮电机:左两轮并联 + 右两轮并联(差速转向)

为什么用"小智 App + MCP",而不是让 C6 自己接大模型?

  • 语音识别 / 语义理解 / 情绪判断全在云端小智完成,C6 只负责"听懂工具调用、开电机",代码量小、功耗低、开发快
  • 小智 App 的整个对话链路(ASR→LLM→TTS→声音播放)都是现成的,小车只是它的"手和脚"
  • C6 通过 WebSocket MCP(Model Context Protocol) 把"能干什么"注册给 AI:前进、转向、调速、播放情绪动作……AI 自主决定何时调用哪个工具

二、材料清单

类别 名称 数量 说明
主控 ESP32-C6-DevKitM-1 开发板 1 板载RGB LED(IO8)、WiFi 2.4G
驱动 L298N 双 H 桥电机驱动板 1 两路电机,PWM 调速,共地使用
电机 直流减速电机(带轮四驱小车底盘) 4 左两轮并联、右两轮并联
电源 7.4V 2S 锂电池组(18650×2) 1 进 L298N 电机电源;四轮并联电流大,电池需 2A 以上
车身 3mm 亚克力板(激光切割) 若干 底板 + 各层支架,顶部留手机卡槽
交互 手机(安卓/iOS) 1 安装小智 App,放在车顶槽内
网络 2.4G WiFi 路由器/热点 1 C6 与小智 App 连同一网络
调试 Type-C 数据线 1 烧录 + 串口监视
服务 小智 MCP(api.xiaozhi.me) — 注册小智账号,创建 MCP Agent 获得 token

手机必须能上网且装得了小智 App,旧手机也完全够用——正好"旧手机再就业"。


旧手机-ESP32C6小智AI情绪小车_image_2.webp

三、接线(L298N ↔ C6)

务必共地:L298N 的 GND 与 C6 的 GND 相连,否则信号不识别。

四轮接法:左前、左后两个电机并联接到 L298N A 通道;右前、右后两个电机并联接到 B 通道。两路独立 PWM 调速,差速转向。

C6 GPIO L298N 端子 作用
GPIO2 IN1(A通道) 左轮组方向1
GPIO3 IN2(A通道) 左轮组方向2
GPIO4 ENA(A通道) 左轮组速度 PWM
GPIO5 IN3(B通道) 右轮组方向1
GPIO6 IN4(B通道) 右轮组方向2
GPIO7 ENB(B通道) 右轮组速度 PWM
GND GND 共地(必须)
电池 7.4V VCC/12V 端子 电机电源(L298N 建议加散热片)

旧手机-ESP32C6小智AI情绪小车_image_3.webp

旧手机-ESP32C6小智AI情绪小车_image_4.webp

引脚定义在 .ino 顶部,可按实际焊接修改;若某一侧转向相反,互换该侧两根 IN 线即可,不用改代码。


四、软件环境

4.1 开发环境

  • Arduino IDE(2.x 均可),安装 Espressif ESP32 板卡包(3.x)
  • 开发板选择:ESP32C6 Dev Module
  • 工具 → USB CDC On Boot = Enabled(否则程序运行后串口会断开)
  • 库:ArduinoJson + 小智的 WebSocketMCP 库(用法与官方例程一致;其底层 WebSocket 库需支持 C6 的新版本)

4.2 小智 MCP 接入

  • App:手机版小智 App(连接虾哥服务器)
https://rcnuybsa4dtk.feishu.cn/docx/LUl9dkbXnofsh5xqA5Tc0vDQnff
  • MCP 接入点:wss://api.xiaozhi.me/mcp/?token=你的token
  • 流程:C6 连 WiFi → 建立 WebSocket → 连接成功后注册工具 → 小智 AI 在对话中根据用户意图自主调用工具

4.3 WiFi 配置

const char* WIFI_SSID = "你的热点";   // C6 只支持 2.4GHz
const char* WIFI_PASS = "你的密码";
// MCP 端点:
const char* MCP_ENDPOINT = "wss://api.xiaozhi.me/mcp/?token=你的token";

发布到社区前请把真实的热点名称/密码与 token 替换掉,勿公开真实凭据。


五、程序说明

5.1 程序结构

esp32c6_xiaozhi_car/
└── esp32c6_xiaozhi_car.ino   ← C6 主程序(MCP 工具 + 电机控制 + 情绪脚本引擎)

主循环三件事:mcpClient.loop()(收工具调用)→ checkMotionEnd()(动作到时自动停车)→ 串口命令处理。动作控制非阻塞,WebSocket 不会被长的电机动作卡住。

5.2 注册的 MCP 工具(小智 AI 可调用)

工具 参数 作用
car_control action: forward/backward/left/right/stop;可选 duration_ms、speed 前进/后退/左转/右转/停车,到时自动停车
car_emotion emotion: happy/excited/sad/angry/tired/surprised/nervous/love/curious/calm 按情绪播放动作序列(见第六节)
car_set_speed side: left/right/both;speed: 0~255 左右轮组独立调速
car_status 无 返回当前动作、左右速度、WiFi/MCP 连接状态

car_emotion 的工具描述里就写明了每种情绪的语义和动作,AI 读到描述后会主动在合适时机调用:

mcpClient.registerTool(
  "car_emotion",
  "根据用户表达的情绪让小车做出相应动作。当用户表达高兴/难过/生气等情绪或感受时,"
  "应调用此工具... happy=高兴(前后快速移动),sad=难过(左右摇摆并缓慢靠近用户以安慰)...",
  "{\"properties\":{\"emotion\":{...\"enum\":[\"happy\",\"excited\",\"sad\",\"angry\","
  "\"tired\",\"surprised\",\"nervous\",\"love\",\"curious\",\"calm\"]...}}}",
  [](const String& args) { /* 解析 emotion → runEmotionScript */ }
);

5.3 情绪动作脚本引擎

每种情绪是一串 动作+时长 的序列(k* 数组),loop() 里逐段非阻塞播放,播完自动停车;新指令随时打断当前脚本:

static const ScriptStep kSad[] = {
  {"LEFT",400},{"RIGHT",400},{"LEFT",400},{"RIGHT",400},  // 先左右摇摆
  {"FORWARD",900},                                        // 再缓慢靠近你
};
static const ScriptStep kHappy[] = {
  {"FORWARD",350},{"BACKWARD",350},{"FORWARD",350},{"BACKWARD",350}, // 前后快速移动
};

脚本还带速度覆盖与恢复:难过/喜爱用低速显得温柔,播完自动恢复原速度,不影响后续正常行驶。

5.4 串口调试命令

不连小智也能测车:forward / backward / left / right / stop 单动作,emotion happy、emotion sad 直接播放情绪动作,另有 help / status / tools / reconnect。


六、情绪 → 小车动作设计(核心玩法)

情绪 小车动作 速度
happy 高兴/开心 前后快速移动(350ms 往返 ×2) 255 快
excited 兴奋 原地左右旋转(500ms 交替 ×2) 200
sad 难过/低落 左右摇摆 ×2 → 缓慢前进到你面前(安慰) 120 慢
angry 生气 快速冲撞式前进后退(600/400/500/300ms) 255 快
tired 疲惫/困 缓慢爬行一步一歇(前600 → 停400 ×2) 100 很慢
surprised 惊讶 向后退跳两下(300ms + 200ms) 190
nervous 焦虑/紧张 原地来回踱步(前200 ↔ 后200 ×3) 150
love 喜爱/撒娇 缓慢靠近并左右轻摇(前400 → 左摇右摇 → 前400) 120 慢
curious 好奇 左右张望(左望→停→右望→停→左望) 160
calm 平静 静止片刻 —

所有序列都在 k* 数组里,时长和速度随手可调:想让"难过"动作靠得更近,把最后的 FORWARD 时长加长即可。


七、制作步骤

  1. 切车身:设计亚克力底板(几毫米厚),预留 4 个电机座、L298N 固定孔、电池仓、顶部手机卡槽(手机横放/竖放均可,直接嵌入)
  2. 接线:四轮电机两两并联 → L298N A/B 通道,C6 GPIO 2~7 接 IN/ENA/ENB,务必共地,电池接 L298N 电机电源端子
  3. 烧录:Arduino IDE 打开 esp32c6_xiaozhi_car.ino,选板卡 "ESP32C6 Dev Module",USB CDC On Boot = Enabled,填好 WiFi 和 token 后上传
  4. 串口监视器(115200)确认 WiFi 已连接、MCP 已连接、工具注册完成,共4个工具
  5. 串口先测车:输入 forward、emotion sad,确认动作和转向正常(转向反了就互换该侧两根 IN 线)
  6. 配小智 App:把手机放上车顶槽,连同一 WiFi;建议在 agent 提示词里加一句——"当用户表达高兴/难过/生气等情绪时,调用 car_emotion 工具让小车做出相应动作"
  7. 开始聊天,享受"看脸色行事"的小车

旧手机-ESP32C6小智AI情绪小车_image_5.webp旧手机-ESP32C6小智AI情绪小车_image_6.webp

八、使用演示

你说 小车动作
"我好高兴啊!" 前后快速窜动
"今天太兴奋了" 原地旋转
"我今天有些情绪低落" 左右摇摆 → 缓慢驶到你面前停住
"气死我了!" 快速冲撞式前进后退
"好困啊……" 缓慢爬行,一步一歇
"哇,好神奇!" 向后跳退两下
"我好害怕" 原地来回踱步
"最喜欢你了" 慢慢靠近你,轻轻摇摆
"这是什么呀?" 左右张望
"前进、左转、再停下" 按普通指令行驶(car_control)

【手机小智车】


九、技术难点与解决(经验分享)

  1. 让 AI 主动"看情绪",而不是只等用户下命令
    → 利用 MCP 工具描述即提示词:把每种情绪的语义、对应动作写进 car_emotion 的描述里;再在 agent 提示词补一句"表达情绪时调用 car_emotion"。AI 读到工具清单就会自主匹配。
  2. 一段情绪动作是"连续多步",不能阻塞 WebSocket
    → 动作脚本引擎:ScriptStep 数组存"动作+时长",loop() 非阻塞逐段推进,checkMotionEnd() 到时自动切下一段或停车。长动作期间 MCP 收包不掉帧。
  3. AI 可能连发多条指令,新旧动作冲突
    → 每次新指令(工具调用或串口命令)先 cancelScript() 打断旧脚本,再执行新动作;所有动作都带超时自动停车作为保底。
  4. 四轮并联电流大
    → 电池选 2A 以上(推荐 7.4V 2S),L298N 加散热片;C6 不要从 L298N 的 5V 输出取电,避免压降掉线。
  5. 转向方向反了
    → 互换该侧两根 IN 线即可,无需改代码。
  6. 串口运行后断开
    → 工具 → USB CDC On Boot = Enabled。

十、注意事项

  • MCP token 即账号凭据,勿公开上传;发布文章前把热点名称/密码和 token 替换为占位符
  • C6 只支持 2.4GHz WiFi;手机与小 C6 连同一热点(或同一路由的 2.4G 段)信号更稳
  • L298N 与 C6 必须共地;电机独立供电,不要从 C6 引脚取电
  • 情绪"靠近/冲撞"动作执行时注意前方障碍和桌边,测试可先把对应 FORWARD 时长调短
  • 首次对话模型可能偏慢,属正常;MCP 断线后小车会自动重连等待

十一、参考资料


本文由实际完成的项目整理而成。如果你也有一辆亚克力小车和一部旧手机,接上小智,它就会有"情绪"——欢迎在评论区交流!

创作许可协议

本项目采用 CC BY(署名) 进行许可。

所需材料/产品

加载全部

    ESP32-C6-DevKitM-1开发板

    ESP32-C6-DevKitM-1开发板

    ESP32-C6-DevKitM-1开发板

相关推荐

评论(0)
- 没有更多了 -

创作许可协议

本项目采用 CC BY(署名) 进行许可。

相关推荐

所需材料/产品

ESP32-C6-DevKitM-1开发板

ESP32-C6-DevKitM-1开发板

ESP32-C6-DevKitM-1开发板