Everything you need to hack on the Retia DEF CON badge: hardware docs, pinouts, flashable firmware (including DOOM, a full NES emulator, Meshtastic, MeshCore, and Reticulum), and example code to get you from "just unboxed" to writing your own firmware.
🚀 Start here: the Badge Launcher v2 "Touch" — the flagship badge experience. One flash + one micro-SD card turns the badge into a pick-what-you-run device: two full-color touch mesh messengers (MeshCore + Meshtastic MUI), classic Meshtastic, a Reticulum RNode, an NES emulator with a 37-game homebrew library, and WLEDkitty — switchable from an on-badge menu in ~10 seconds, no computer needed. Comes with a
MESH-101.mdthat gets two badges messaging over LoRa in minutes. Flash it from your browser at scriptkitty.sh. (Requires a FAT micro-SD card — true of launcher v1 too. Prefer DOOM resident in flash? Launcher v1 "Classic".)
Yes, that's DOOM. Flash it in one command — see below.
| MCU | ESP32-S3-WROOM-1 — dual-core 240 MHz, WiFi + BLE, 8 MB flash, 2 MB PSRAM, native USB-C |
| Display | 2.4″ ILI9341 240×320 color TFT + XPT2046 resistive touch (MSP2402 module) |
| Radio | RFM95W LoRa 915 MHz (SX1276), U.FL antenna |
| Input | 6 face buttons (d-pad + A/B) + BOOT button usable as a 7th |
| Storage | micro-SD slot (tested to 16 GB SDHC) |
| Blinkies | 10× WS2812B NeoPixels, green debug LED |
| Sound | Piezo buzzer (MOSFET-driven) |
| Expansion | SAO v2, QWIIC (I²C), UART header, SPI header, off-board NeoPixel connector |
| Power | 2×AA (boost) or USB-C, auto-switching |
pip install esptool
esptool --chip esp32s3 --port <PORT> write-flash 0x0 firmware/doom/doom-audio.factory.bin<PORT> is /dev/cu.usbmodem* (macOS), /dev/ttyACM0 (Linux), or COMx (Windows). Full instructions, port-finding, and un-bricking: docs/flashing.md.
docs/ pinout.md ← START HERE · hardware.md · flashing.md · sd-card.md
firmware/
doom/ DOOM shareware, audio + silent builds (flash & play)
meshtastic/ Meshtastic 2.7.23, standard + low-power builds
reticulum/ RNode v1.85 — the badge as a Reticulum LoRa transceiver
examples/
hello-badge/ buttons + LED + buzzer in 100 lines (your first build)
sd-test/ mount/format/read/write the micro-SD slot
hardware/ KiCad 8 sources + schematic PDF
- The touch controller and the display-module SD slot have crossed data lines — hardware SPI can't reach them. The main SD slot and everything else work normally. Details: docs/pinout.md.
- Native-USB download-mode trap — DTR-toggling serial monitors + reset = badge stuck "waiting for download". Fix: any esptool command ending in hard-reset. Details: docs/flashing.md.
- Never TX on LoRa without an antenna. Receiving is safe; transmitting into nothing can cook the PA.
- DOOM — the 1993 classic, natively, full speed. D-pad moves, A fires, GPIO0 switches weapons. Audio build plays SFX through the piezo.
- Meshtastic — off-grid LoRa mesh messaging with phone app support; standard, power-optimized, and full color touch UI (MUI) builds. Ready-to-flash touch UI: meshtastic-mui-v2.7.23 release — on-screen keyboard, node map, touch region picker, phone TCP API alongside the home screen.
- MeshCore — the badge as a MeshCore LoRa mesh node, hardware-verified badge-to-badge (messages + ACKs). The flagship build is a full standalone touchscreen mesh communicator — chats, contacts, channels, on-screen keyboard, RF monitor + spectrum analyzer, chimes, D-pad nav — that is simultaneously a BLE companion for the official MeshCore phone app. Plain companion (BLE/USB) builds too. Ready-to-flash images: meshcore-v1.0.0 release. Source: RetiaLLC/MeshCore (board variant) + RetiaLLC/wadamesh (touch messenger), both branch
retia-badge. - Reticulum / RNode — turns the badge into an RNode: a host-controlled 915 MHz LoRa transceiver for the Reticulum network stack (NomadNet, Sideband, MeshChat). The default build shows the live RNode status screen (frequency, airtime, channel load, signal) on the TFT. Flash, provision with
rnodeconf, done — hardware-verified against a Nibble Zero RNode. Full toolkit, source, and Nibble Zero builds live in RetiaLLC/NibbleReticulum. - Anemoia NES (standalone repo) — a full NES emulator: put
.nesROMs on the micro-SD card, browse and launch them on the badge, and play with the D-pad + A/B. Save states, chiptune audio through the piezo, and a one-button START/SELECT scheme (tap BOOT = START, hold = pause menu). Ready-to-flash image on the release page (also attached to this repo'sanemoia-v1.0.0release), plus a curated list of legally-free homebrew games tested on the badge. Ported from Shim06/Anemoia-ESP32.
Both examples are PlatformIO ESP-IDF projects with the badge board definition included — copy one as a template. The short version:
pip install platformio
cd examples/hello-badge
pio run -t upload --upload-port <PORT>Then open a serial monitor at 115200 and press buttons.
