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¶
- UART bus protocol — every instruction with examples
- Control table — all registers
- To run several servos, give each a unique ID first (ID register).
Need samples, a custom build or a volume quote? Contact us — we usually reply within one business day.