10.1
国庆快乐
【项目概述】
在社区论坛看到我崇拜的云天老师发布的基于 ESP-IDF 和行空板 K10 的智能风扇与 LED 灯带控制系统 DF创客社区教程,在B站看到伙伴们发布的修改小智源码控制主控板GPIO引脚的视频,也想尝试学习一下,大佬们的步伐是永远跟不上的,不过跟在后面走一段,看到小智在我手中的成长,也是蛮开心的。
所以这个帖子中的内容纯纯是学习(抄作业)笔记,记一下自己的来时路。

由上图可知,行空板的P0、P1引脚对应ESP32 S3 GPIO1、2。
学习控制行空板K10 P0、P1接口引脚上的LED灯和继电器。

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

在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 (用于控制小风扇),将教程中代码复制过来修改如下:

#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"

b、物联网初始化,添加对 AI 可见设备
static Yellow_Lamp lamp_G(GPIO_NUM_1);
static Fan_Lamp lamp_F(GPIO_NUM_2);

OK,这样子就可以了。
烧录方式:UART
选择K10使用的串口
设置设备目标:选第一个
SDK配置编辑器:选择行空板K10,保存

构建项目:编译成功

烧录项目:
烧录完成,可以测试啦。
评论