示例6:按键控制
大约 4 分钟
示例6:按键控制
实验概述
通过 GPIO 数字输入(上拉)读取按键状态,实现按键触发 LED、蜂鸣器等外设动作。普中开发板有4个按键(KEY1-KEY4),按下时为低电平。
硬件接线
| 开发板标识 | GPIO引脚 | 连接设备 |
|---|---|---|
| KEY1 | GPIO14 | 按键(按下为低电平) |
| KEY2 | GPIO27 | 按键(按下为低电平) |
| KEY3 | GPIO26 | 按键(按下为低电平) |
| KEY4 | GPIO25 | 按键(按下为低电平) |
按键一端接 GPIO,另一端接 GND,使用内部上拉电阻,按下时 GPIO 读取到低电平。
JSON 配置示例
{
"peripherals": [
{
"id": "key1",
"name": "按键1",
"type": 13,
"enabled": false,
"pins": [14],
"params": {}
},
{
"id": "key2",
"name": "按键2",
"type": 13,
"enabled": false,
"pins": [27],
"params": {}
},
{
"id": "key3",
"name": "按键3",
"type": 13,
"enabled": false,
"pins": [26],
"params": {}
},
{
"id": "key4",
"name": "按键4",
"type": 13,
"enabled": false,
"pins": [25],
"params": {}
}
]
}外设执行联动
场景1:按键控制LED(轮询触发)
功能:按下按键1时切换LED-D1的开关状态
Web界面配置步骤
步骤1:创建规则
- 点击左侧菜单 外设配置 → 切换到 外设执行管理 标签
- 点击 新增规则 按钮
- 填写基础配置:
- 规则名称:
按键控制LED - 上报数据:❌ 禁用
- 启用:✅ 启用
- 规则名称:
步骤2:配置触发器
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 轮询触发 定时检测按键状态 目标外设 选择 key1要轮询的按键外设 轮询间隔 50毫秒检测频率,50ms可避免漏按 响应超时 1000毫秒默认值即可 重试次数 2次默认值即可 轮询延迟 100毫秒默认值即可 比较操作 选择 等于 精确匹配 比较值 0按下时为低电平(0)
步骤3:配置动作
点击 添加动作 按钮
填写动作配置:
字段 填写内容 说明 动作类型 选择 切换电平 翻转GPIO状态 目标外设 选择 led_d1要控制的LED 点击 保存 按钮
执行流程:
每50ms检测一次
↓
读取 key1 状态
↓
判断: key1 == 0 ? (按下)
↓ 是
切换 led_d1 状态(亮→灭 或 灭→亮)⚠️ 注意:轮询间隔建议50ms,太快会占用CPU,太慢可能漏掉短按
场景2:按键中断控制(事件触发)
功能:使用中断方式实现更快的响应速度
前提条件
需要先配置按键为中断类型:
- 编辑
key1外设 - 将 外设类型 改为 中断(下降沿) (type: 19)
- 保存后系统会自动生成事件:
button_key1.pressed
Web界面配置步骤
步骤1:创建规则
- 点击 新增规则
- 填写基础配置:
- 规则名称:
按键中断控制 - 上报数据:✅ 启用
- 启用:✅ 启用
- 规则名称:
步骤2:配置触发器
点击 添加触发 按钮
填写触发器配置:
字段 填写内容 说明 触发类型 选择 事件触发 响应系统事件 事件类别 选择 按键事件 从下拉框选择 具体事件 选择 button_key1.pressed按键1按下事件
步骤3:配置动作
点击 添加动作 按钮
填写动作配置:
字段 填写内容 说明 动作类型 选择 高电平 GPIO输出HIGH 目标外设 选择 relay_01控制继电器 点击 保存 按钮
执行流程:
按键按下(下降沿)
↓
触发中断事件
↓
发射 button_key1.pressed 事件
↓
匹配事件触发器
↓
执行动作:继电器闭合💡 优势:中断方式响应速度<1ms,远快于轮询的50ms
{
"name": "按键控制LED",
"enabled": true,
"triggers": [
{
"type": "poll",
"params": {
"peripheralId": "key1",
"interval": 50,
"condition": "value == 0"
}
}
],
"actions": [
{ "type": "gpio_toggle", "params": { "peripheralId": "led_d1" } }
]
}使用中断方式(更精确)
{
"name": "按键中断控制",
"enabled": true,
"triggers": [
{
"type": "event",
"params": {
"eventType": 100,
"source": "key1"
}
}
],
"actions": [
{ "type": "gpio_write", "params": { "peripheralId": "relay_01", "value": 1 } }
]
}注意事项
- 消抖处理:FastBee 内部对 GPIO 输入做了 50ms 软件消抖
- 上拉/下拉:按键接 GND 使用上拉(type: 13),按键接 VCC 使用下拉(type: 14)
- 轮询间隔:按键检测建议 50ms 间隔,兼顾响应速度和资源消耗
- GPIO25 冲突:如果同时使用继电器和按键4,需更换引脚
- 长按检测:可在脚本中通过记录按下时间实现长按/短按区分
