Skip to content

示例3B:命令脚本流水灯 ​

实验概述 ​

使用 FastBee 的命令脚本动作(actionType=15),通过 PERIPH、DELAY 和 LOG 等简单的声明式命令实现 LED 流水灯效果。

先启用commandScript及开发模式。按示例3创建四个数字输出,将ID对应改为cmd_led1~cmd_led4;所有引用的外设必须先配置并核对接线。GPIO0受板级保留检查约束,必要时改用可用脚位。

硬件接线 ​

开发板标识GPIO引脚连接设备
D1GPIO15LED1(低电平点亮)
D2GPIO2LED2(低电平点亮)
D3GPIO0LED3(低电平点亮)
D4GPIO4LED4(低电平点亮)

方式1:基础顺序流水灯 ​

外设执行规则配置 ​

json
{
  "id": "rule_cmd_flow_basic",
  "name": "命令脚本-基础流水灯",
  "enabled": false,
  "triggers": [
    { "triggerType": 1, "timerMode": 0, "intervalSec": 3600 }
  ],
  "actions": [
    {
      "targetPeriphId": "",
      "actionType": 15,
      "actionValue": "PERIPH cmd_led1 LOW\nDELAY 300\nPERIPH cmd_led1 HIGH\nPERIPH cmd_led2 LOW\nDELAY 300\nPERIPH cmd_led2 HIGH\nPERIPH cmd_led3 LOW\nDELAY 300\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led4 LOW\nDELAY 300\nPERIPH cmd_led4 HIGH\nLOG 基础流水灯一轮完成",
      "useReceivedValue": false,
      "syncDelayMs": 0,
      "execMode": 0
    }
  ],
  "protocolType": 0,
  "scriptContent": "",
  "reportAfterExec": false
}

命令脚本解析 ​

PERIPH cmd_led1 LOW      # 点亮LED1(低电平)
DELAY 300                # 延时300ms
PERIPH cmd_led1 HIGH     # 熄灭LED1(高电平)
PERIPH cmd_led2 LOW      # 点亮LED2
DELAY 300                # 延时300ms
PERIPH cmd_led2 HIGH     # 熄灭LED2
...(依次类推)
LOG 基础流水灯一轮完成    # 打印日志

执行方式 ​

  • 手动执行:保持规则禁用,在 Web 页面点击“执行一次”。当前 schema 没有 manual 触发器,禁用的定时触发器只用于满足规则格式。
  • API 调用:POST /api/periph-exec/run,表单参数 id=rule_cmd_flow_basic

方式2:定时器自动循环流水灯 ​

外设执行规则配置 ​

json
{
  "id": "rule_cmd_flow_timer",
  "name": "命令脚本-定时循环流水灯",
  "enabled": false,
  "triggers": [
    { "triggerType": 1, "timerMode": 0, "intervalSec": 5 }
  ],
  "actions": [
    {
      "actionType": 15,
      "actionValue": "PERIPH cmd_led1 LOW\nDELAY 300\nPERIPH cmd_led1 HIGH\nPERIPH cmd_led2 LOW\nDELAY 300\nPERIPH cmd_led2 HIGH\nPERIPH cmd_led3 LOW\nDELAY 300\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led4 LOW\nDELAY 300\nPERIPH cmd_led4 HIGH",
      "execMode": 0
    }
  ]
}

配置说明 ​

  • intervalSec: 5 - 每5秒执行一轮流水(脚本内部通过 DELAY 控制时序)
  • 定时触发自动循环,无需手动触发

方式3:来回往复流水灯 ​

外设执行规则配置 ​

json
{
  "id": "rule_cmd_flow_bidirectional",
  "name": "命令脚本-往复流水灯",
  "enabled": false,
  "triggers": [
    { "triggerType": 1, "timerMode": 0, "intervalSec": 5 }
  ],
  "actions": [
    {
      "actionType": 15,
      "actionValue": "PERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nPERIPH cmd_led2 LOW\nDELAY 200\nPERIPH cmd_led2 HIGH\nPERIPH cmd_led3 LOW\nDELAY 200\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led4 LOW\nDELAY 200\nPERIPH cmd_led4 HIGH\nPERIPH cmd_led3 LOW\nDELAY 200\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led2 LOW\nDELAY 200\nPERIPH cmd_led2 HIGH",
      "execMode": 0
    }
  ]
}

执行顺序 ​

LED1 → LED2 → LED3 → LED4 → LED3 → LED2 → (循环)

实现类似"乒乓球"的来回效果。


方式4:叠加渐亮流水灯 ​

外设执行规则配置 ​

json
{
  "id": "rule_cmd_flow_accumulate",
  "name": "命令脚本-叠加流水灯",
  "enabled": false,
  "triggers": [
    { "triggerType": 1, "timerMode": 0, "intervalSec": 5 }
  ],
  "actions": [
    {
      "actionType": 15,
      "actionValue": "PERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led2 LOW\nDELAY 200\nPERIPH cmd_led3 LOW\nDELAY 200\nPERIPH cmd_led4 LOW\nDELAY 500\nPERIPH cmd_led1 HIGH\nPERIPH cmd_led2 HIGH\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led4 HIGH",
      "execMode": 0
    }
  ]
}

效果说明 ​

  • LED依次点亮,不熄灭
  • 4个LED全部点亮后延时500ms
  • 然后全部熄灭,开始下一轮

方式5:随机 MQTT 数据(同时复位 LED) ​

外设执行规则配置 ​

json
{
  "id": "rule_cmd_flow_random",
  "name": "命令脚本-随机流水灯",
  "enabled": false,
  "triggers": [
    { "triggerType": 1, "timerMode": 0, "intervalSec": 5 }
  ],
  "actions": [
    {
      "targetPeriphId": "",
      "actionType": 15,
      "actionValue": "PERIPH cmd_led1 HIGH\nPERIPH cmd_led2 HIGH\nPERIPH cmd_led3 HIGH\nPERIPH cmd_led4 HIGH\nMQTT 0 [{\"id\":\"flow_state\",\"value\":\"RANDOM(1,4)\"}]\nLOG 随机流水灯触发",
      "useReceivedValue": false,
      "syncDelayMs": 0,
      "execMode": 0
    }
  ],
  "protocolType": 0,
  "scriptContent": "",
  "reportAfterExec": false
}

说明 ​

  • 先将四个 LED 复位为高电平,再在 MQTT 载荷中使用 RANDOM(1,4) 生成演示值
  • RANDOM() 只在 MQTT 和 LOG 命令中展开,不能动态改写外设 ID
  • 需要启用 MQTT 且连接成功;MQTT 不可用或发布失败时脚本返回失败,不继续执行后续命令

命令脚本语法参考 ​

支持的命令 ​

命令格式说明
PERIPHPERIPH <id> <action> [value]控制外设
DELAYDELAY <ms>延时(毫秒)
LOGLOG <message>打印日志
MQTTMQTT <topicIndex> <payload>通过从 0 开始的已配置主题索引发布 MQTT 消息

PERIPH 子命令 ​

子命令格式说明
HIGHPERIPH <id> HIGH输出高电平
LOWPERIPH <id> LOW输出低电平
PWMPERIPH <id> PWM <value>设置目标外设分辨率内的PWM占空比
BLINKPERIPH <id> BLINK <interval_ms>闪烁
BREATHEPERIPH <id> BREATHE <cycle_ms>启动呼吸效果
STOPPERIPH <id> STOP停止目标外设当前效果

命令分隔符 ​

  • 使用 \n(换行符)分隔多条命令
  • JSON字符串使用 \n 表示一个换行,不要写成表示反斜杠加n的 \\n

能力边界 ​

命令脚本适合短小、确定性的动作序列,不提供变量、条件判断和循环。需要条件联动时使用规则触发器和多个动作,需要重复执行时使用定时触发器。


注意事项 ​

  1. 命令长度限制:一段命令脚本最多 1024 字符、50 条命令
  2. DELAY 精度:软件调度延时不保证硬实时精度
  3. GPIO0 限制:启动时不要将 GPIO0 拉低,否则会进入下载模式
  4. 延时限制:单条 DELAY 最长 10 秒,总延时最长 30 秒,整体执行超过 35 秒会超时
  5. 触发频率:定时器间隔应大于脚本总执行时间,避免队列堆积
  6. 日志输出:使用 LOG 命令可追踪脚本执行进度,便于调试
  7. 错误处理:如果 PERIPH 命令中的外设ID不存在,会跳过并继续执行

扩展练习 ​

练习1:呼吸灯效果 ​

先另建type17、8位PWM外设pwm_led;下面的duty仅适用于8位分辨率:

json
{
  "actionValue": "PERIPH pwm_led PWM 0\nDELAY 50\nPERIPH pwm_led PWM 32\nDELAY 50\nPERIPH pwm_led PWM 64\nDELAY 50\nPERIPH pwm_led PWM 128\nDELAY 50\nPERIPH pwm_led PWM 255\nDELAY 50\nPERIPH pwm_led PWM 128\nDELAY 50\nPERIPH pwm_led PWM 64\nDELAY 50\nPERIPH pwm_led PWM 32\nDELAY 50\nPERIPH pwm_led PWM 0"
}

练习2:交通灯模拟 ​

使用3个LED模拟红黄绿灯:

json
{
  "actionValue": "PERIPH led_red LOW\nDELAY 3000\nPERIPH led_red HIGH\nPERIPH led_yellow LOW\nDELAY 1000\nPERIPH led_yellow HIGH\nPERIPH led_green LOW\nDELAY 3000\nPERIPH led_green HIGH\nLOG 交通灯一轮完成"
}

练习3:摩尔斯电码 ​

使用LED发送SOS信号:

json
{
  "actionValue": "PERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nDELAY 200\nPERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nDELAY 200\nPERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nDELAY 600\nPERIPH cmd_led1 LOW\nDELAY 600\nPERIPH cmd_led1 HIGH\nDELAY 600\nPERIPH cmd_led1 LOW\nDELAY 600\nPERIPH cmd_led1 HIGH\nDELAY 600\nPERIPH cmd_led1 LOW\nDELAY 600\nPERIPH cmd_led1 HIGH\nDELAY 600\nPERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nDELAY 200\nPERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nDELAY 200\nPERIPH cmd_led1 LOW\nDELAY 200\nPERIPH cmd_led1 HIGH\nLOG SOS发送完成"
}

相关文档 ​


提示:硬件控制规则建议先保存为禁用状态,手动“执行一次”验证安全后,再启用定时或事件触发。

蜂信物联 | fastbee.cn