High-level interface for the KY040 rotary encoder and switch.
Project description
pyKY040
High-level Python module for the KY040 rotary encoder and switch on Raspberry Pi and similar boards that use RPi.GPIO
Features
- Increment callback
- Decrement callback
- Change callback (increment or decrement)
- Switch press callback
Options
- Scale mode (internal counter is bound between X and Y, and is given as argument in the callback functions)
- Looped scale mode (from X to Y, then X again)
- Custom scale step
Installation
pip install pyky040
Usage
Basic
# Import the module
from pyky040 import pyky040
# Define your callback
def my_callback(scale_position):
print('Hello world! The scale position is {}'.format(scale_position))
# Init the encoder pins (CLK, DT, SW)
my_encoder = pyky040.Encoder(17, 18, 26)
# Setup the options and callbacks (see documentation)
my_encoder.setup(scale_min=0, scale_max=100, step=1, chg_callback=my_callback)
# Launch the listener
my_encoder.watch()
# Mess with the encoder...
# > Hello world! The scale position is 1
# > Hello world! The scale position is 2
# > Hello world! The scale position is 3
# > Hello world! The scale position is 2
# > Hello world! The scale position is 1
In a thread
As the watch()
method runs an infinite polling loop, you might want to run it in a thread if you don't want to block the rest of your script, or if you have multiple encoders to handle.
# Import the module and threading
from pyky040 import pyky040
import threading
# Define your callback
def my_callback(scale_position):
print('Hello world! The scale position is {}'.format(scale_position))
# Init the encoder pins (CLK, DT, SW)
my_encoder = pyky040.Encoder(17, 18, 26)
# Setup the options and callbacks (see documentation)
my_encoder.setup(scale_min=0, scale_max=100, step=1, chg_callback=my_callback)
# Create the thread
my_thread = threading.Thread(target=my_encoder.watch)
# Launch the thread
my_thread.start()
# Do other stuff
print('Other stuff...')
while True:
print('Looped stuff...')
sleep(1000)
# ... this is also where you can setup other encoders!
# Mess with the encoder...
# > Other stuff...
# > Looped stuff...
# > Hello world! The scale position is 1
# > Hello world! The scale position is 2
# > Hello world! The scale position is 3
# > Looped stuff...
# > Hello world! The scale position is 2
Note: The interruption of the module when running in threads is not yet handled, you might have to kill it by yourself 🔪
Documentation
Encoder(CLK=x, DT=y, SW=z)
Initializes the module with the specified encoder pins.
- Options
polling_interval
Specify the pins polling interval in ms (default 1ms)
Encoder.setup()
Setup the behavior of the module. All of the following keyword arguments are optional.
-
Callbacks
inc_callback (function)
When the encoder is incremented (clockwise). Scale position as first argument.dec_callback (function)
When the encoder is decremented. Scale position as first argument.chg_callback (function)
When the encoder is either incremented or decremented. Scale position as first argument.sw_callback (function)
When the encoder switch is pressed
-
Scale mode
scale_min (int/float)
Scale minimumscale_max (int/float)
Scale maximumloop (boolean)
Loop mode (defaults toFalse
)step (int/float)
Scale step when incrementing or decrementing
-
Options
sw_debounce_time (int/float)
Switch debounce time in ms (allow only one interrupt per X ms, dismiss others)
Note: better keep using ints and not floats for more precise results.
Encoder.watch()
Starts the listener. The pins polling interval is 1ms
by default and can be customized (see Encoder()
).
CHANGELOG
0.1.2
- Changed
__init_
args to kwargs for better readability and ease of useEncoder(CLK=x, DT=y, SW=z)
- Added customizable debounce time (in ms) for the switch
setup(..., sw_debounce_time=300)
- Added customizable polling interval (in ms)
Encoder(..., polling_interval=1)
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
File details
Details for the file pyky040-0.1.2.tar.gz
.
File metadata
- Download URL: pyky040-0.1.2.tar.gz
- Upload date:
- Size: 4.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | 91557d373155ef2167b6373d45939160e5b5084a0adea7993f20bcc2c6fd8cf3 |
|
MD5 | 93a1957e6034890b9b58fad3324ec367 |
|
BLAKE2b-256 | 34a8f8ac1216f48a0d54151c22b04879aec6101b72bb42b7a6b9bf387a05cb90 |
File details
Details for the file pyky040-0.1.2-py2.py3-none-any.whl
.
File metadata
- Download URL: pyky040-0.1.2-py2.py3-none-any.whl
- Upload date:
- Size: 18.0 kB
- Tags: Python 2, Python 3
- Uploaded using Trusted Publishing? No
File hashes
Algorithm | Hash digest | |
---|---|---|
SHA256 | ae2b18fbbc292f7319be38cf46a33fee8aee83880145654f52c5fb08effb1e5e |
|
MD5 | 2f9640edd4a32e1eddb02293442741c3 |
|
BLAKE2b-256 | 4b510c74d023d42663abd912af1add3ef7428a535ea020d2a9de9fdb37668e77 |