How to set Feetech STS3215 servo IDs and zero offsets with Waveshare

Every Feetech STS3215 servo ships with ID 1 and a random zero offset, so you must set unique IDs and calibrate zero positions before assembling your robot arm. The Waveshare Bus Servo Adapter includes Windows software and a USB-C interface for this setup. You will need the adapter board, the FD software, and one servo at a time.

What servo IDs and zero offsets do

The Feetech STS3215 uses a half-duplex TTL serial bus at 1 Mbps. Every servo needs a unique ID between 1 and 253. Factory servos all have ID 1, so connecting two without changing IDs causes conflicts and garbled responses.

The zero offset aligns the encoder reading with the horn's physical position. Factory offsets are random due to manufacturing tolerances. Setting the offset correctly ensures LeRobot calibration commands move servos to their true zero position.

Step Purpose When to do it
Set unique ID Allow multiple servos on one bus Before wiring into the arm
Set zero offset Align encoder zero with horn zero After attaching the horn, before final assembly
Record ID map Track which servo goes in which joint During the process, in a notebook or spreadsheet

Installing the Waveshare software and connecting the adapter

Download the FD software from the Waveshare wiki. The software runs on Windows only. Connect the Waveshare Bus Servo Adapter to your computer with USB-C, then connect external power to the DC barrel jack. Use 12 V for C018 servos or 7.4 V for C001, C044, and C046 variants. Check your servo's sticker before powering on. The wrong voltage destroys the servo instantly.

Use a 3-pin servo cable to connect one servo to the adapter. Connect only one servo at a time when changing IDs. The FD software auto-detects the baud rate and scans for IDs.

Setting a new servo ID

  1. Power on the adapter and servo. Open the FD software and click "Search." Factory servos appear as ID 1.
  2. Select the servo in the list. Click the "ID" field and enter the new ID (LeRobot's so101 configs expect IDs 1–6 on each arm, base to gripper; the leader and follower are on separate adapters, so both use 1–6). Click "Write."
  3. Click "Search" again. The servo appears under its new ID. If the old ID still shows up, power-cycle the servo.
  4. Label the servo body with a marker showing the new ID.

Repeat for each servo. Keep a written map of which ID goes in which joint.

Calibrating the zero offset

Attach the servo horn before calibrating. Position it straight up (parallel to the servo body). The 25-tooth spline snaps on in 14.4-degree increments. Get it as close to vertical as possible, then tighten the center screw.

In the FD software, click "Read" on the "Offset" parameter, then click "Calibrate Center." The software calculates the offset to make the current position register as zero degrees. Click "Write" to save it.

Test by sending a "Go to position 0" command. The servo should return to the calibrated position. If it moves more than a few degrees from vertical, recheck the horn and recalibrate.

Common mistakes

Setting offsets before attaching horns causes calibration drift. Tighten the horn before setting the offset. Using the same ID twice causes inconsistent position data and calibration failures. Label every servo immediately after setting its ID.

Mixing 12 V and 7.4 V servos on the same power bus destroys servos. The SO-ARM101 kit has two separate buses (follower at 12 V, leader at 7.4 V). Check the sticker on every servo before wiring.

After setting IDs and offsets

Once all servos have unique IDs, calibrated offsets, and labels, you can assemble the arm. Keep your ID map handy so you install each servo in the correct joint. The offsets you set now make lerobot-calibrate work correctly.

If you replace a servo later, repeat the ID and offset procedure before swapping it in. For which servo variants to use in which joints, see the Feetech STS3215 vs STS3250 guide. For parts, visit the robot arm parts and accessories collection.

FAQ

Can I set servo IDs with the BusLinker board instead of the Waveshare adapter?

The Hiwonder BusLinker V3.0 board works with servos but does not include ID-setting software. You need the Waveshare adapter and its FD software to change IDs and offsets. Once IDs are set, you can use either board to control the servos in LeRobot.

What happens if two servos have the same ID on the same bus?

The controller sends a command to ID 3, and both servos respond at the same time. The mixed responses corrupt the data, causing position reads to fail or return random values. LeRobot calibration will fail with "servo not found" or inconsistent position errors. Fix it by disconnecting one servo, changing its ID, and reconnecting it.

Do I need to recalibrate zero offsets after disassembling and reassembling the arm?

No, as long as you reinstall the same servo in the same orientation with the horn attached in the same position. The offset is stored in the servo's memory, not in the arm's controller. If you remove the horn and reattach it in a different tooth position, you must recalibrate the offset.

Back to blog