小智AI在物联网设备控制中的探索与实践之旅

本文介绍我如何基于小智 AI 平台,在 ESP32 上接入舵机和氛围灯,实现语音控制,并通过 WeXCube 小程序实现可视化操作界面。全流程开源可改,适合 DIY 玩家和 IoT 开发者。


一、背景:AI 上设备,能聊还能控

今年年初,小智 AI 在物联网圈子里火了一把。这款基于 ESP32 的开源语音助手,支持大模型本地推理,能实现基础的语音聊天与设备控制,尤其是开放的插件机制让我们可以轻松接入自定义设备。

尽管它的语音聊天还不如手机上的AI语音聊天应用强大,但在 IoT 设备控制方面非常值得玩味。

我自己接入了两个设备:

  • 一个 SG90 舵机

  • 一个 WS2812 RGB 灯带


  • 二、AI 控设备:不靠关键词,靠理解

    最初我以为控制方式是“关键词 + 回调函数”,结果发现 小智 AI 不需要你写死语音命令!

    舵机控制

    我在驱动完成后,只需要调用:

    // 定义设备的属性
    properties_.AddNumberProperty("angle", "当前角度值", [this]() -> int {
        return Board::GetInstance().GetServoAngle();
    });
    
    // 定义设备可以被远程执行的指令
    methods_.AddMethod("SetAngle", "设置角度", ParameterList({
        Parameter("angle", "0到180之间的整数", kValueTypeNumber, true)
    }), [this](const ParameterList& parameters) {
        Board::GetInstance().SetServoAngle(static_cast<uint8_t>(parameters["angle"].number()));
    });

    AddNumberProperty(...); // 报告舵机角度

    AddMethod(...); // 设置舵机角度

    然后注册到小智的 IoT 类中,并告知其角度范围是 0 ~ 180。

    就这么简单。小智就能理解诸如:

  • “让舵机站起来”

  • “让它左右摇摆”

  • “跳个舞试试”

  • 它会根据上下文分析自动发出合适的角度指令。

    氛围灯控制

    我同样只做了 WS2812 的底层驱动,定义了颜色的数据格式(RGB),并通过接口注册。没写任何花式灯效。

    // 定义设备的属性
    properties_.AddNumberProperty("color", "当前颜色", [this]() -> int {
        return Board::GetInstance().GetRGBColor();
    });
    
    // 定义设备可以被远程执行的指令
    methods_.AddMethod("SetColor", "设置颜色", ParameterList({
        Parameter("color", "由三个字节组成第一个字节为红色第二个字节为绿色第三个字节为蓝色, 格式为0xRRGGBB", kValueTypeNumber, true)
    }), [this](const ParameterList& parameters) {
        Board::GetInstance().SetRGBColor(static_cast<int32_t>(parameters["color"].number()));
    });

    但我对它说:

  • “灯变成红色”

  • “让它闪烁”

  • “亮一点”

  • 它就能自己生成如 0x00FF0000 的 RGB 数据,还能根据语义控制亮度、颜色、闪烁频率,十分智能。当然小智 AI 控制 IOT 还是有些不足,比如要它控制氛围灯显示黄色,他有时可能会显示错
    误,在小智 AI 后台切换不同的大模型效果也不一样。

    硬件连接示意图

    ESP32S3连接了三个硬件,最上面的是BLE蓝牙透传模块用于小程序通信,中间的是WS2812彩灯,下面的是SG90舵机。


    三、控制原理:AddNumberProperty 与 AddMethod

    小智 AI 控制外设的核心机制是:

    接口名 作用说明
    AddNumberProperty 提供当前设备状态(如当前角度、颜色等)
    AddMethod 设置设备的新状态(执行控制动作)

    例如:你说“现在灯是什么颜色”,小智会调用 AddNumberProperty 来获取当前值;你说“让灯变蓝”,则会调用 AddMethod 设置值。

    分别对应两个文件:

  • servo.c:舵机类定义

  • rgb.c:灯光类定义

  • 这种机制像极了动态模型插件,通过接口统一管理外设,非常方便扩展。


    四、WeXCube 小程序:让控制更直观

    为了更方便调试和使用设备,我结合自己的 WeXCube 小程序 设计了一个控制页面。小程序是通过外部 BLE 蓝牙模块与小智AI设备通信的。

    页面布局如下:

  • 顶部功能区
    提供设备复位、语音控制、音量调节等。支持手动按钮复位。

  • 舵机设置区

  • 可设置设备名称(建议与舵机相关,如“机械臂”)

  • 点击“保存”后需复位 AI,让其记住新设备名

  • 若设备名未生效,可登录小智后台清除记忆体再尝试

  • 氛围灯设置区
    同舵机配置方式一致。建议命名为“灯”、“灯光”等方便 AI 理解。

  • ⚠️ 注意:必须开启设备的“启用状态”,小智 AI 才会识别和控制该设备!


    五、演示视频

    小智AI IOT控制

    小智AI控制IoT设备的探索与实践


    六、总结 & 建议

    小智 AI 是一个将“大模型 + IoT 控制”完美融合的平台。它不要求你写死语音关键词,而是通过 AI 语义理解控制设备,非常适合打造 DIY 智能家居、创意装置、语音助手等项目。

    配合 WeXCube 小程序进行设备配置与控制调试,可以快速搭建属于自己的智能语音控制系统。


    七、源码地址

  • 本项目源码:https://gitee.com/jeremywang0102/wexcube/tree/master/Examples/example6


  • 如果你也在研究 ESP32 + AI + IoT,欢迎留言交流,互相学习!

    作者:JeremyWang0102

    物联沃分享整理
    物联沃-IOTWORD物联网 » 小智AI在物联网设备控制中的探索与实践之旅

    发表回复