77 lines
2.6 KiB
Markdown
77 lines
2.6 KiB
Markdown
|
# Design Document: MicroBadge
|
||
|
|
||
|
## Overview
|
||
|
|
||
|
**MicroBadge** is an interactive embedded application built for the BBC
|
||
|
micro:bit v2. It is written in **Rust** using the **Embassy** async embedded
|
||
|
runtime. The project functions as a **conference name badge** that acts as a
|
||
|
professional and technical icebreaker at events.
|
||
|
|
||
|
The application framework includes:
|
||
|
* A **menu system** for switching between apps.
|
||
|
* A **name scroller** for displaying your name or custom message.
|
||
|
* A **Snake game** for fun and interactivity.
|
||
|
* A **NFC business card** app for sharing contact info. **Still in progress**
|
||
|
|
||
|
## Goals
|
||
|
|
||
|
* Provide a custom and memorable name badge experience.
|
||
|
* Showcase embedded Rust development using async and no-std.
|
||
|
* Enable fun interactions and sharing via NFC.
|
||
|
* Serve as a technical portfolio piece for conferences, meetings, and
|
||
|
interviews.
|
||
|
|
||
|
## Architecture
|
||
|
|
||
|
### 1. Core Framework
|
||
|
|
||
|
* Built on **Embassy** for asynchronous concurrency.
|
||
|
* Uses hardware abstraction layers (HALs) for GPIO, timers, display, and
|
||
|
buttons.
|
||
|
* Implements a lightweight app-switcher system with a menu UI.
|
||
|
|
||
|
### 2. Applications
|
||
|
|
||
|
#### Name Scroller
|
||
|
* Scrolls a name or message across the LED matrix.
|
||
|
* Configurable for speed and repeat mode.
|
||
|
* Useful for identifying the wearer at a glance.
|
||
|
|
||
|
#### Snake Game
|
||
|
* Classic Snake game rendered on the 5x5 LED display.
|
||
|
* Uses `Button A` and `Button B` for turning.
|
||
|
* Includes food spawning, score tracking, and difficulty selection.
|
||
|
* Uses PWM for different intensity led lights.
|
||
|
|
||
|
#### NFC Business Card (WIP)
|
||
|
* Leverages the onboard NFC peripheral.
|
||
|
* Intends to share vCard/contact data over NFC.
|
||
|
* Targeted at mobile phones for quick transfer of contact info
|
||
|
|
||
|
## User Interaction
|
||
|
|
||
|
* Navigation is handled via micro:bit's `Button A`, `Button B`, and long-press `Start` gesture
|
||
|
* LED matrix provides visual feedback for game states and menu navigation
|
||
|
* Apps are selected from a simple menu UI
|
||
|
* Snake game is tuned to a slower speed (~4Hz) for usability
|
||
|
|
||
|
## Development Environment
|
||
|
|
||
|
* Written entirely in **Rust**, `#![no_std]`
|
||
|
* Uses **Embassy** for async device access and task scheduling
|
||
|
* Debugging output via `defmt`
|
||
|
* Built and flashed using `probe-rs` and `cargo-embed`
|
||
|
|
||
|
## Future Improvements
|
||
|
|
||
|
* Finalize NFC vCard transmission
|
||
|
* Add configuration storage via flash memory
|
||
|
* Create a desktop companion app for editing settings
|
||
|
* Support BLE for data sync or configuration
|
||
|
|
||
|
## Summary
|
||
|
|
||
|
MicroBadge combines a fun hardware platform with modern Rust development.
|
||
|
It serves not only as a name badge but also as a way to demonstrate embedded
|
||
|
skills, share contact info, and invite technical discussion at events.
|