Welcome to Badgeware!
Badgeware is a MicroPython-powered platform for our family of programmable badges — Tufty, Badger, and Blinky. Write a short Python script, copy it to your badge over USB, and it runs. No toolchains, no compilers, no fuss.
Your badge comes preloaded with a set of apps, but the real fun starts when you write your own. Everything is built around a simple loop: draw to the screen, call badge.update() to show the frame and read the buttons, then go round again — and you've got an app. If you've ever written a few lines of Python, you already have everything you need to get started.
This site is your guide. You'll find step-by-step tutorials to get you up and running, feature guides that go deeper on topics like sprites, text, and vector shapes, and a full API reference for when you need the details. Whether you're building a name badge for a conference, a tiny game to pass the time, or a dashboard that pulls live data over Wi-Fi — it all starts here.
New here? Head straight to Meet your badge to get acquainted with the hardware.
Meet the badges
There are three badges in the family, each with its own kind of display — but they all run the same Badgeware API, so code you write for one will mostly work on the others. Where they differ is resolution, colour, and how the screen refreshes.
| Tufty | Badger | Blinky |
|---|---|---|
| The versatile all-rounder — smooth, vivid, and up for anything graphical. | The low-power one — sips battery and idles for up to 100 days. | The little showpiece — tiny, bright, and made to be worn. |
| Full-colour IPS LCD | E-paper display | Greyscale LED matrix |
| 320×240 (or 160×120) | 264×176 | 39×26 |
| Full RGB colour | Black, white + 2 greys | Bright white LEDs |
| Redraws continuously | Updates on demand, sleeps between | Redraws continuously |
| Great for games, animation, and rich UIs | Great for name badges, dashboards, and e-readers | Great for scrolling text, pixel art, and notifications |
Shared hardware
Despite their different displays, all three badges share the same core hardware and software platform:
| Processor | RP2350 dual-core ARM Cortex-M33 @ 200MHz with hardware floating point |
| Memory | 16MB flash for firmware, code, and assets, plus 8MB PSRAM for runtime use |
| Connectivity | 2.4GHz Wi-Fi and Bluetooth 5 for downloading data, syncing, or communicating between badges |
| Power | 1000mAh rechargeable battery with USB-C charging |
| Expansion | Qw/ST port for connecting breakout accessories, SWD port for debugging |
| Inputs | Five front-facing buttons, plus RESET and BOOTSEL on the back |
| Software | The same Badgeware MicroPython API, so code written for one badge runs on the others with minimal changes |
| Disk Mode | Double-tap RESET to mount the badge as a USB drive, drag your files on, eject, and go |
A taste of Badgeware
Every app is a loop that draws a frame, then calls badge.update() to show it. Here's a quick example — a bouncing ball with a greeting, in about 20 lines:
x, y = 80, 60
dx, dy = 2, 1
screen.font = font.smart
while True:
x, y = x + dx, y + dy
if x < 5 or x > screen.width - 5: dx = -dx
if y < 5 or y > screen.height - 5: dy = -dy
screen.pen = color.navy
screen.clear()
screen.pen = color.orange
screen.circle(x, y, 10)
screen.pen = color.white
screen.text("Hello, Badgeware!", 24, 50)
badge.update()
That's a complete, runnable app — copy it onto your badge and it just works. Everything else builds on these ideas: drawing to the screen, reading buttons, and calling badge.update() each time round the loop.
Where to next
- Meet your badge — a quick tour of the hardware and what it can do.
- Creating your first app — turn your code into a real app: the folder layout, an icon, and installing it on your badge.
- Coding for the different badges — how Tufty, Badger, and Blinky differ, and how to write code that runs on all three.
- Guides — go deeper on sprites, text, vector shapes, animation, and more.
- API reference — the details, for when you need them.
Happy hacking!