FUNKTIONEN · FIRMWARE & PROTOKOLL

Von deiner MCU auf die Leitung.

Starte mit dem Serial.print, das du schon hast, oder nimm KymoCore für kompakte Binär-Frames, Gerätezeit, Trace und Live-Parameter. KymoProbe liefert fertige Beispiele.

Das Problem

Text formatieren kostet Rechenzeit und blockiert die Schleife, eine Zahl pro Zeile ergibt bestenfalls eine Kurve, und das Parsen am PC bricht bei jedem Tippfehler.

Was Kymotrace macht

KymoStudio liest gängige Textzeilen, wie sie sind. Brauchst du mehr, plant KymoCore deine Kanäle, kodiert sie in Frames mit 9–21 Bytes und übergibt sie an jeden Transport – ohne Heap, RTOS oder Blockieren.

Zwei Wege

WEG A · OHNE BIBLIOTHEK

Textzeilen vorhandener Firmware

>temp:23.5                 Teleplot
temp=23.5 hum=41           name=wert / name:wert
23.5,41                    CSV-Spalten

Benannte Werte bekommen ein stabiles Signal und werden zur Kurvenbeschriftung. Eine Zeile gilt ganz oder gar nicht. Funktioniert über Seriell, TCP, UDP und MQTT.

WEG B · MIT KYMOCORE

Binär-Frames, Gerätezeit, Rückkanal

lib_deps = codename666/KymoCore@^7.1.0

Bis zu 256 Kanäle mit eigenem Takt, Y, XY oder XYZ, optional mit Zeitstempel und CRC-8. Laufzeit-Trace und Live-Parameter über dieselbe Leitung.

Zwei Aufrufe. Das ist die API.

Kanäle einmal beschreiben, beim Start Kymo_Init() und in der Schleife Kymo_Main() aufrufen. KymoCore entscheidet, welcher Kanal dran ist, fragt deinen Callback nach dem Wert und wartet nie auf die Schnittstelle.

  • MCUs & SoCs · Plattform-Callbacks
  • Beispiele: Arduino · ESP32 · STM32
  • C99-API / C++11

KymoCore auf PlatformIO →

// kymo_config.cpp – deine Messung
static uint8_t sample(void *, uint8_t id, KymoSample *out)
{
    out->value = id == 0 ? readTemperature() : readPressure();
    return 1;
}

static const KymoChannel channels[] = {
    {20,  0, 0},   // Kanal 0 alle 20 ms
    {100, 1, 0}    // Kanal 1 alle 100 ms
};

// main.cpp
static KymoContext kymo;
void setup() { Serial.begin(115200); Kymo_Init(&kymo, &kymo_config); }
void loop()  { Kymo_Main(&kymo); }

Jedes Byte hat seinen Platz.

Bau selbst einen Frame. Schalte die optionalen Felder um und sieh, wie sich Aufbau, Länge und Prüfsumme ändern – das sind genau die Bytes auf der Leitung.

SYNCDESCID XYZZEITCRC / 00

Vollständiges Protokoll mit Trace und Rückkanal →

KymoCore und KymoProbe

Blockiert nie

Kein Heap, kein RTOS, keine Exceptions oder RTTI. Du lieferst einen Write-Callback, KymoCore die Bytes.

Jede Schnittstelle

UART, USB CDC, WLAN mit TCP oder UDP, MQTT, CAN.

Transport-Multiplexer

Daten und Trace teilen sich fair eine Leitung – mit Teilschreibvorgängen, Backpressure und geliehenen DMA-Puffern.

Live-Parameter

KYMO_PARAM meldet einstellbare Variablen an; das Gerät meldet sie und bestätigt jeden Schreibzugriff.

Wegkompilieren für Produktion

KYMO_ENABLED=0 entfernt jede Instrumentierung; ihre Argumente werden nicht einmal ausgewertet.

Konfigurator

CLI und optionaler Qt-Editor für versionierte Projektprofile mit Export für GCC, CMake und PlatformIO.

KymoProbe-Beispiele

ESP32, Arduino Uno/Nano/Mega und STM32, in der CI gebaut: Seriell, WLAN mit TCP und MQTT, Trace-Demo, PI-Regler, Textzeilen.

Stresstests

Generierte Profile und Stress-Demos für USB und TCP zum Prüfen des Durchsatzes.

Open Source

KymoCore und KymoProbe stehen unter GPLv3; für proprietäre Firmware gibt es eine kommerzielle Lizenz.

kymocore auf GitHub → · kymoprobe auf GitHub →

Kernpunkte

  • Textzeilen brauchen gar keine Bibliothek
  • KymoCore: binäre float32-Frames mit 9–21 Bytes, bis zu 256 Kanäle
  • Selbstsynchronisierend, optional mit CRC-8
  • Hardwareunabhängig; Arduino, ESP32 und STM32 sind Beispiele, keine Beschränkung

Ehrliche Grenzen

  • Textzeilen tragen keine Gerätezeit und haben keinen Trace oder Rückkanal
  • Eine Portierung braucht eine passende Toolchain, ausreichend Speicher und die Plattform-Callbacks
  • Die Abdeckung von ISRs und Scheduler hängt von deinem Plattform-Port ab

Flashe ein Beispiel und sieh in Minuten Daten.

Schnellstart KymoProbe-Beispiele