A Python library for OSC communication with the Ponoor Step-series devices.
Welcome to python-step-series
, a Python library to stupidly simplify communication
with ponoor's Step-series devices.
To get started, follow the simple example below and read the documentation to truly see what the Step-series devices have to offer.
There are multiple ways to install python-step-series
. The easiest way is from PyPI:
pip install python-step-series
Or you can install from source. See the Contributing guide for more information on how to do that.
python-step-series
requires Python >=3.7.
from stepseries.commands import GetVersion, SetDestIP
from stepseries.step400 import STEP400
from stepseries.responses import OSCResponse, Version
def default_handler(message: OSCResponse) -> None:
print("Message received:", message)
def version_handler(message: Version) -> None:
print("Firmware:")
print(" - Name:", message.firmware_name)
print(" - Version:", message.firmware_version)
print(" - Compiled:", message.compile_date)
if __name__ == '__main__':
# Configurations that should be changed
dip_switch_id = 0 # Should match what is set on the device
local_ip_address = "10.1.21.56" # The ip address of the device
local_port = 50000
server_address = "0.0.0.0" # The address of the server; should always be 0.0.0.0 (the local machine)
server_port = 50100
# Create a device instance using the configurations above
# This does two things: creates a communication interface and starts up an OSC endpoint for
# the device to communicate with
device = STEP400(dip_switch_id, local_ip_address, local_port, server_address, server_port)
# Register a default handler for messages
# Typically, these are used to log events and print to stdout
# It is recommended to instead register 'filtered' handlers if
# you want to parse the message (like the one below)
device.on(None, default_handler)
# Register a handler just for version info
device.on(Version, version_handler)
# Enable communication with the device
device.set(SetDestIP())
# Get the current version of the firmware
version: Version = device.get(GetVersion())
python-step-series does its best to maintain a simple, yet intuitive API interface regardless of a developer's experience level. As an example, the library provides a template for each command in a nice dataclass object. So, instead of writing
device.set("/setBemfParam 2 1500 200 127 43")
which might be prone to typing errors like mispelling or putting a parameter in the wrong spot, you instead write
from stepseries.commands import SetBemfParam
device.set(
SetBemfParam(
motorID=2,
INT_SPEED=1500,
ST_SLP=200,
FN_SLP_ACC=127,
FN_SLP_DEC=43
)
)
Also, the library will convert the response from the device into a usable dataclass object. For example, instead of a raw string response like
from stepseries.commands import GetBemfParam
resp = device.get(GetBemfParam(1))
print(resp)
>>> /bemfParam 1 1032 25 41 41
which you will then have to later interpolate, you will instead receive a response like
from stepseries.commands import GetBemfParam
from stepseries.responses import BemfParam
resp: BemfParam = device.get(GetBemfParam(1))
print(resp.INT_SPEED)
print(resp.FN_SLP_ACC)
print(resp)
>>> 1032
>>> 41
>>> BemfParam(motorID=1, INT_SPEED=1032, ST_SLP=25, FN_SLP_ACC=41, FN_SLP_DEC=41)
where all the interpolation has already been completed for you.
Any ideas on how to improve this library are welcome. Please see the Contributing guide for a full run-down on how to contribute to this project as well as some tips for making sure your idea is added.
We thank you in-advance for your contributions.
This project has been set up using PyScaffold 4.1.1. For details and usage information on PyScaffold see https://pyscaffold.org/.