回到首页 返回首页
回到顶部 回到顶部
返回上一页 返回上一页

ESP IDF+行空板K10小智GPIO 控制小灯和继电器--学习记录 简单

头像 rzyzzxw 2025.09.27 43 0

10.1

国庆快乐

【项目概述】

在社区论坛看到我崇拜的云天老师发布的基于 ESP-IDF 和行空板 K10 的智能风扇与 LED 灯带控制系统 DF创客社区教程,在B站看到伙伴们发布的修改小智源码控制主控板GPIO引脚的视频,也想尝试学习一下,大佬们的步伐是永远跟不上的,不过跟在后面走一段,看到小智在我手中的成长,也是蛮开心的。

接口丰富,扩展性强.png

所以这个帖子中的内容纯纯是学习(抄作业)笔记,记一下自己的来时路。

屏幕截图 2025-09-13 193021.png

由上图可知,行空板的P0、P1引脚对应ESP32 S3 GPIO1、2。

学习控制行空板K10 P0、P1接口引脚上的LED灯和继电器。

935999086a9162ad7f415300e9c891f.jpg

材料清单

  • 行空板K10 X1
  • DF继电器 X1
  • 灯串模块 X1
  • K10扩展板(用来供电) X1
  • 小风扇+电池模块 X1
  • 机械臂组合(2舵机) X1

步骤1 LED灯和继电器

准备工作:

1、下载安装VSCode,软件安装和使用可参考下面文档:

  • ​下载​​:可以从 Visual Studio Code 官网下载适用于自己操作系统的安装包。
  • ​安装​​:安装过程简单,只需运行安装程序并遵循向导提示。安装时注意​​勾选“添加到 PATH”​​选项,以便在命令行中轻松启动 VS Code。
  • ​中文界面​​:安装后,可以通过扩展市场搜索并安装中文语言包来将界面切换为中文。

模板:ESP32-S3-VSCODE-IDF - Waveshare Wiki

2、安装ESP IDF插件:

安装Espressif IDF插件教程 - Waveshare Wiki

我是第一次使用VSCode,所以开始的步子都是磕磕绊绊的,不过经过一段时间的实操,有点起步了。实践很重要。

3、认真学习小智AI终端控制GPIO简单教程

小智AI终端控制GPIO[简单教程] - 飞书云文档

4、我的第一个尝试是控制行空板P0接口(GPIO 1)上的黄LED灯串和P1接口(GPIO 2)上的继电器控制小风扇,它们都是数字高低电平控制,所以参考教程修改小智源码就可以。

image.png

在df-k10中新建 lamp_G.h (用于控制黄色LED灯串),将教程中代码复制过来修改如下:

代码
#include "mcp_server.h"
#include <esp_log.h>

#define TAG1 "黄灯事件:"

class Yellow_Lamp  {          // 1. 类名改成 Yellow_Lamp 
private:
    bool power_ = false;
    gpio_num_t gpio_num_;

public:
    explicit Yellow_Lamp (gpio_num_t gpio_num) : gpio_num_(gpio_num) {
        gpio_config_t cfg = {
            .pin_bit_mask = (1ULL << gpio_num_),
            .mode = GPIO_MODE_OUTPUT,
            .pull_up_en = GPIO_PULLUP_DISABLE,
            .pull_down_en = GPIO_PULLDOWN_DISABLE,
            .intr_type = GPIO_INTR_DISABLE,
        };
        ESP_ERROR_CHECK(gpio_config(&cfg));
        gpio_set_level(gpio_num_, 0);       //初始化为低电平

        /* 2. 把 MCP 工具名改成黄灯相关 */
        
        auto& server = McpServer::GetInstance();
        server.AddTool("黄灯.获取开关状态", "返回黄灯的开/关状态",      // 工具名称   , 工具描述    
                       PropertyList(), [this](const PropertyList&) {

                           ESP_LOGW(TAG1, "获取到了黄灯的当前状态,当前状态为%s", power_ ? "开" : "关");     //日志记录
                           return power_ ? "{\"灯光状态:\":黄灯是开着的!}" : "{\"灯光状态:\":黄灯是关着的!}";       //返回状态
                       
                       });
   
        server.AddTool("黄灯.打开", "打开黄灯",     // 工具名称   , 工具描述
                       PropertyList(), [this](const PropertyList&) {
                           power_ = true;
                           gpio_set_level(gpio_num_, 1);    //设置为高电平
                           ESP_LOGW(TAG1, "已打开黄灯!");   //日志记录
                           return true;     //返回告诉小智执行成功!
                       });

        server.AddTool("黄灯.关闭", "关闭黄灯",     // 工具名称   , 工具描述
                       PropertyList(), [this](const PropertyList&) {
                           power_ = false;
                           gpio_set_level(gpio_num_, 0);    //设置为低电平
                           ESP_LOGW(TAG1, "已关闭黄灯!");    //日志记录
                           return true;     //返回告诉小智执行成功!
                       });
    }
};

在df-k10中新建 lamp_F.h (用于控制小风扇),将教程中代码复制过来修改如下:

image.png

代码
#include "mcp_server.h"
#include <esp_log.h>

#define TAG2 "风扇事件:"

class Fan_Lamp  {          // 1. 类名改成 Fan_Lamp 
private:
    bool power_ = false;
    gpio_num_t gpio_num_;

public:
    explicit Fan_Lamp (gpio_num_t gpio_num) : gpio_num_(gpio_num) {
        gpio_config_t cfg = {
            .pin_bit_mask = (1ULL << gpio_num_),
            .mode = GPIO_MODE_OUTPUT,
            .pull_up_en = GPIO_PULLUP_DISABLE,
            .pull_down_en = GPIO_PULLDOWN_DISABLE,
            .intr_type = GPIO_INTR_DISABLE,
        };
        ESP_ERROR_CHECK(gpio_config(&cfg));
        gpio_set_level(gpio_num_, 0);       //初始化为低电平

        /* 2. 把 MCP 工具名改成风扇相关 */
        
        auto& server = McpServer::GetInstance();
        server.AddTool("风扇.获取开关状态", "返回风扇的开/关状态",      // 工具名称   , 工具描述    
                       PropertyList(), [this](const PropertyList&) {

                           ESP_LOGW(TAG2, "获取到了风扇的当前状态,当前状态为%s", power_ ? "开" : "关");     //日志记录
                           return power_ ? "{\"灯光状态:\":风扇是开着的!}" : "{\"灯光状态:\":风扇是关着的!}";       //返回状态
                       
                       });
   
        server.AddTool("风扇.打开", "打开风扇",     // 工具名称   , 工具描述
                       PropertyList(), [this](const PropertyList&) {
                           power_ = true;
                           gpio_set_level(gpio_num_, 1);    //设置为高电平
                           ESP_LOGW(TAG2, "已打开风扇!");   //日志记录
                           return true;     //返回告诉小智执行成功!
                       });

        server.AddTool("风扇.关闭", "关闭风扇",     // 工具名称   , 工具描述
                       PropertyList(), [this](const PropertyList&) {
                           power_ = false;
                           gpio_set_level(gpio_num_, 0);    //设置为低电平
                           ESP_LOGW(TAG2, "已关闭风扇!");    //日志记录
                           return true;     //返回告诉小智执行成功!
                       });
    }
};

参考教程,修改df_k10_board.cc文件:

a、在文件开头添加导入上面两个文件。

#include "lamp_G.h"

#include "lamp_F.h"

image.png

b、物联网初始化,添加对 AI 可见设备

static Yellow_Lamp lamp_G(GPIO_NUM_1);

static Fan_Lamp lamp_F(GPIO_NUM_2);

image.png

OK,这样子就可以了。

烧录方式:UART

选择K10使用的串口

设置设备目标:选第一个

SDK配置编辑器:选择行空板K10,保存

1b8df3ad1877e8faf0b3114da4cb4ea.png

构建项目:编译成功

b74a25010c7004de74d82925be11f17.png

烧录项目:

烧录完成,可以测试啦。

评论

user-avatar