跳转到内容

旋转编码器传感器

rotary_encoder 传感器平台允许您在 ESPHome 中使用任何连续旋转的旋转编码器。这些设备通常有两个引脚用于编码旋转。每次旋转编码器的旋钮时,两个引脚的信号会依次变为高电平和低电平。请参阅 这篇 Arduino 文章 以更好地理解这些传感器。

连续旋转编码器示例。引脚 + 连接到 3.3VGND 连接到 GNDCLKDT 分别是 A 和 B。

要在 ESPHome 中使用旋转编码器,首先确定编码步进值的两个引脚。这些引脚通常如上图所示称为 CLKDT。请注意,如果此传感器输出的值方向错误,只需交换这两个引脚即可。

# 示例配置条目
sensor:
- platform: rotary_encoder
name: "旋转编码器"
pin_a: D1
pin_b: D2

要修改引脚的其他参数(如活动状态或上拉),您可以添加额外的选项。

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

  • pin_b (必需, 引脚模式): 用于确定步进值的第二个引脚。不能是外部 I/O 扩展器的引脚。

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

  • resolution (可选, 字符串): 传感器的分辨率,控制一步产生多少个脉冲:

    • 1 - (默认)
    • 2
    • 4
  • min_value (可选, 整数): 此旋转编码器将达到的最小值,进一步旋转旋钮不会减少数值。默认为无最小值。

  • max_value (可选, 整数): 此旋转编码器将达到的最大值,进一步旋转旋钮不会增加数值。默认为无最大值。

  • publish_initial_value (可选, 布尔值): 控制是否在 ESPHome 启动时发布值。默认情况下,只有在值更改时才发布,导致最初显示”未知”值。如果将此选项设置为 true,则在启动后和值更改时各发布一次。默认为 false

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

    • RESTORE_DEFAULT_ZERO - (默认) 尝试恢复状态,如果无法恢复则默认为零 (0)。
    • ALWAYS_ZERO - 始终以零 (0) 值初始化计数器。
  • on_clockwise (可选, 自动化): 顺时针旋转旋钮时要执行的操作。请参阅 on_clockwiseon_anticlockwise 触发器

  • on_anticlockwise (可选, 自动化): 逆时针旋转旋钮时要执行的操作。请参阅 on_clockwiseon_anticlockwise 触发器

  • 传感器的所有其他选项。

可以使用此动作手动将旋转编码器的内部状态更改为任何值。执行此动作后,进一步旋转编码器将相对于新设置的内部值增加/减少状态。

# 示例配置条目
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 (必需, 整数, 可模板化): 要将内部计数器设置为的值。

on_clockwiseon_anticlockwise 触发器

Section titled “on_clockwise 和 on_anticlockwise 触发器”

使用这些配置选项,您可以根据编码器旋转的方向而不是其当前值运行自动化。这些触发器忽略最小和最大值,并且每一步都会触发。

on_clockwise:
- logger.log: "顺时针旋转"
on_anticlockwise:
- logger.log: "逆时针旋转"