Package: pigpio-encoder
Pigpio EncoderVersion: 0.2.4Requires Python 3Python module for the KY040 rotary encoder.This module has been developed for quickly interface a rotary encoder with Raspberry Pi.
It's based on thepigpio 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.FeaturesEasy 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)InstallationInstall the pigpio library(checkpigpio documentationfor alternative installation method)sudo apt-get updatesudo apt-get install pigpio python-pigpio python3-pigpioInstall the pigpio_encoder librarypython3 -mpip install pigpio_encoder(consider add --user option)start pigpio daemonsudo pigpiodHow to useimport the modulefrompigpio_encoder.rotaryimportRotarycreate a callback function for the Rotary Encoder counter.You must pass a positional argument to retrieve the counter value.defrotary_callback(counter):# some action with counter...create a callback function for Up-Rotation events.defup_callback():# some action if rotated upwardcreate a callback function for Down-Rotation events.defdown_callback():# some action if rotated downwardcreate callbacks functions for the SwitchIf 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.defsw_short_callback():# some action...defsw_long_callback():# some action...```create the rotary objecthere 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_idofclksignal>,dt_gpio=<gpio_idofdtsignal>,sw_gpio=<gpio_idofswitchsignal>)setup the rotary encoder for countinghere 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 eventshere 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 switchif 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 listenermy_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 valuesfrompigpio_encoder.rotaryimportRotarydefrotary_callback(counter):print("Counter value: ",counter)defsw_short():print("Switch pressed")defup_callback():print("Up rotation")defdown_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 Featuresfrompigpio_encoder.rotaryimportRotarydefrotary_callback(counter):print("Counter value: ",counter)defsw_short():print("Switch short press")defsw_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...joan2937for the awesomepigpio libraryRaphael Yanceyfor inspiring me this library with hissimilar project