Technical

Dungeons and Dragons Synced Stats Tracker

December 2024

A tabletop stats system of custom PCBs linked over I2C that lets a Dungeon Master see and edit every player’s health and stats from a Python app.

Player stat tracker module
Player stat tracker

The Table

I built this while playing Dungeons and Dragons so the DM could see everyone’s health. Each player has a module linked to the others over I2C. One wire can run around the table connecting all of them. The wire ends at the DM’s tracker, which is wired to a computer over USB. View on GitHub.

Several stat tracker modules linked together
Linked stat trackers

The Hardware

Each tracker has a microcontroller, five buttons, an LCD screen, two LEDs, two I2C ports, and a 4-pin DIP switch for assigning the module’s I2C id, all soldered to a custom PCB. The LCD can display multiple pages of statistics; the buttons modify the currently selected statistic. The two LEDs show whether it is the player’s turn or the player is next. The microcontroller processes inputs and outputs and transmits data with the host module.

Each PCB sits in a custom 3D-printed body. The top is stained laser-cut wood that can have details engraved for personalization.

Custom PCB for the stat tracker
Custom stat tracker PCB
Finished stat tracker modules in wooden and 3D-printed housings
Stat tracker modules

The App

I wrote a custom Python/Tkinter program, packaged as an executable, that views and modifies players, characters, and statistics. On start, the user can open a previous file or create a new one, then create or edit characters and their general statistics. Characters can be archived for later use. In a game, the user can set turn order so actions reset on players’ turns and the turn LEDs on the modules update.

The main window shows all characters currently in play and lets the user modify any statistic. The tracker connected to the computer also shows a clone of the active player’s module for quick changes without keeping the program in focus. The program includes a death-save counter when a character drops to 0 hit points, and a revive flow if the character dies.

Desktop stats tracker application
Stats tracker program

Updates

When the program starts, it checks a GitHub repository. If GitHub has a newer version than the local program, it asks whether to update. If the user agrees, the program downloads the new version, uninstalls the old one, and opens the new one.