Rotary Encoder Sensor

The rotary_encoder sensor platform allows you to use any continuous-rotation rotary encoders with esphomeyaml. These devices usually have two pins with which they encode the rotation. Every time the knob of the rotary encoder is turned, the signals of the two pins go HIGH and LOW in turn. See this Arduino article to gain a better understanding of these sensors.

../../../_images/rotary_encoder.jpg

Example of a continuous rotary encoder. Pin + is connected to 3.3V, GND is connected to GND, and CLK & DT are A & B.

../../../_images/rotary_encoder-ui.png

To use rotary encoders in esphomeyaml, first identify the two pins encoding th step value. These are often called CLK and DT as in above image. Note if the values this sensor outputs go in the wrong direction, you can just swap these two pins.

# Example configuration entry
sensor:
  - platform: rotary_encoder
    name: "Rotary Encoder"
    pin_a: D1
    pin_b: D2

Configuration variables:

  • pin_a (Required, Pin Schema): The first pin for determining the step value. Must not be a pin from an external I/O expander.
  • pin_b (Required, Pin Schema): The second pin for determining the step value. Must not be a pin from an external I/O expander.
  • name (Required, string): The name of the rotary encoder sensor.
  • pin_reset (Optional, Pin Schema): An optional pin that resets the step value. This is useful with rotary encoders that have have a third pin. Defaults to no reset pin.
  • id (Optional, ID): Manually specify the ID used for code generation.
  • All other options from Sensor and MQTT Component.

Debouncing Output

This sensor can output a lot of values in a short period of time when turning the knob. In order to not put too much stress on your network connection, you can leverage esphomelib’s sensor filters. The following will only send out values if the last input value is at least 0.1s seconds old or if the new rotary encoder value has changed by 10 from the previous value.

# Example configuration entry
sensor:
  - platform: rotary_encoder
    name: "Rotary Encoder"
    pin_a: D1
    pin_b: D2
    filters:
      - or:
        - debounce: 0.1s
        - delta: 10