跳转到内容

GPIO 开关

gpio 开关平台允许您使用节点上的任何引脚作为开关。例如,您可以将 Relay 连接到 GPIO 引脚并通过此平台使用它。

# 示例配置条目
switch:
- platform: gpio
pin: GPIOXX
name: "Living Room Dehumidifier"
  • pin必填引脚模式):用于开关的 GPIO 引脚。

  • interlock可选,列表):互锁组中其他 GPIO 开关的列表。请参阅互锁

  • interlock_wait_time可选时间):对于互锁模式,设置在互锁组中的其他项目被禁用后等待多长时间再重新激活。 对于电机等设备很有用,立即向相反方向开启可能会导致问题。

  • 所有其他选项来自 Switch

要创建低电平有效开关(默认关闭的开关),请使用引脚模式

# 示例配置条目
switch:
- platform: gpio
pin:
number: GPIOXX
inverted: true

要创建点动开关,例如短暂切换引脚状态的开关,您可以使用 on_turn_on 触发器。

这是一个使用单个 Relay 来激活遥控器按钮的示例。按钮只能启动或停止大门的电机。按钮或遥控器本身无法知道它是打开还是关闭大门。Relay 模拟按钮按下 500ms。

# 示例配置条目
switch:
- platform: gpio
pin: GPIOXX
id: relay
name: "Gate Remote"
icon: "mdi:gate"
on_turn_on:
- delay: 500ms
- switch.turn_off: relay

在某些情况下,需要确保两个输出永远不会同时激活。 ESPHome 有一个功能可以防止两个 GPIO 开关同时激活,称为互锁。只需给”互锁组”中的每个开关一个 interlock 选项, 其中包含组中所有开关的列表。

# 示例配置条目
# 防止 relay #1 和 relay #2 同时被激活。
switch:
- platform: gpio
pin: GPIOXX
name: "Relay #1"
id: relay1
interlock: [relay2]
- platform: gpio
pin: GPIOXX
name: "Relay #2"
id: relay2
interlock: [relay1]

或使用一些 YAML 锚点,您可以进一步简化配置:

# 示例配置条目
switch:
- platform: gpio
# 等等
id: relay1
interlock: &interlock_group [relay1, relay2]
- platform: gpio
# 等等
id: relay2
interlock: *interlock_group

WARNING

这些是软件互锁。因此,软件错误(这总是可能发生的)仍然可能同时激活两个开关。同样,在复位时(在任何 ESPHome 代码运行之前), Relay 的 GPIO 引脚可能有上拉电阻处于激活状态,因此 Relay 可能在 ESPHome 能够手动禁用它们之前就已经激活。

因此,强烈建议使用硬件互锁(如 SPDT 型 Relay)来确保两个 GPIO 永远不会同时激活。

另请参阅 interlock_wait_time 以使互锁组在激活开关之前等待一定时间。