Terminal debugger for Feetech STS3215 smart serial bus servos
Project description
sts-suite
Terminal debugger for Feetech STS3215 smart serial bus servos.
Requirements
- Python 3.10 or newer
- A USB-to-TTL adapter wired to the servo bus
Install
With uv:
uv tool install sts-suite
Or with pip:
pip install sts-suite
Run
sts
Pick a serial port and baud rate. The debugger opens. The last choice is saved to ~/.cache/sts-suite/last.json.
If no motors respond, hit Baud sweep in the port picker and it will try every preset and pick the one with the most motors.
Main screen
Left sidebar: motors on the bus. Toggle multi-select with ctrl+space; goal and nudge then drive the whole selection via sync_write in one packet.
Right side: a watch strip with the always-visible vitals, then the full register table. Enter on any RW row pops an edit modal with a description, range, units, and a dropdown for enum registers.
Screens
| Key | Screen |
|---|---|
? |
Help overlay |
o |
Oscilloscope: live plot of position / speed / load / current |
w |
Waveform generator: sine, square, triangle, step |
v |
Grid view: every motor on one screen |
d |
Diff against a saved state snapshot |
Ctrl+L |
Preset loader: apply a JSON of register values |
Keybindings
| Key | Action |
|---|---|
q |
Quit |
r |
Rescan bus |
t |
Toggle torque on selected (or all selected) |
! |
E-STOP: broadcast torque off to every motor |
space |
Full refresh |
Ctrl+Space |
Toggle multi-select on highlighted motor |
g |
Focus goal / speed input |
k / j |
Nudge +5 / -5 (auto-scales per mode) |
l / h |
Nudge +50 / -50 |
c |
Center: goal to 2048 or speed to 0 |
Enter |
Edit selected register (RW only) |
x |
Movement test on selected motor |
s |
Save JSON snapshot of every motor |
Ctrl+R |
Reboot selected motor |
Modes
The control bar adapts to the selected motor's mode register.
| Mode | Name | Target | Range | Nudge scale |
|---|---|---|---|---|
| 0 | position (servo) | goal_position | 0 to 4095 | 1 |
| 1 | wheel (continuous) | goal_speed | -4000 to 4000 | 10 |
| 2 | PWM (open-loop) | goal_speed | -1000 to 1000 | 5 |
| 3 | step | goal_position | -32768 to 32767 | 20 |
Status register
Bit flags decoded in the register table and watch strip.
| Tag | Meaning |
|---|---|
VOLT |
voltage out of range |
ANGLE |
angle limit exceeded |
HOT |
overheat |
CURR |
overcurrent |
OVLD |
overload |
Snapshot file
s writes sts-state-YYYYMMDD-HHMMSS.json in the current directory with every register value for every motor on the bus. Load one with d to diff against the current live readings.
Preset file
Presets live in any JSON file with a top-level registers map:
{
"registers": {
"p_coefficient": 32,
"i_coefficient": 0,
"d_coefficient": 0,
"torque_limit": 800,
"acceleration": 30,
"max_temperature_limit": 70
}
}
Ctrl+L applies every RW field to the selected motor; EEPROM fields are unlocked and re-locked automatically.
Performance
- Live tick reads SRAM 40-70 in one
read_raw_datacall (single round trip per refresh). - Full refresh reads EEPROM 0-39 plus SRAM 40-70 as two bulk reads instead of 26.
- Serial I/O runs in a worker thread; a stuck motor can't freeze the UI.
- Multi-motor writes use
sync_write_raw_dataso N motors update in one packet.
Stack
- Textual and textual-plotext for the UI
- rustypot for the Feetech protocol over serial
License
Apache License 2.0. See LICENSE.
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
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file sts_suite-0.1.1.tar.gz.
File metadata
- Download URL: sts_suite-0.1.1.tar.gz
- Upload date:
- Size: 134.9 kB
- Tags: Source
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
29889f83588848f4b99cd092f0fa097a17690bfd87899fa81c6d895dbd423e29
|
|
| MD5 |
ea75abba23ca22eeb35d23ab651b6b89
|
|
| BLAKE2b-256 |
f50060ea2817ce4f3d01721bc0db6bcd12e92af3f964305d84025e4a6fd9f846
|
Provenance
The following attestation bundles were made for sts_suite-0.1.1.tar.gz:
Publisher:
publish.yml on pham-tuan-binh/sts-suite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sts_suite-0.1.1.tar.gz -
Subject digest:
29889f83588848f4b99cd092f0fa097a17690bfd87899fa81c6d895dbd423e29 - Sigstore transparency entry: 1380632040
- Sigstore integration time:
-
Permalink:
pham-tuan-binh/sts-suite@15a3617f5df8b9494d54b8608ebf8ad2d8023a4c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pham-tuan-binh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15a3617f5df8b9494d54b8608ebf8ad2d8023a4c -
Trigger Event:
push
-
Statement type:
File details
Details for the file sts_suite-0.1.1-py3-none-any.whl.
File metadata
- Download URL: sts_suite-0.1.1-py3-none-any.whl
- Upload date:
- Size: 31.6 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? Yes
- Uploaded via: twine/6.1.0 CPython/3.13.12
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
652705b66df1db40d154bc9132dcef26ef0847e482f38dbaeea7aa108f640e12
|
|
| MD5 |
879dcee455acfc847e4bbf3a1cb1072c
|
|
| BLAKE2b-256 |
cdc1efaf4c091858e499082c0dbef416940881fd8e8e8863f0e1d5499e72540b
|
Provenance
The following attestation bundles were made for sts_suite-0.1.1-py3-none-any.whl:
Publisher:
publish.yml on pham-tuan-binh/sts-suite
-
Statement:
-
Statement type:
https://in-toto.io/Statement/v1 -
Predicate type:
https://docs.pypi.org/attestations/publish/v1 -
Subject name:
sts_suite-0.1.1-py3-none-any.whl -
Subject digest:
652705b66df1db40d154bc9132dcef26ef0847e482f38dbaeea7aa108f640e12 - Sigstore transparency entry: 1380632107
- Sigstore integration time:
-
Permalink:
pham-tuan-binh/sts-suite@15a3617f5df8b9494d54b8608ebf8ad2d8023a4c -
Branch / Tag:
refs/tags/v0.1.1 - Owner: https://github.com/pham-tuan-binh
-
Access:
public
-
Token Issuer:
https://token.actions.githubusercontent.com -
Runner Environment:
github-hosted -
Publication workflow:
publish.yml@15a3617f5df8b9494d54b8608ebf8ad2d8023a4c -
Trigger Event:
push
-
Statement type: