Skip to main content

Python module for quickly interface a KY040 rotary encoder with Raspberry Pi and Micropython on ESP32.

Project description

Pigpio Encoder

Version: 0.2.4

Requires Python 3

Python module for the KY040 rotary encoder.

This module has been developed for quickly interface a rotary encoder with Raspberry Pi. It's based on the pigpio library (cause it proved to be faster than rpi.GPIO or gpiozero libraries) so you need to install pigpio library and run pigpio daemon before starting your script.

Features

  • Easy to setup callback functions for the Rotary Encoder and the Switch.
  • The Rotary Encoder has customizable min and max values (default 0-100).
  • The Rotary Encoder increase/decrease value is customizable (default 1).
  • The Switch can be activated or not.
  • The Switch can have two different functions for short press or long press.
  • Both Rotary and Switch have a customizable debounce value (default 300ms)

Installation

  • Install the pigpio library (check pigpio documentation for alternative installation method)
  • sudo apt-get update
  • sudo apt-get install pigpio python-pigpio python3-pigpio
  • Install the pigpio_encoder library
  • python3 -mpip install pigpio_encoder (consider add --user option)
  • start pigpio daemon
  • sudo pigpiod

How to use

  • import the module

    from pigpio_encoder.rotary import Rotary
    
  • create a callback function for the Rotary Encoder counter.

    You must pass a positional argument to retrieve the counter value.

    def rotary_callback(counter):
        # some action with counter...
    
  • create a callback function for Up-Rotation events.

    def up_callback():
        # some action if rotated upward
    
  • create a callback function for Down-Rotation events.

    def down_callback():
        # some action if rotated downward
    
  • create callbacks functions for the Switch

    If you intend to use the switch you must create at least the "short press" callback. The "long press" callback is necessary if you want to use that feature.

    def sw_short_callback():
        # some action...
    
    def sw_long_callback():
        # some action...
      ```
    
  • create the rotary object

    here you setup the gpio id as keyword argument. If you don't pass the switch parameter the switch won't be activated.

    my_rotary = Rotary(
            clk_gpio=<gpio_id of clk signal>,
            dt_gpio=<gpio_id of dt signal>,
            sw_gpio=<gpio_id of switch signal>
            )
    
  • setup the rotary encoder for counting

    here you can setup min and max values for the encoder, the increase/decrease value, a debounce value (default 300ms) and the callback function.

    my_rotary.setup_rotary(
            min=<min_value>,
            max=<max_value>,
            scale=<scale_value>,
            debounce=<debounce_value>,
            rotary_callback=<rotary_callback>
            )
    
  • Optional setup for up and down rotation events

    here you can setup min and max values for the encoder, the increase/decrease value, a debounce value (default 300ms) and the callback functions.

    my_rotary.setup_rotary(
            min=<min_value>,
            max=<max_value>,
            scale=<scale_value>,
            debounce=<debounce_value>,
            up_callback=<up_callback>
            down_callback=<down_callback>
            )
    
  • setup the switch

    if you have specified the switch pin when creating the encoder object, here you can setup the debounce value, the long press option and the callbacks.

    my_rotary.setup_switch(
            debounce=<debounce_value>,
            long_press=<True>,
            sw_short_callback=<sw_short_callback>,
            sw_long_callback=<sw_long_callback>
            )
    
  • start the listener

    my_rotary.watch()
    

    Please note that calling .watch() this is only for demostration purposes. It is not neccessary for the encoder to operate it can even cause problems.


Basic example using default values

from pigpio_encoder.rotary import Rotary


def rotary_callback(counter):
  print("Counter value: ", counter)


def sw_short():
  print("Switch pressed")


def up_callback():
  print("Up rotation")


def down_callback():
  print("Down rotation")


my_rotary = Rotary(clk_gpio=27, dt_gpio=22, sw_gpio=17)
my_rotary.setup_rotary(
  rotary_callback=rotary_callback,
  up_callback=up_callback,
  down_callback=down_callback,
)
my_rotary.setup_switch(sw_short_callback=sw_short)

my_rotary.watch()

Please note that calling .watch() this is only for demostration purposes. It is not neccessary for the encoder to operate it can even cause problems.


Example using all the Features

from pigpio_encoder.rotary import Rotary


def rotary_callback(counter):
  print("Counter value: ", counter)


def sw_short():
  print("Switch short press")


def sw_long():
  print("Switch long press")


my_rotary = Rotary(
  clk_gpio=27,
  dt_gpio=22,
  sw_gpio=17
)
my_rotary.setup_rotary(
  min=10,
  max=300,
  scale=5,
  debounce=200,
  rotary_callback=rotary_callback
)
my_rotary.setup_switch(
  debounce=200,
  long_press=True,
  sw_short_callback=sw_short,
  sw_long_callback=sw_long
)

my_rotary.watch()

Please note that calling .watch() this is only for demostration purposes. It is not neccessary for the encoder to operate it can even cause problems.


Thanks to...

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

pigpio_encoder-0.2.4.tar.gz (7.3 kB view details)

Uploaded Source

Built Distribution

pigpio_encoder-0.2.4-py2.py3-none-any.whl (7.3 kB view details)

Uploaded Python 2 Python 3

File details

Details for the file pigpio_encoder-0.2.4.tar.gz.

File metadata

  • Download URL: pigpio_encoder-0.2.4.tar.gz
  • Upload date:
  • Size: 7.3 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.7.3 Linux/5.8.0-0.bpo.2-amd64

File hashes

Hashes for pigpio_encoder-0.2.4.tar.gz
Algorithm Hash digest
SHA256 6efbcc0e7353b42fab6708e2cc076189fafac611f89ac9a18826e17607950f10
MD5 72d5b37d190611a63bf8e686a348ca38
BLAKE2b-256 4c5462d40dcc1052ca899bfff87fb735146037e7ab2aec9eff4fa1841fa61620

See more details on using hashes here.

File details

Details for the file pigpio_encoder-0.2.4-py2.py3-none-any.whl.

File metadata

  • Download URL: pigpio_encoder-0.2.4-py2.py3-none-any.whl
  • Upload date:
  • Size: 7.3 kB
  • Tags: Python 2, Python 3
  • Uploaded using Trusted Publishing? No
  • Uploaded via: poetry/1.1.5 CPython/3.7.3 Linux/5.8.0-0.bpo.2-amd64

File hashes

Hashes for pigpio_encoder-0.2.4-py2.py3-none-any.whl
Algorithm Hash digest
SHA256 00a41c22ebe64bca449f2317a03e2e28e2893381b12c0bc44e66bb4c3ae172dd
MD5 21241b180ee7ff7be6282dff06e4c008
BLAKE2b-256 2208c04bdb75f07afa3927a05acf991e4437324616ec66c241b534114271d06a

See more details on using hashes here.

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page