🔧 The problem
Serial monitors are great for logging, but they quickly fall short once you need structure.
During Arduino and ESP32 projects I often needed more than plain text:– progress feedback during flashing or calibration– clear OK / warning / error states– live variables without flooding the log– the ability to separate structured output from raw debug text
Most solutions either require custom PC-side code, binary protocols, or complex libraries on the firmware side.
I wanted something simpler.
💡 The idea
The idea behind Terminus Console is simple:
let the firmware drive the PC-side UI using plain, human-readable serial output.Instead of sending binary data or custom packets, the firmware outputs small textual tags.The PC application interprets these tags and upda…
🔧 The problem
Serial monitors are great for logging, but they quickly fall short once you need structure.
During Arduino and ESP32 projects I often needed more than plain text:– progress feedback during flashing or calibration– clear OK / warning / error states– live variables without flooding the log– the ability to separate structured output from raw debug text
Most solutions either require custom PC-side code, binary protocols, or complex libraries on the firmware side.
I wanted something simpler.
💡 The idea
The idea behind Terminus Console is simple:
let the firmware drive the PC-side UI using plain, human-readable serial output.Instead of sending binary data or custom packets, the firmware outputs small textual tags.The PC application interprets these tags and updates UI elements accordingly.Everything stays readable in a normal serial log, but gains structure on the PC side.🧠 How it works
Terminus uses a small set of lightweight serial tags.These tags act as state switches rather than paired XML-style blocks.This makes the system robust against partial packets, line breaks, and chunked serial data.No nesting, no strict formatting, no extra firmware libraries.🏷️ Serial tag examples
Progress indicator (Donut)Serial.println("<progress>75</progress>");
Status buttonsSerial.println("<bool1 success>Connected");Serial.println("<bool2 warning>Overcurrent");
**Live variables (label and value are separate by design)**Serial.println("<var1lbl>Temperature</var1lbl>");Serial.println("<var1>42</var1>");
**Colors (state-based)**Serial.println("<red>Overcurrent detected red text");Serial.println("<green>OK green text");Serial.println("<default>System normal grey text");
Window routing (dual output)Serial.println("<w2>Text Window right");Serial.println("<w1>Text Window left");🔔 Popup notificationsSerial.println("<pop success>Calibration finished</pop>");Serial.println("<pop warning>Overcurrent detected</pop>");Serial.println("<pop danger>Emergency stop</pop>");
Popups are designed for important events that should immediately catch attention.They are parsed independently from the normal serial stream and can appearas temporary notifications or sticky alerts, depending on severity.🪟 UI featuresOn the PC side, Terminus Console turns these serial tags into:
– a live progress indicator– status buttons with color-coded states– a live variables panel– popup notifications for important events– optional dual output windows– readable serial logs that remain human-friendly
All UI elements are optional and only appear when used.
🛠️ Why this approach works well
This approach has a few advantages:– no binary protocol– no firmware-side libraries– resilient against serial fragmentation– easy to debug using any terminal– minimal firmware code changes– suitable for flashing, calibration, diagnostics, and test tools
Terminus started as a personal utility, but quickly became something I used daily during development.📦 Availability
Terminus Console is a Windows application.It is intended as a development and diagnostics tool for embedded systems and firmware workflows.
Documentation and downloads are available here:https://www.terminusconsole.crydal.com