|
10| 10
|
[ESP8266/ESP32] 【花雕动手做】ESP32-S3 + MimiClaw 实战:飞书控制 SG90 舵机 |
|
原标题 【花雕动手做】从零实现飞书 AI 控舵机:ESP32-S3 的 MimiClaw 嵌入式实践 ——从“会发光”到“会动”,让你的嵌入式 AI Agent 拥有物理交互能力 引言 在上一篇文章中,我们已实现通过飞书发送“红”“绿”“蓝”等指令,控制 ESP32‑S3 板载的 WS2812 RGB LED 切换颜色,并完成了多色呼吸灯效果的开发。但静态灯效始终缺乏“灵性”,若能让 AI Agent 实现物理运动——比如控制舵机旋转,便能解锁自动开门、机械臂抓取、摄像头云台调控等更丰富的物理交互场景。 这里以 SG90 微型舵机为核心,详细讲解如何在 MimiClaw 框架下添加舵机控制工具,通过飞书自然语言指令(如“舵机0”“舵机90”“舵机180”)实现舵机远程精准控制。全文提供完整可运行代码,适配嵌入式 AI 爱好者、物联网开发者学习参考,手把手带你实现从“静态显示”到“动态交互”的突破。 ![]() |
|
一、舵机控制原理 1.1 SG90 舵机简介 SG90 是一款应用广泛的微型伺服电机,重量仅 9g,扭矩约 1.6kg·cm,凭借小巧的体积和稳定的性能,常被用于机器人关节、智能小车转向、门禁锁控制等场景。它采用三线制接口,各线路功能明确,便于接线操作: - 红色:电源接口,必须接入 5V 电压(不可用 3.3V,否则供电不足) - 棕色/黑色:接地接口(GND),需与开发板共地 - 橙色/黄色:PWM 信号接口,用于接收控制指令 1.2 控制信号原理 SG90 舵机通过 50Hz 的 PWM 信号(周期固定为 20ms)实现角度控制,脉宽(高电平持续时间)与舵机旋转角度存在明确的对应关系,具体如下: - 脉宽 0.5ms → 舵机旋转至 0°(最小角度) - 脉宽 1.5ms → 舵机旋转至 90°(中间角度) - 脉宽 2.5ms → 舵机旋转至 180°(最大角度) ESP32‑S3 内置 LEDC(LED PWM 控制器),可轻松生成 50Hz、14 位精度的 PWM 波形,我们只需将舵机角度换算为对应的占空比,即可实现精准角度控制。 ![]() ![]() |
|
三、MimiClaw 中添加舵机控制工具 MimiClaw 框架项目结构清晰,添加舵机控制功能只需完成三步:创建舵机驱动文件、注册工具、添加自然语言指令映射。全程基于框架规范开发,无需修改核心代码,便于后续扩展和维护。 3.1 创建头文件 tool_servo.h 在项目 tools/ 目录下新建头文件 tool_servo.h,用于声明舵机初始化、角度控制相关函数,代码如下: |
|
3.2 实现源文件 tool_servo.c 在 tools/ 目录下新建源文件 tool_servo.c,实现头文件中声明的函数,基于 LEDC 控制器完成 PWM 信号生成、角度与占空比换算等核心逻辑,代码如下(含详细注释): |
|
3.3 在 tool_registry.c 中注册工具 工具注册是 MimiClaw 框架调用自定义功能的核心步骤,需在 tool_registry.c 中引入舵机工具头文件,并注册舵机控制工具,具体操作如下: 1. 在 tool_registry.c 顶部添加头文件引入: #include "tool_servo.h" 2. 在 tool_registry_init 函数中添加工具注册代码(与其他工具注册代码放在一起): 注意:需确保 main/CMakeLists.txt 文件的 REQUIRES 字段中包含 esp_driver_ledc,否则编译时会出现“driver/ledc.h: No such file”错误,添加后即可正常编译。 |
|
3.4 在 agent_loop.c 中添加自然语言预处理 为实现飞书自然语言直接控制,需在 agent_loop.c 的 try_direct_command 函数中添加舵机指令匹配逻辑,让框架无需调用 LLM,即可快速响应固定指令。找到 try_direct_command 函数,在函数末尾添加以下代码: 说明:上述代码中固定使用 GPIO 16 作为舵机控制引脚,若实际接线时更换了引脚,只需将代码中的“16”替换为实际使用的引脚号即可。 |
|
四、编译与测试 完成代码开发后,通过编译烧录、串口测试、飞书测试三个步骤,验证舵机控制功能是否正常,确保每一步都符合预期效果。 4.1 编译烧录 打开终端,进入项目根目录,执行以下命令完成编译、烧录和串口监控(需将 COM12 替换为实际串口号): 4.2 串口手动测试 当串口监控启动后,等待 MimiClaw 框架初始化完成,出现“mimi> ”提示符时,输入以下指令,手动测试舵机控制功能: 输入指令后,观察舵机是否能准确转动到对应角度。若舵机无反应,需优先检查 5V 供电、共地连接和信号线接线是否正确。 4.3 飞书自然语言测试 确保 MimiClaw 机器人已成功连接飞书,在飞书聊天框中向机器人发送以下指令,测试自然语言控制效果: 测试成功后,串口日志会输出类似以下内容,说明指令被预处理直接捕获并执行,响应速度极快(延迟小于 0.5 秒): |
|
八、扩展思路 本文实现的舵机控制功能可灵活扩展,结合 MimiClaw 框架的特性,可实现更丰富的应用场景,以下是几个实用的扩展方向: 1. 多角度预设 在 try_direct_command 函数中添加更多角度指令,如“舵机45”“舵机135”,同时调整 angle_to_duty 函数,支持 0-180° 任意角度的精准控制,满足更多场景需求。 2. 多舵机控制 ESP32‑S3 拥有多组 LEDC 通道,可为每个舵机分配不同的 LEDC 通道和 GPIO 引脚,修改 tool_servo.c 代码,支持通过 JSON 参数指定舵机引脚,实现多舵机同步控制(如机器人多关节联动)。 3. 传感器联动 结合超声波传感器、温湿度传感器等外设,实现智能化控制:例如通过超声波传感器检测距离,自动控制舵机旋转调整摄像头角度;通过温湿度传感器检测环境温度,自动控制舵机驱动开窗器。 4. 定时任务 利用 MimiClaw 框架的 cron_add 工具,设置定时任务,让舵机在固定时间执行指定动作,例如每天固定时间转动舵机,实现自动宠物喂食器、定时开关门等功能。 5. 平滑运动 在 tool_servo_set_angle 函数中添加步进循环逻辑,让舵机从当前角度逐步过渡到目标角度,实现缓动效果,避免角度突变导致的舵机抖动,提升控制体验。 九、总结 本文详细讲解了在 MimiClaw 嵌入式 AI Agent 框架中添加 SG90 舵机控制功能的完整流程,从舵机原理、硬件接线,到代码开发、工具注册、自然语言映射,再到测试与故障排查,全程贴合实战场景,提供可直接运行的代码和清晰的操作步骤。 通过本文的实践,你的 ESP32‑S3 开发板将不再局限于“智能灯泡”的角色,而是升级为能够执行物理动作的 AI 代理。核心实现逻辑可复用至步进电机、继电器、舵机阵列等其他外设,为机器人、智能家居、自动化设备开发提供了清晰的思路和基础。 项目源码基于 MimiClaw 二次开发,欢迎 fork 和贡献。若在实现过程中遇到任何问题,欢迎在评论区留言交流,共同探讨嵌入式 AI 与物联网的实践技巧。 本文为“花雕学编程”、“花雕动手做”系列博客之一,聚焦嵌入式 AI Agent 与物联网的交叉实践,后续将带来更多实战案例,敬请关注。 |
沪公网安备31011502402448© 2013-2026 Comsenz Inc. Powered by Discuz! X3.4 Licensed