sphero-mini

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).

7 stars

Best use case

sphero-mini is best used when you need a repeatable AI agent workflow instead of a one-off prompt.

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).

Teams using sphero-mini should expect a more consistent output, faster repeated execution, less prompt rewriting.

When to use this skill

  • You want a reusable workflow that can be run more than once with consistent structure.

When not to use this skill

  • You only need a quick one-off answer and do not need a reusable workflow.
  • You cannot install or maintain the underlying files, dependencies, or repository context.

Installation

Claude Code / Cursor / Codex

$curl -o ~/.claude/skills/sphero-mini/SKILL.md --create-dirs "https://raw.githubusercontent.com/Demerzels-lab/elsamultiskillagent/main/public/skills/joneschi/sphero-mini/SKILL.md"

Manual Installation

  1. Download SKILL.md from GitHub
  2. Place it in .claude/skills/sphero-mini/SKILL.md inside your project
  3. Restart your AI agent — it will auto-discover the skill

How sphero-mini Compares

Feature / Agentsphero-miniStandard Approach
Platform SupportNot specifiedLimited / Varies
Context Awareness High Baseline
Installation ComplexityUnknownN/A

Frequently Asked Questions

What does this skill do?

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).

Where can I find the source code?

You can find the source code on GitHub using the link provided at the top of the page.

SKILL.md Source

# 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

Related Skills

gemini-image-gen

7
from Demerzels-lab/elsamultiskillagent

Generate and edit images via Google Gemini API. Supports Gemini native generation, Imagen 3, style presets, and batch generation with HTML gallery. Zero dependencies — pure Python stdlib.

minimax-to-telegram

7
from Demerzels-lab/elsamultiskillagent

Generate images, audio, video using MiniMax MCP and send to Telegram.

minimax-video

7
from Demerzels-lab/elsamultiskillagent

Use Zhipu (智谱) web search API for searching the internet.

minimax-tts-v2

7
from Demerzels-lab/elsamultiskillagent

Use Zhipu (智谱) web search API for searching the internet.

gemini-nano-banana-pro-portraits

7
from Demerzels-lab/elsamultiskillagent

Generate ultra-photorealistic portraits using Gemini Nano Banana Pro with comprehensive JSON configuration templates. Use when creating cinematic quality portraits, fitness photography, or realistic character images. Includes complete JSON structure for prompt configuration, subject details, apparel, pose, environment, lighting, and technical specifications.

free-ai-prompt-generator-for-chatgpt-gemini-more-q-6e800b2c

7
from Demerzels-lab/elsamultiskillagent

Write an AI prompt for a job description that attracts top talent

50-viral-gemini-ai-prompts-ready-to-copy-paste-for-e7b5d316

7
from Demerzels-lab/elsamultiskillagent

Romantic couple hugging on a beach at sunset, cinematic lighting, soft focus, using reference faces

50-viral-gemini-ai-prompts-ready-to-copy-paste-for-e41bb853

7
from Demerzels-lab/elsamultiskillagent

Multi-age family playing in a park, golden-hour lighting, candid expressions, using reference photos

50-viral-gemini-ai-prompts-ready-to-copy-paste-for-aefb3d26

7
from Demerzels-lab/elsamultiskillagent

Polaroid-style portrait of a woman smiling, casual outfit, natural light, using reference face

50-viral-gemini-ai-prompts-ready-to-copy-paste-for-4ac228ab

7
from Demerzels-lab/elsamultiskillagent

Epic fantasy group portrait in a magical forest, mystical lighting, dynamic poses, remove objects from original photo, using reference faces

50-viral-gemini-ai-prompts-ready-to-copy-paste-for-335a199b

7
from Demerzels-lab/elsamultiskillagent

Three women posing in urban street fashion, dramatic lighting, stylish hairstyles, using reference faces

miniflux-news

7
from Demerzels-lab/elsamultiskillagent

Fetch and triage the latest unread RSS/news entries from a Miniflux instance via its REST API using an API token. Use when the user asks to get the latest Miniflux unread items, list recent entries with titles/links, or generate short summaries of specific Miniflux entries. Includes a bundled script to query Miniflux (/v1/entries and /v1/entries/{id}) using credentials from ~/.config/clawdbot/miniflux-news.json (or MINIFLUX_URL and MINIFLUX_TOKEN overrides).