A reusable conference badge for the Pimoroni Badger 2040 running Badger OS. Three screens switchable with front buttons: A=badge, B=joke, C=QR vCard.
Conference files contain a single line with the conference name.
Personal info lives in personal.txt and is shared across conferences.
To switch conference, copy the right file to badges/badge.txt on the device:
make upload-config CONF=myconference2026.txtCreate a new conference file:
echo "MyConference 2026" > myconference2026.txt
make upload-config CONF=myconference2026.txtOne value per line, shared across all conferences:
| Line | Field |
|---|---|
| 1 | Your name |
| 2 | Detail 1 label (e.g. "Email:") |
| 3 | Detail 1 value |
| 4 | Detail 2 label (e.g. "IRC:") |
| 5 | Detail 2 value |
| 6 | Detail 3 label (e.g. "GitHub:") |
| 7 | Detail 3 value |
| 8 | Detail 4 label (e.g. "GitLab:") |
| 9 | Detail 4 value |
| 10 | Image path on device |
| 11 | Phone number |
See example.personal.txt for a template.
Single line with the conference name:
MyConference 2026
Details 1-2 (email, IRC) are shown on the badge screen. All details are shown on the QR screen and included in the vCard.
Jokes are stored in jokes.txt, separated by --- on its own line.
Each block is one joke with literal newlines for line breaks on screen.
Why do programmers
prefer dark mode?
Because light
attracts bugs.
---
There are 10 types
...
Upload jokes to the device:
uvx mpremote fs cp jokes.txt :/jokes.txtIf /jokes.txt is missing on the device, a built-in fallback list is used.
Plug in the Badger via USB. Uses uvx to run mpremote without
installing it globally.
# Check the device is visible
uvx mpremote connect list
# Upload badge app, image, jokes, and personal info
make upload-all
# Upload conference config
make upload-config CONF=myconference2026.txt
# Reset the device after uploading
make reset
# Or combine upload and reset
make upload-all resetAfter uploading, the badge app appears in the Badger OS launcher.
- Pre-size to 80x80 pixels or smaller before uploading.
- Use baseline JPEG (not progressive -- the decoder cannot handle it).
- Monochrome or greyscale images work best on the 1-bit display.
- Store images in
/badges/on the device.
- Progressive JPEGs will fail silently or raise an exception.
- Large images eat RAM fast; keep them small.
- The
mpremote fs cpcommand has a bug where it skips files with the same size. The Makefile works around this by deleting before copying. - The device halts after drawing (power saving). Unplug and replug USB between commands if the device stops responding.