Skip to content

SPIKE Prime Python API Reference

fll-sim emulates the official LEGO SPIKE Prime Python API, allowing teams to test competition programs directly in the web browser.


1. PrimeHub & MotionSensor (Gyro)

from spike import PrimeHub

hub = PrimeHub()

# Reset Gyro heading to 0 degrees
hub.motion_sensor.reset_yaw_angle()

# Read current yaw heading (-180 to +180 degrees)
yaw = hub.motion_sensor.get_yaw_angle()
print("Current Yaw:", yaw)

2. MotorPair

from spike import MotorPair

motors = MotorPair('A', 'B')

# Configure default speed (0 to 100%)
motors.set_default_speed(50)

# Move for specific distance or degrees
motors.move(30, 'cm')               # Drive 30 cm straight
motors.move(360, 'degrees')         # Move wheels 1 full rotation

# Steering move (steering: -100 hard left to +100 hard right)
motors.move(20, 'cm', steering=25)

# Tank move (independent left and right speeds)
motors.move_tank(180, 'degrees', left_speed=40, right_speed=-40)

# Continuous movement
motors.start(steering=0, speed=50)
motors.start_tank(30, 30)
motors.stop()

3. ColorSensor

from spike import ColorSensor

color_sensor = ColorSensor('C')

# Get reflected light intensity (0 to 100%)
# ~10-25% on black lines, ~80-100% on white mat
light = color_sensor.get_reflected_light()

# Get classified color name
# 'black', 'white', 'red', 'green', 'blue', 'yellow', 'none'
color_name = color_sensor.get_color()

4. Control Functions

from spike.control import wait_for_seconds

# Non-blocking async sleep (yields execution to the physics engine)
wait_for_seconds(1.0)

5. Sample Competition Missions

Mission 1: Straight Drive (30 cm)

from spike import MotorPair

motors = MotorPair('A', 'B')
motors.set_default_speed(50)
print("Driving 30 cm forward...")
motors.move(30, 'cm')
print("Done!")

Mission 2: Gyro 90° Turn

from spike import PrimeHub, MotorPair
from spike.control import wait_for_seconds

hub = PrimeHub()
motors = MotorPair('A', 'B')

hub.motion_sensor.reset_yaw_angle()
wait_for_seconds(0.2)

# Pivot turn until 90 degrees reached
motors.start_tank(35, -35)
while hub.motion_sensor.get_yaw_angle() < 90:
    wait_for_seconds(0.01)

motors.stop()
print("Turn completed at yaw:", hub.motion_sensor.get_yaw_angle())

Mission 3: Proportional Line Follower (P-Controller)

from spike import MotorPair, ColorSensor
from spike.control import wait_for_seconds

motors = MotorPair('A', 'B')
color_c = ColorSensor('C')

target_light = 50   # Edge of line target (50% reflected light)
kp = 0.85           # Proportional gain
base_speed = 35     # Base driving velocity

for step in range(250):
    light = color_c.get_reflected_light()
    error = target_light - light
    steering = error * kp
    motors.start(steering, base_speed)
    wait_for_seconds(0.02)

motors.stop()
print("Line following sequence finished!")

Mission 4: Dual-Sensor Line Squaring

from spike import MotorPair, ColorSensor
from spike.control import wait_for_seconds

motors = MotorPair('A', 'B')
sensor_c = ColorSensor('C') # Left
sensor_d = ColorSensor('D') # Right

# Drive toward line
motors.start(0, 30)
while sensor_c.get_reflected_light() > 30 and sensor_d.get_reflected_light() > 30:
    wait_for_seconds(0.01)
motors.stop()

# Align both sensors on the black line
for i in range(100):
    left_light = sensor_c.get_reflected_light()
    right_light = sensor_d.get_reflected_light()

    left_spd = 15 if left_light > 30 else 0
    right_spd = 15 if right_light > 30 else 0

    if left_spd == 0 and right_spd == 0:
        break

    motors.start_tank(left_spd, right_spd)
    wait_for_seconds(0.02)

motors.stop()
print("Robot perfectly squared to line!")