BadgeOS started from a simple question: can a small wearable screen become more than a static electronic badge?
Most electronic badges are either fixed demos, simple image players, or projects that require reflashing firmware every time the visual experience changes. I wanted to build something closer to a tiny “badge operating system”: a touch-friendly firmware, a theme system, wireless content push, and a companion mobile app that can turn photos, templates, and live camera views into badge content. The first development target is the M5Stack StopWatch, an ESP32-S3 device with a 466 x 466 round AMOLED touch screen. I am also experimenting with Waveshare ESP32-S3 1.75-inch AMOLED boards, including GPS-capable variants.
What BadgeOS doesBadgeOS turns an ESP32-S3 AMOLED device into a customizable smart badge.
The current prototype supports:
- A touch-based user interface designed for small AMOLED screens
- Badge display mode for personal images and animations
- Internal flash storage, with optional TF card support on compatible hardware
- Wi-Fi setup and local device discovery
- Runtime themes and UI templates
- A web-based template and badge management interface
- An Android companion app for making and pushing badge content
- A selfie camera mode that streams the phone camera preview to the badge
- Remote shutter control from the badge touch screen
- Front camera, rear camera, and split-camera composition modes
- Persistent settings for camera mode, mirror mode, rotation, and other options
The goal is to make the badge feel less like a single-purpose firmware demo and more like a small personal display platform.
Why I built itI wanted a badge that could change personality. At an event, it can show a name card, avatar, QR code, logo, or animated badge. At home, it can become a tiny desk display or a small companion screen. With a phone, it can become a selfie monitor or a quick badge-making tool.
The key idea is the workflow:
1. Create or select badge content on a phone or web UI.
2. Push it wirelessly to the ESP32 device.
3. Preview and switch themes without rebuilding firmware.
4. Use the badge touch screen as part of the interaction.
That workflow is what BadgeOS is trying to make simple.
HardwareThe main device used for development is:
- M5Stack StopWatch
- ESP32-S3
- 466 x 466 round AMOLED display
- Capacitive touch screen
- Wi-Fi and Bluetooth capability
- Internal flash storage
I am also testing support for Waveshare ESP32-S3 AMOLED devices. These boards have slightly different display, touch, storage, and sensor
configurations, so one of the design goals is to keep common BadgeOS features shared while isolating hardware-specific code.
FirmwareThe firmware runs on ESP32-S3 and handles the device-side experience:
- Display rendering
- Touch interaction
- Storage management
- Wi-Fi provisioning
- Local HTTP APIs
- Badge and theme receiving
- Selfie mirror frame receiving
- Device status reporting
- Hardware-specific display and touch configuration
The device exposes local APIs for device status, Wi-Fi configuration, badge push, theme push, and selfie mirror streaming. This makes it
possible for the web UI and mobile app to interact with the badge without rebuilding firmware.
BadgeOS also has a web interface for managing badge content and templates. The web UI can preview multiple theme screens, including Home, Settings, Time, Map, and Badge views. A user can choose a template and push it directly to a connected badge over Wi-Fi. This makes the theme system closer to a template market: users do not need to understand firmware internals just to change the look ofthe device.
The Android app is designed as the daily companion for BadgeOS.
It includes:
- Device connection flow
- Badge market
- Theme market
- Badge maker
- Selfie camera
- Wi-Fi push to the badge
- Selfie mirror streaming
The app is not just a remote control. It is part of the content creation workflow. A user can take a photo, turn it into badge content, preview it, and push it to the BadgeOS device.
One of the most interesting features is Selfie mode.
In this mode, the phone acts as the camera and the BadgeOS device becomes a small live preview screen. This is useful when the badge is attached near the back of a phone, used as a small external framing display, or placed somewhere the phone screen is hard to see.
The badge can also control the phone:
- Double tap the badge screen to start a 3-second countdown and take a photo
- Swipe left or right on the badge to switch between rear, front, and split-camera modes
- In split-camera mode, drag the line on the badge screen to adjust the composition angle
For performance, the phone does not send full-resolution camera frames. Instead, it crops the center square of the camera image, downsamples it, converts it to RGB565, and streams the compact frame to the badge. This keeps the data size smaller and improves responsiveness.
Building BadgeOS has been less about one single feature and more about making many small systems work together.
Some of the main challenges were:
- Aligning display rotation and touch coordinates
- Handling different AMOLED color formats
- Keeping the UI responsive on ESP32-S3
- Reducing camera streaming latency
- Supporting both internal flash and optional TF card storage
- Making the UI usable on devices without physical buttons
- Separating shared firmware logic from hardware-specific code
- Designing a consistent interaction model across firmware, web, and mobile app
Small embedded devices are sensitive to memory use, frame size, and draw timing. For example, sending a full 466 x 466 RGB565 frame would be much heavier than necessary for live preview. Cropping and downsampling on the phone side gives a better balance between quality and frame rate.
Current statusBadgeOS is still an active prototype.
The M5Stack StopWatch is the main supported device right now. Other ESP32-S3 AMOLED devices are being evaluated, but the focus is on making the core experience stable before expanding to many hardware variants. The current milestone is to make the badge feel polished enough for real daily use:
- Reliable Wi-Fi onboarding
- Smooth badge and theme push
- Fast touch response
- Stable selfie mirror streaming
- Better mobile app experience
- More complete theme packs
- Cleaner hardware abstraction for future devices
Planned improvements include:
- AI Assitant Support with remote LLM / ASR / VAD / TTS service
- AIGC Badge Generation
- More polished built-in themes
- Better iOS support
- More hardware targets
- Improved Bluetooth-assisted setup
- Better offline behavior
- More reliable device discovery
- More creator-friendly badge and theme tools
- More documentation for makers who want to adapt BadgeOS to other ESP32-S3 display boards
BadgeOS is an experiment in making tiny wearable displays more expressive, more personal, and easier to update. Instead of treating the badge as a static screen, BadgeOS treats it as a small connected device with its own UI, content system, and companion app.




Comments