Skip to main content

SpiBerryEngine

A project that aims to primarily control LEGO SPIKE with a Raspberry Pi. It uses the mpremote tool to communicate with the LEGO SPIKE hub.

See this Youtube video for an introduction and demonstration of the project.

Installation

The simplest way to install SpiBerryEngine is from PyPI:

pip install spiberry-engine

For vision support (OpenCV/Ultralytics) and camera features:

pip install "spiberry-engine[full]"

Other extras:

  • spiberry-engine[vision] - Vision features (OpenCV/Ultralytics)
  • spiberry-engine[camera] - Camera capture features
  • spiberry-engine[controller] - Remote drive controller features

After installation, initialize your environment (creates config and default robot code):

spiberry init

Alternative: Using the Engine Standalone

Transfer the spiberry.pyz file to your Raspberry Pi and run it:

python spiberry.pyz

It will create a virtual environment and install dependencies. Service installation is explicit via the --install-service flag.

Install and optionally start the service from the installer flow:

sudo python spiberry.pyz --install-service --start-service

Hardware Setup

Connect the following components to your Raspberry Pi:

  • Starter Pin: Must be connected to ground (GPIO 21 by default) to start the program. You can bypass this by setting the environment variable IGNORE_STARTER_PIN=1.
  • RGB LED: Connect to the GPIO pins specified during initialization or defaults:
    • Red: GPIO 0
    • Green: GPIO 11
    • Blue: GPIO 9
  • Button: Connect to GPIO pin specified (default: 17)

Usage

CLI Commands

When installed via PyPI, several commands are available:

Command Description
spiberry init Initialize default config and robot code
spiberry run-engine Run the main engine
spiberry-start Start the systemd service
spiberry-stop Stop the systemd service
spiberry-status Check service status
spiberry-remote-drive Start remote drive controller

Running the Engine

To run the engine manually with the default configuration:

spiberry run-engine

You can also specify a custom robot code file:

spiberry run-engine my_cool_robot.py

Configuration File

SpiBerryEngine stores runtime settings in:

~/spiberry_config.ini

On first run or with the spiberry init command, this file is created automatically with defaults similar to:

[GPIO]
red = 0
green = 11
blue = 9
button = 17
active_high = False

[Code]
path = robot_code.py
raspi_functions_path = raspi_functions/

[Vision]
enabled = False

[Camera]
take_picture_method = picamera2
timeout = 0
width = 1920
height = 1080

[RemoteDrive]
left_motor = port.A
right_motor = port.B

Notes:

  • Code.path controls which robot code file is executed.
  • Code.raspi_functions_path can point to either:
    • a Python file (for example raspi_functions.py), or
    • a package directory (for example raspi_functions/, using __init__.py).
  • Vision features are only loaded when Vision.enabled = True.
  • RemoteDrive.left_motor and RemoteDrive.right_motor set default motor ports for remote drive mode.

CLI GPIO pin arguments are now persisted into the config file when provided:

# Example if running standalone
python spiberry.pyz --red 0 --green 11 --blue 9 --button 17

The values are then saved under [GPIO].

Deployment & Extension

Note: See the VS Code Extension for easier installation and code deployment. The extension provides a user-friendly interface, and is recommended.

Deploying Code

Recommended method: Use the VS Code Extension

Use deploy_robot_code.py to deploy your robot code:

  1. Run the deploy tool on your computer
  2. Select your .llsp3 file (LEGO SPIKE project export)
  3. Optionally select a Raspi Functions file (see below)
  4. Enter your Raspberry Pi connection details
  5. Click "Deploy" or use the hotkey Ctrl+Shift+D

The deployer will:

  • Extract your code from the .llsp3 file
  • Send robot_code.py to your Raspberry Pi
  • Optionally send raspi_functions.py if provided
  • Save your configuration for future deployments

Using Raspi Utility Classes

Copy the contents of raspi-util-class.py and paste it at the top of your robot code. This provides easy-to-use classes for interacting with Raspberry Pi hardware from your LEGO SPIKE code.

Example Usage

# Copy raspi-util-class.py contents here at the top of your code

# Create Raspi instance
raspi = Raspi()

# Register devices
servo = raspi.register_device("servo", "s1", "14","0","180","0.00095","0.0028","10")
# Parameters are: type, name, pin, min_angle, max_angle, min_pulse, max_pulse, start_angle
distance_sensor = raspi.register_device("distance_sensor", "my_sensor", "15", "16", "4")
# Parameters are: type, name, trigger_pin, echo_pin, max_distance_m

# Use devices
servo.set_angle(90)
current_angle = servo.get_angle()
distance = distance_sensor.get_distance()

# Call custom functions (if you have raspi_functions.py)
result = raspi.my_custom_function() # Preferred way to call custom functions
result = raspi.func("some_custom_function()") # Deprecated, may be removed in future versions

The utility classes support:

  • Servo: set_angle(angle), get_angle()
  • Distance Sensor: get_distance()
  • Custom Functions: raspi.my_custom_function() to call functions from your raspi_functions.py

RGBLED Signals

The RGB LED provides visual feedback for the system state:

Color Meaning
Red Connection error or module not found
Green Ready/Idle/Success
Blue Run Error
Yellow Work starting
Cyan Code or functions reloaded

Blinking Patterns

Color Blink Count Blink Duration Meaning
Red 2 0.2s raspi_functions import error
Red 2 0.2s Stopped code execution
Red 5 0.1s mpremote not found
Red 5 0.3s Connection error
Blue 2 0.1s REPL error
Blue 2 0.3s Function call function not found error
Blue 5 0.1s Code execution error
Green 2 0.2s Code started/stopped/ended
Cyan 2 0.2s Code reloaded
Cyan 3 0.2s Functions reloaded
Cyan 5 0.2s Functions & Code reloaded

Camera Configuration

SpiBerryEngine supports two camera capture methods: picamera2 (recommended for Raspberry Pi OS) and rpicam-still (command-line tool). Both methods support comprehensive configuration options.

Configuration Options Reference

See examples/camera_config_examples.py for comprehensive examples and the picamera2 manual and rpicam-still documentation for complete option lists.

Vision Processing

SpiBerryEngine includes a Vision and ContourDetector classes that provides some image processing capabilities using OpenCV and object detection using Ultralytics. You can use the take_picture() method to capture an image and then apply various processing methods like detect_objects(), find_contours(), or custom OpenCV operations.
See examples/vision_examples.py for usage examples.

Files Overview

Connections and Hardware

  • Raspberry Pi GPIO pins for RGB LED and Button
  • LEGO SPIKE Hub connected via USB to Raspberry Pi
  • Raspberry Pi running Raspberry Pi OS with Python 3

Troubleshooting

  • Check the RGB LED signals for error codes
  • Ensure all dependencies are installed
  • Ensure there is no syntax error in your robot code (Spike App does not always show them)
  • Check your installation and code deployment paths

Disclaimer

This project is an independent community project and is not affiliated with, endorsed by, or sponsored by LEGO Group or Raspberry Pi Ltd. Use at your own risk. Always follow safety guidelines when working with hardware.

Metadata

Release files for spiberry-engine 0.1.0

For a detailed explanation of source distributions (sdists) and built distributions (wheels), please see the package formats documentation.

Source distribution (sdist)

Source distribution for spiberry-engine 0.1.0
File Size Uploaded Provenance
spiberry_engine-0.1.0.tar.gz 35.8 kB Without provenance Details

Built distribution (wheel)

Table of built distributions (wheels) for spiberry-engine 0.1.0
File Interpreter ABI Platform
spiberry_engine-0.1.0-py3-none-any.whl Python 3 none any Details

Total release size: 71.2 kB

Release files / spiberry_engine-0.1.0.tar.gz

Download URL spiberry_engine-0.1.0.tar.gz
Size 35.8 kB
Tags Source
SHA-256 checksum
How to use checksums
aee05628e8859b89968b65f4ebe17d28c188e82f54caf1553e2b3796b6cc4d73
BLAKE2b-256 checksum
How to use checksums
0ceceb324c506c6d447b89774f440c8837927d45b8cf33d14fe0aaec763a9e19
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.4

Release files / spiberry_engine-0.1.0-py3-none-any.whl

Download URL spiberry_engine-0.1.0-py3-none-any.whl
Size 35.4 kB
Tags Python 3
SHA-256 checksum
How to use checksums
848cefe0d795402e04e16f0c0e6bd509c8d85c2c11c40c0955400537dbc621c6
BLAKE2b-256 checksum
How to use checksums
a9a7237c55a4d7514c8153daae3b2da28c6dacb8ee0180499e9052b8314a9191
Upload date
Uploaded using Trusted Publishing?
What is trusted publishing?
No
Uploaded via twine/6.2.0 CPython/3.11.4

Security for spiberry-engine 0.1.0

Provenance

Provenance describes where a file came from. On PyPI, provenance is shared via attestations, which provide a verifiable record of the build or publishing details. View details, limitations and caveats.

No provenance found

None of the files in this release were uploaded with provenance metadata.

A note on package security

PyPI is a repository for distributing packages, not a service for auditing them. While third-party security researchers and our staff do their best to detect and remove malicious packages, PyPI cannot guarantee the quality, security or suitability of any given package.

To learn more about protecting yourself from malicious actors, visit our package security documentation.

Release history Release notifications | RSS feed

This release

0.1.0 This release

2 release files No provenance

Anthropic, PBC Visionary sponsor Bloomberg Visionary sponsor Hudson River Trading Visionary sponsor Meta Visionary sponsor NVIDIA Visionary sponsor Microsoft Sustainability sponsor Depot Continuous Integration AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Sentry Error logging StatusPage Status page