home / skills / openclaw / skills / sphero-mini

sphero-mini skill

/skills/joneschi/sphero-mini

This skill controls a Sphero Mini via BLE to roll, change colors, draw shapes, read sensors, and enjoy cat-friendly play.

npx playbooks add skill openclaw/skills --skill sphero-mini

Review the files below or copy the command above to add this skill to your agents.

Files (13)
SKILL.md
6.2 KB
---
name: sphero-mini
description: Control Sphero Mini robot ball via Bluetooth Low Energy. Roll, change colors, read sensors, draw shapes, and play with cats. Uses bleak for cross-platform BLE support (macOS/Windows/Linux).
homepage: https://github.com/trflorian/sphero_mini_win
metadata:
  {
    "openclaw":
      {
        "emoji": "⚽",
        "requires": { "bins": ["python3"], "packages": ["bleak"] },
        "install":
          [
            {
              "id": "sphero-bleak",
              "kind": "pip",
              "package": "bleak",
              "label": "Install bleak (Bluetooth Low Energy library for macOS/Windows/Linux)",
            },
          ],
      },
  }
---

# Sphero Mini Control

Control your Sphero Mini robot ball via Bluetooth Low Energy using Python and bleak.

## Features

- 🎨 **LED Control** - Change main LED color and back LED intensity
- 🎯 **Movement** - Roll in any direction at variable speeds
- 🎲 **Random Mode** - Cat play mode with unpredictable movements
- 📐 **Draw Shapes** - Squares, stars, circles with programmable patterns
- 🔋 **Power Management** - Wake, sleep, and check battery status
- 🧭 **Heading Control** - Reset and control orientation
- 🖥️ **Cross-platform** - Works on macOS, Windows, and Linux (uses bleak, not bluepy)

## Setup

### 1. Install Dependencies

**All platforms:**
```bash
pip3 install bleak
```

### 2. Find Your Sphero Mini's MAC/UUID

**macOS/Windows:**
Use the included scan script:
```bash
python3 scripts/scan_sphero.py
```

Look for a device named like "SM-XXXX" (Sphero Mini).

### 3. Update MAC Address

Edit the scripts and replace `SPHERO_MAC` with your device's address.

## Quick Start

### Scan for Sphero Mini

```bash
python3 scripts/scan_sphero.py
```

### Change Color

```python
import asyncio
from sphero_mini_bleak import SpheroMini

async def change_color():
    sphero = SpheroMini("YOUR-MAC-ADDRESS")
    await sphero.connect()
    await sphero.wake()
    
    # Set to red
    await sphero.setLEDColor(255, 0, 0)
    await asyncio.sleep(2)
    
    await sphero.disconnect()

asyncio.run(change_color())
```

### Roll Forward

```python
import asyncio
from sphero_mini_bleak import SpheroMini

async def roll_forward():
    sphero = SpheroMini("YOUR-MAC-ADDRESS")
    await sphero.connect()
    await sphero.wake()
    
    # Roll forward at speed 100
    await sphero.roll(100, 0)
    await asyncio.sleep(3)
    
    # Stop
    await sphero.roll(0, 0)
    await sphero.disconnect()

asyncio.run(roll_forward())
```

## Pre-built Scripts

### 🐱 Cat Play Mode (Random Movement)

```bash
python3 scripts/cat_play.py
```

Makes Sphero move randomly for 1 minute with color changes - perfect for playing with cats!

### 📐 Draw Shapes

```bash
# Draw a square
python3 scripts/draw_square.py

# Draw a star
python3 scripts/draw_star.py
```

### 🎨 Color Control

```bash
# Set specific color
python3 scripts/set_color.py red
python3 scripts/set_color.py 255 0 128  # Custom RGB
```

## Common Commands

### Movement
```python
# Roll (speed: 0-255, heading: 0-359 degrees)
await sphero.roll(speed=100, heading=0)    # Forward
await sphero.roll(100, 90)                  # Right
await sphero.roll(100, 180)                 # Backward
await sphero.roll(100, 270)                 # Left
await sphero.roll(0, 0)                     # Stop
```

### LED Control
```python
# Main LED color (RGB values 0-255)
await sphero.setLEDColor(red=255, green=0, blue=0)      # Red
await sphero.setLEDColor(0, 255, 0)                     # Green
await sphero.setLEDColor(0, 0, 255)                     # Blue
await sphero.setLEDColor(128, 0, 128)                   # Purple

# Back LED brightness (0-255)
await sphero.setBackLED(255)  # Full brightness
await sphero.setBackLED(0)    # Off
```

### Power Management
```python
# Wake from sleep
await sphero.wake()

# Go to sleep (low power, BLE still on)
await sphero.sleep()

# Check battery voltage
voltage = await sphero.getBatteryVoltage()
print(f"Battery: {voltage}V")
```

## Tips

- **Wake Sphero**: Shake it to wake from deep sleep before connecting
- **Connection timeout**: If connection fails, shake Sphero and try again
- **Finding Sphero**: After scripts finish, Sphero is set to white for easy visibility
- **Cat safety**: Use soft surfaces when playing with cats to avoid damage

## Example: Cat Play Mode

The cat play mode script makes Sphero:
- Move in random directions (40-120 speed)
- Change colors randomly (6 vibrant colors)
- Stop unpredictably (30% chance for brief pauses)
- Run for exactly 1 minute
- End with white color so you can find it

Perfect for entertaining cats! 🐱

## Troubleshooting

### Cannot Connect

1. Shake Sphero to wake it up
2. Ensure it's not connected to the Sphero Edu app
3. Check MAC/UUID address is correct
4. Try increasing timeout in `sphero_mini_bleak.py`

### Sphero Doesn't Move

1. Call `await sphero.wake()` first
2. Wait 1-2 seconds after waking
3. Check battery level

### Colors Don't Change

1. Add `await asyncio.sleep(0.5)` between color changes
2. Ensure you called `await sphero.wake()`

## Library Credits

This skill uses:
- [sphero_mini_win](https://github.com/trflorian/sphero_mini_win) by trflorian - Sphero Mini control library using bleak
- [bleak](https://github.com/hbldh/bleak) - Cross-platform Bluetooth Low Energy library

**Note**: This library is for **Sphero Mini only**. For other Sphero models (BB8, SPRK+, Bolt), use [pysphero](https://github.com/EnotYoyo/pysphero) instead.

## Advanced Usage

### Custom Patterns

Create your own movement patterns:

```python
async def figure_eight():
    # Draw a figure-8 pattern
    for i in range(2):  # Two loops
        for heading in range(0, 360, 10):
            await sphero.roll(80, heading)
            await asyncio.sleep(0.1)
```

### Color Cycling

```python
async def rainbow():
    colors = [
        (255, 0, 0), (255, 127, 0), (255, 255, 0),
        (0, 255, 0), (0, 0, 255), (75, 0, 130), (148, 0, 211)
    ]
    for r, g, b in colors:
        await sphero.setLEDColor(r, g, b)
        await asyncio.sleep(1)
```

## Documentation

- **SKILL.md** — This file
- **references/api.md** — Complete API reference
- **references/troubleshooting.md** — Common issues and solutions
- **scripts/** — Ready-to-use example scripts

## License

MIT

Overview

This skill provides Python control of a Sphero Mini robot ball over Bluetooth Low Energy using bleak. It exposes movement, LED, sensor, and power management commands plus ready-to-run scripts for patterns and a playful random "cat play" mode. Works cross-platform on macOS, Windows, and Linux.

How this skill works

The skill connects to the Sphero Mini via BLE using bleak and sends Sphero-compatible commands to roll, set LED colors, read battery voltage, and manage sleep/wake state. It includes helper methods for headings, back LED intensity, drawing shapes, and simple behavioral patterns. Example scripts show scanning for the device, connecting, and running sequences like random motion or shape drawing.

When to use it

  • When you want programmatic control of a Sphero Mini from Python on macOS, Windows, or Linux.
  • To automate demos or classroom exercises involving movement and color patterns.
  • To prototype robot behaviors like shapes, figure-eights, or random play modes.
  • For pet entertainment scenarios such as the included cat play routine.
  • When you need battery and connection management through BLE in scripts.

Best practices

  • Always call wake() and wait 1–2 seconds before issuing movement or LED commands.
  • Scan for the device and confirm the MAC/UUID before updating scripts with its address.
  • If a connection fails, shake the Sphero to wake it and ensure the Sphero Edu app is disconnected.
  • Add brief sleeps (e.g., 0.5–1s) between rapid LED or movement changes to ensure reliable command delivery.
  • Use soft surfaces for playful modes to protect the robot and surrounding items or pets.

Example use cases

  • Run a 60-second cat play routine that moves randomly and cycles vibrant colors.
  • Create educational exercises to draw squares, stars, circles, and teach loops and headings.
  • Build custom movement patterns such as figure-eights or spirals for demos.
  • Integrate battery checks and safe sleep behavior into a robot management script.
  • Develop interactive installations where a Sphero responds to sensor inputs or timed events.

FAQ

Which platforms are supported?

macOS, Windows, and Linux are supported via the bleak BLE library.

What to do if the Sphero won't connect?

Shake the Sphero to wake it, ensure the Sphero Edu app is not connected, verify the MAC/UUID, and try again with a longer timeout.