Now liveThe Skillselion MCP - thousands of ranked skills, loaded into your agent mid-task. No install.Get it →
Badge Developer avatar

Badger 2350 Dev

  • 8 repo stars
  • Updated October 30, 2025
  • johnlindquist/badger-2350-plugin

Complete Badger 2350 Badge development environment with skills, commands, and examples

About

badger-2350-dev is a Claude Code skill in the AI & Agent Building category. Complete Badger 2350 Badge development environment with skills, commands, and examples

  • badger-2350-dev
  • AI & Agent Building
  • AI-coding skill

Badger 2350 Dev by the numbers

  • Data as of Jul 7, 2026 (Skillselion catalog sync)
/plugin marketplace add johnlindquist/badger-2350-plugin
/plugin install badger-2350-dev@badger-marketplace

Add your badge

Show developers this skill is listed on Skillselion. Paste this into your README.

Listed on Skillselion
repo stars8
Last updatedOctober 30, 2025
Repositoryjohnlindquist/badger-2350-plugin

What it does

Complete Badger 2350 Badge development environment with skills, commands, and examples

README.md

Badger 2350 Developer Plugin

Complete development environment for Universe 2025 (Tufty) Badge. Create MonaOS apps, manage deployments, and access comprehensive API reference with slash commands and examples.

What's Included

🎯 Slash Commands (5)

  • /create-badge-app <name> - Scaffold a new MonaOS app with template code, icon, and structure
  • /badgeware-api [search] - Quick API reference for the badgeware module
  • /deploy-to-badge <app> - Step-by-step deployment guide via USB Mass Storage Mode
  • /badge-quickstart - Verify your development environment is ready
  • /troubleshoot [issue] - Diagnostic guide for common problems

📚 Skills (8 comprehensive guides)

  • badger-quickstart - Complete beginner guide (zero to first app in 45 min)
  • python-setup - Computer environment setup for all platforms
  • badger-2350-dev - Development toolchain and workflows
  • badger-app-creator - Building MicroPython apps with badgeware API
  • badger-hardware - GPIO, I2C, SPI, and hardware integration
  • micropython-repl - Interactive development and package management
  • badger-deploy - Deployment workflows and file management
  • badger-diagnostics - System verification and troubleshooting

💡 Example Apps (2 working examples)

  • hello_world - Basic starter app with animation and button handling
  • meditation_timer - More complex app with state management, timing, and breathing animation

🛠️ Utility Scripts

  • install_to_badge.sh - Automated deployment via USB Mass Storage Mode
  • menu_paginated.py - Enable unlimited apps in MonaOS menu (default shows 6)
  • Makefile - Common development commands

📋 Templates

  • app_template.py - Clean MonaOS app boilerplate
  • icon_template.png - 24x24 placeholder icon

Quick Start

1. Install the Plugin

# In Claude Code
/plugin marketplace add path/to/badger-marketplace
/plugin install badger-2350-dev@badger-marketplace

2. Verify Your Environment

/badge-quickstart

This checks Python, mpremote, badge connection, and badgeware module.

3. Create Your First App

/create-badge-app my_first_app

This scaffolds a complete app structure with template code.

4. Test It

mpremote run my_first_app/__init__.py

5. Deploy to Badge

/deploy-to-badge my_first_app

Follow the USB Mass Storage Mode instructions to permanently install your app.

Key Concepts

⚠️ USB Mass Storage Mode is CRITICAL

The /system/apps/ directory is READ-ONLY via mpremote. You MUST use USB Mass Storage Mode to install apps:

  1. Press RESET button TWICE quickly
  2. Badge appears as "BADGER" drive
  3. Copy your app folder to BADGER/apps/
  4. Eject drive and press RESET once

MonaOS App Structure

Every app must follow this structure:

my_app/
├── __init__.py       # Entry point with update() function
├── icon.png          # 24x24 PNG icon
└── assets/          # Optional: app resources

Required Functions

def init():
    """Called once when app launches"""
    pass

def update():
    """Called every frame (~30 FPS) by MonaOS"""
    pass

def on_exit():
    """Called when returning to menu"""
    pass

badgeware vs badger2040

⚠️ This badge uses badgeware module, NOT badger2040! The APIs are different.

# Correct for Universe 2025 Badge
from badgeware import screen, brushes, shapes, io

# Wrong (standard Pimoroni Tufty)
from badger2040 import Badger2040  # Don't use this!

Common Workflows

Create and Deploy an App

# 1. Create app structure
/create-badge-app weather_display

# 2. Edit the code
# Open weather_display/__init__.py in your editor

# 3. Test locally
mpremote run weather_display/__init__.py

# 4. Deploy to badge
/deploy-to-badge weather_display

# 5. Launch from badge menu

Get API Help

# Show all API reference
/badgeware-api

# Search for specific topic
/badgeware-api button
/badgeware-api animation
/badgeware-api color

Troubleshoot Issues

# General troubleshooting guide
/troubleshoot

# Specific issues
/troubleshoot app-not-in-menu
/troubleshoot badge-not-detected
/troubleshoot memory-error

Hardware Specifications

  • Processor: RP2350 Dual-core ARM Cortex-M33 @ 200MHz
  • Memory: 512kB SRAM, 16MB QSPI flash
  • Display: 320x240 IPS (160x120 framebuffer, pixel-doubled)
  • Connectivity: 2.4GHz WiFi, Bluetooth 5.2
  • Special Features: IR transmitter/receiver, 4-zone LED backlight
  • Buttons: A, B, C, UP, DOWN, HOME
  • Battery: 1000mAh rechargeable (8+ hours runtime)
  • Ports: USB-C, Qw/ST, SWD, 4x GPIO pins

Display Capabilities

  • Resolution: 160x120 framebuffer (auto pixel-doubled to 320x240)
  • Colors: Full RGB (0-255 per channel)
  • Fonts: 30 licensed pixel fonts included
  • Refresh: ~30 FPS automatic update after each frame

Button Reference

from badgeware import io

# Check button states in update() function
if io.BUTTON_A in io.pressed:    # Just pressed
if io.BUTTON_B in io.released:   # Just released
if io.BUTTON_C in io.held:       # Currently held
if io.BUTTON_UP in io.changed:   # State changed

Example Code

Minimal App

from badgeware import screen, brushes, io

def update():
    screen.brush = brushes.color(20, 40, 60)
    screen.clear()

    screen.brush = brushes.color(255, 255, 255)
    screen.text("Hello Badge!", 40, 60)

With Animation

from badgeware import screen, brushes, shapes
import math

frame = 0

def update():
    global frame

    screen.brush = brushes.color(20, 40, 60)
    screen.clear()

    # Animated circle
    radius = 10 + int(math.sin(frame / 20) * 5)
    screen.brush = brushes.color(100, 200, 255)
    screen.draw(shapes.circle(80, 60, radius))

    frame += 1

Resources

Official Documentation

API Documentation

MicroPython

Troubleshooting

Badge not detected?

  1. Check USB cable is data-capable (not charge-only)
  2. Try different USB port
  3. Press RESET button on badge
  4. Run /badge-quickstart to diagnose

App doesn't appear in menu?

  1. Verify you used USB Mass Storage Mode (not mpremote)
  2. Check files exist: __init__.py and icon.png
  3. If you have 7+ apps, install paginated menu
  4. Run /troubleshoot app-not-in-menu

Memory errors?

  1. Call gc.collect() periodically
  2. Load resources once in init(), not in update()
  3. Use smaller images
  4. Delete unused variables

Support

For detailed help on any topic, use the included skills:

  • Ask Claude to use badger-quickstart skill for step-by-step setup
  • Ask Claude to use badger-diagnostics skill for troubleshooting
  • Ask Claude to use badger-app-creator skill for app development help

License

This plugin packages documentation and examples for the Universe 2025 (Tufty) Badge. Refer to individual component licenses for specific terms.


Happy badge hacking! 🎉

Created by the Badge Developer Community for GitHub Universe 2025.

Related skills

This week in AI coding

Five minutes, every Monday - the tools, releases and tactics for developers.

unsubscribe anytime.