跳转到内容

GPIO 开关

gpio 开关平台允许你将节点上的任何引脚用作开关。例如,你可以将一个继电器连接到 GPIO 引脚并通过该平台控制它。

# Example configuration entry
switch:
- platform: gpio
pin: GPIOXX
name: "Living Room Dehumidifier"
  • pin(必填,Pin Schema):用于开关的 GPIO 引脚。

  • interlock(可选,列表):一组互锁的其他 GPIO 开关列表。参见 互锁。

  • interlock_wait_time(可选,Time):对于互锁模式,设置在其他互锁组项目被禁用后 等待多长时间再重新激活。 对于电机来说非常有用,因为立即反方向启动可能会引发问题。

  • Switch 中的所有其他选项。

要创建一个低电平有效开关(默认关闭的开关),请使用 Pin Schema:

# Example configuration entry
switch:
- platform: gpio
pin:
number: GPIOXX
inverted: true

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

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

# Example configuration entry
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 选项, 并列出该组中的所有开关。

# Example configuration entry
# Prevent relay #1 and relay #2 from being activated at the same time.
switch:
- platform: gpio
pin: GPIOXX
name: "Relay #1"
id: relay1
interlock: [relay2]
- platform: gpio
pin: GPIOXX
name: "Relay #2"
id: relay2
interlock: [relay1]

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

# Example configuration entry
switch:
- platform: gpio
# etc
id: relay1
interlock: &interlock_group [relay1, relay2]
- platform: gpio
# etc
id: relay2
interlock: *interlock_group

WARNING

这些是软件互锁。因此,软件 bug(始终有可能发生)仍可能 同时激活两个开关。同样,在重置时(在 ESPHome 的代码运行之前), 继电器 GPIO 引脚可能处于上拉激活状态,因此继电器可能在 ESPHome 能够手动 停用它们之前就已经激活。

因此,强烈建议使用硬件互锁(如 SPDT 型继电器)来确保 两个 GPIO 永远不会同时处于活动状态。

另请参见 interlock_wait_time,用于在激活开关之前让互锁组等待一段时间。