Skip to content

Getting Started

This guide gets one bus servo talking to a PC. For PWM models, see PWM control instead.

What you need

  • One iGeeTor bus servo
  • A USB-TTL adapter that supports half-duplex at 1 Mbps (or a USB-RS-485 adapter for RS-485 models)
  • A power supply within the servo's voltage range, able to deliver its stall current
  • Python 3 with pyserial (pip install pyserial)

1. Wire it

Connect the adapter's data line to the servo's signal line, join the grounds, and power the servo from the external supply (3.6–10 V) — not from the adapter's 5 V pin.

To be confirmed

Connector pinout and wire colours will be added here.

2. Ping the servo

Factory settings: ID 1, 1 Mbps.

import serial

def packet(servo_id, instruction, params=b""):
    body = bytes([servo_id, len(params) + 2, instruction]) + params
    return b"\xFF\xFF" + body + bytes([~sum(body) & 0xFF])

port = serial.Serial("COM3", 1_000_000, timeout=0.1)   # /dev/ttyUSB0 on Linux

port.write(packet(1, 0x01))     # Ping
print(port.read(6).hex(" "))    # expect: ff ff 01 02 00 fc

No reply? Check:

  • Baud rate. The factory default is 1 Mbps. Some USB adapters cannot run that fast.
  • ID. The factory default is 1; another value may have been stored. Ping IDs 0–253 in a loop to find it.
  • Echo. On a half-duplex line you may read back your own packet before the reply. Discard the first len(packet) bytes.

3. Move it

Enable torque, then write the goal position. 512 is centre; the unit is 0.29°.

port.write(packet(1, 0x03, bytes([24, 1])))          # Torque Enable = 1
port.read(6)

goal = 512
port.write(packet(1, 0x03, bytes([30, goal & 0xFF, goal >> 8])))   # Goal Position
port.read(6)

4. Read it back

port.write(packet(1, 0x02, bytes([36, 2])))     # Present Position, 2 bytes
reply = port.read(8)
print(reply[5] | reply[6] << 8)                 # e.g. 511

Next


Need samples, a custom build or a volume quote? Contact us — we usually reply within one business day.