跳转到内容

旋转编码器传感器

rotary_encoder 传感器平台允许您在 ESPHome 中使用任意连续旋转编码器。这些设备通常有两个引脚,用于对旋转进行编码。每当旋转编码器的旋钮转动一次,两个引脚的信号会依次变为 HIGH 和 LOW。参见这篇 Arduino 文章以更好地了解这些传感器。

连续旋转编码器的示例。引脚 + 连接到 3.3V,GND 连接到 GND,CLK 和 DT 分别对应 A 和 B。

要在 ESPHome 中使用旋转编码器,首先识别用于编码步进值的两个引脚。它们通常称为 CLK 和 DT,如上图所示。请注意,如果该传感器输出的数值方向不对,只需交换这两个引脚即可。

# 示例配置条目
sensor:
- platform: rotary_encoder
name: "Rotary Encoder"
pin_a: D1
pin_b: D2

如需修改引脚的其他参数,例如有效电平或上拉,可以添加额外选项。

# 高级引脚配置示例
pin_a:
number: D5
inverted: true
mode:
input: true
pullup: true
  • pin_a (必选, Pin Schema): 用于确定步进值的第一个引脚。不能来自外部 I/O 扩展器的引脚。

  • pin_b (必选, Pin Schema): 用于确定步进值的第二个引脚。不能来自外部 I/O 扩展器的引脚。

  • pin_reset (可选, Pin Schema): 一个用于重置步进值的可选引脚。这对于具有第三个引脚的旋转编码器很有用。默认为无重置引脚。

  • resolution (可选, string): 传感器的分辨率,控制每个步进产生多少个脉冲:

    • 1 -(默认)
    • 2
    • 4
  • min_value (可选, int): 旋转编码器可到达的最小值,继续转动旋钮不会减少该数值。默认为无最小值。

  • max_value (可选, int): 旋转编码器可到达的最大值,继续转动旋钮不会增加该数值。默认为无最大值。

  • publish_initial_value (可选, boolean): 控制 ESPHome 启动时是否发布数值。默认情况下,只有当数值发生变化时才发布,导致初次显示为”unknown”(未知)。如果将此选项设为 true,则在启动后发布一次,并在数值变化时发布。默认为 false。

  • restore_mode (可选): 控制旋转编码器在启动时如何尝试恢复状态。

    • RESTORE_DEFAULT_ZERO -(默认)尝试恢复状态;如果无法恢复,则默认为 0。
    • ALWAYS_ZERO - 总是将计数器初始化为 0。
  • on_clockwise (可选, Automation): 旋钮顺时针转动时要执行的动作。参见on_clockwise 与 on_anticlockwise 触发器。

  • on_anticlockwise (可选, Automation): 旋钮逆时针转动时要执行的动作。参见on_clockwise 与 on_anticlockwise 触发器。

  • Sensor 的所有其他选项。

旋转编码器的内部状态可以通过此动作手动更改为任意值。执行此动作后,继续旋转编码器会相对新设置的内部值进行增减。

# 示例配置条目
sensor:
- platform: rotary_encoder
id: my_rotary_encoder
# ...
# 在某个触发器中
on_...:
- sensor.rotary_encoder.set_value:
id: my_rotary_encoder
value: 10
# 模板化
- sensor.rotary_encoder.set_value:
id: my_rotary_encoder
value: !lambda 'return -1;'

配置选项:

  • id (必选, ID): 旋转编码器的 ID。
  • value (必选, int, 可模板化): 要将内部计数器设置成的值。

on_clockwise 与 on_anticlockwise 触发器

Section titled “on_clockwise 与 on_anticlockwise 触发器”

通过这些配置选项,您可以根据编码器的转动方向(而不是其当前数值)来运行自动化。 这些触发器会忽略最小和最大值,会在每一步骤上触发。

on_clockwise:
- logger.log: "Turned Clockwise"
on_anticlockwise:
- logger.log: "Turned Anticlockwise"