Whether you are attending a conference or just getting started with embedded development, NiceBadge gives you a real piece of hardware to hack on, complete with a ready-to-use firmware, step-by-step tutorials, and progressively more advanced examples that unlock every capability of the board.
The microcontroller is the **[nice!nano](https://nicekeyboards.com/nice-nano/)** (nRF52840), which is fully supported by TinyGo and exposes both USB HID and Bluetooth HID out of the box.
A showcase firmware that demonstrates all badge peripherals — LEDs, display, buttons, joystick, buzzer, and BLE. Ideal for conferences and as a starting point for your own experiments.
Turns the badge into a fully functional USB/Bluetooth keyboard. Built on top of [sago35/keyboards](https://github.com/sago35/keyboards), a TinyGo framework for custom keyboards.
| [step8](tutorial/basics/step8/) | Passive buzzer plays a note per button press |
| [step9](tutorial/basics/step9/) | USB MIDI — badge sends notes C4 / E4 / G4 to any DAW |
| [step10](tutorial/basics/step10/) | USB HID mouse — joystick moves the cursor, A/B click |
---
### BLE
Bluetooth Low Energy examples using the nRF52840 on the nice!nano. Compatible apps: **nRF Connect**, **nRF Toolbox**, **Serial Bluetooth Terminal**, **LightBlue**.
| Step | What it does |
|------|--------------|
| [step1](tutorial/ble/step1/) | **Counter** — advertises as Nordic UART Service (NUS), sends an incrementing counter via BLE notifications every second; display shows connection status and current value; send `reset` from the app to restart the count |
| [step2](tutorial/ble/step2/) | **LED color control** — mobile writes 3 bytes (R, G, B) to a custom characteristic; both WS2812 LEDs and the display update immediately |
| [step3](tutorial/ble/step3/) | **Scanner** — lists nearby BLE devices with name and RSSI, color-coded by signal strength; button A clears the list |
| [thermal-camera](examples/thermal-camera/) | AMG88xx 8×8 IR sensor upscaled with bilinear interpolation and rendered with an iron-palette color map on the full display | AMG88xx sensor on I2C1 (SDA=P0_17, SCL=P0_20) |
| [rubber-duck](examples/rubber-duck/) | USB HID keyboard automation (Ubuntu/GNOME target): opens a text editor, types a message, and launches a URL. Press button A to trigger | — |
| [co2-sensor](examples/co2-sensor/) | SCD4x CO2/temperature/humidity sensor: display background turns green/yellow/red by CO2 level, LEDs mirror the color, buzzer warns above 1500 ppm | SCD4x sensor on I2C1 (SDA=P0_17, SCL=P0_20) |
NiceBadge is based on the **[conf2025badge](https://github.com/sago35/keyboards/tree/main/conf2025badge)** by [sago35](https://github.com/sago35), which debuted at the TinyGo Conference in Japan. NiceBadge shares the same form-factor and was built on top of the groundwork たかさごさん laid there.
Thank you, for the inspiration, the open design, and all the work that made this possible.