
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-marketplaceAdd your badge
Show developers this skill is listed on Skillselion. Paste this into your README.
| repo stars | ★ 8 |
|---|---|
| Last updated | October 30, 2025 |
| Repository | johnlindquist/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:
- Press RESET button TWICE quickly
- Badge appears as "BADGER" drive
- Copy your app folder to
BADGER/apps/ - 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
- Badge Site: https://badger.github.io/
- Source Code: https://github.com/badger/home
- Official Apps: https://badger.github.io/apps/
API Documentation
- badgeware.Image: https://github.com/badger/home/blob/main/badgerware/Image.md
- badgeware.shapes: https://github.com/badger/home/blob/main/badgerware/shapes.md
- badgeware.brushes: https://github.com/badger/home/blob/main/badgerware/brushes.md
- PixelFont: https://github.com/badger/home/blob/main/PixelFont.md
- Matrix: https://github.com/badger/home/blob/main/Matrix.md
- io: https://github.com/badger/home/blob/main/badgerware/io.md
MicroPython
- Official Docs: https://docs.micropython.org/
- RP2040 Quick Ref: https://docs.micropython.org/en/latest/rp2/quickref.html
Troubleshooting
Badge not detected?
- Check USB cable is data-capable (not charge-only)
- Try different USB port
- Press RESET button on badge
- Run
/badge-quickstartto diagnose
App doesn't appear in menu?
- Verify you used USB Mass Storage Mode (not mpremote)
- Check files exist:
__init__.pyandicon.png - If you have 7+ apps, install paginated menu
- Run
/troubleshoot app-not-in-menu
Memory errors?
- Call
gc.collect()periodically - Load resources once in
init(), not inupdate() - Use smaller images
- Delete unused variables
Support
For detailed help on any topic, use the included skills:
- Ask Claude to use
badger-quickstartskill for step-by-step setup - Ask Claude to use
badger-diagnosticsskill for troubleshooting - Ask Claude to use
badger-app-creatorskill 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.