rotaryio – Support for reading rotation sensors

The rotaryio module contains classes to read different rotation encoding schemes. See Wikipedia’s Rotary Encoder page for more background.

All classes change hardware state and should be deinitialized when they are no longer needed if the program continues after use. To do so, either call deinit() or use a context manager. See Lifetime and ContextManagers for more info.

class rotaryio.IncrementalEncoder(pin_a: microcontroller.Pin, pin_b: microcontroller.Pin)

IncrementalEncoder determines the relative rotational position based on two series of pulses.

Create an IncrementalEncoder object associated with the given pins. It tracks the positional state of an incremental rotary encoder (also known as a quadrature encoder.) Position is relative to the position when the object is contructed.

  • pin_a (Pin) – First pin to read pulses from.

  • pin_b (Pin) – Second pin to read pulses from.

For example:

import rotaryio
import time
from board import *

enc = rotaryio.IncrementalEncoder(D1, D2)
last_position = None
while True:
    position = enc.position
    if last_position == None or position != last_position:
    last_position = position
position :int

The current position in terms of pulses. The number of pulses per rotation is defined by the specific hardware.


Deinitializes the IncrementalEncoder and releases any hardware resources for reuse.


No-op used by Context Managers.


Automatically deinitializes the hardware when exiting a context. See Lifetime and ContextManagers for more info.