GUIDE / TERMINAL

Erfahren Sie, wie Sie Suche, Regex und Multi-Regel-Filter in SerialFlow Terminal kombinieren, um relevante Nachrichten im seriellen Output schnell zu finden.

So nutzen Sie die Filterfunktion des seriellen Monitors effizient

In der Embedded-Entwicklung mit Mikrocontrollern wie dem ESP32, ESP8266 oder STM32 ist die serielle Schnittstelle (UART) das wichtigste Fenster in das Innenleben Ihres Systems. Sobald jedoch komplexere Frameworks wie FreeRTOS, lwIP, Wi-Fi-Stacks oder MQTT-Clients aktiv sind, verwandelt sich die serielle Konsole schnell in eine unübersichtliche Datenflut. Dutzende Debug-Meldungen pro Sekunde machen es schwer, seltene Ausnahmefehler, Stack-Überläufe oder Verbindungsabbrüche rechtzeitig mit bloßem Auge zu erfassen.

Mit SerialFlow Terminal steht Ihnen ein leistungsstarker serieller Monitor für Android zur Verfügung, der speziell für diese Herausforderungen im Labor und vor Ort entwickelt wurde. In diesem Leitfaden erfahren Sie Schritt für Schritt, wie Sie einfache Volltextsuchen, reguläre Ausdrücke (Regex) und mehrstufige Filterregeln kombinieren, um das Rauschen aus Ihren Protokollen zu eliminieren und kritische Fehler in Sekundenschnelle zu isolieren.


Warum serielle Datenfilter für IoT-Entwickler unverzichtbar sind

Beim Debugging eines ESP32 erzeugen verschiedene Systemschichten gleichzeitig Statusmeldungen:

  • System-Bootloader und ROM: Informationen zu Reset-Gründen, Taktfrequenzen und Flash-Parametern.
  • Wi-Fi- und Bluetooth-Treiber: Ereignisse zu Verbindungsaufbau, Signalstärke (RSSI) und Beacon-Timeouts.
  • Netzwerk- und Cloud-Protokolle: TCP/IP-Handshakes, TLS-Zertifikatsprüfungen, HTTP-Requests und periodische MQTT-Keep-Alive-Pings.
  • Anwendungs- und Sensor-Tasks: Periodische Messwertausgaben, FreeRTOS-Task-Wechsel und Statusprüfungen.

Ohne gezielte Filterung scrollen entscheidende Fehlermeldungen — wie Panics oder Assertion-Fehler — oft in Bruchteilen einer Sekunde aus dem sichtbaren Bereich. Herkömmliche serielle Monitore bieten meist nur eine rudimentäre Suchleiste, die den laufenden Datenstrom nicht bändigen kann. SerialFlow Terminal trennt daher bewusst zwischen Navigation (Suchen) und Echtzeit-Sichtbarkeitssteuerung (Filtern).


Suche vs. Filter: Das richtige Werkzeug für jede Debugging-Phase

Um effizient zu arbeiten, sollten Sie verstehen, wann die Suche genügt und wann ein aktiver Filter erforderlich ist:

  1. Die Suchfunktion (Search):

    • Dient dem Auffinden von statischen Vorkommnissen im bereits empfangenen Log-Puffer.
    • Ermöglicht das Springen zwischen vorherigen und nächsten Treffern (Previous / Next).
    • Unterstützt optionale Groß-/Kleinschreibung (Case Sensitive).
    • Einsatzbereich: Schnelle Überprüfung, ob ein bestimmtes Ereignis (z. B. eine IP-Zuweisung) während des letzten Startvorgangs überhaupt eingetreten ist.
  2. Die Filterfunktion (Filter):

    • Manipuliert die kontinuierliche Anzeige des Datenstroms in Echtzeit.
    • Blendet irrelevante Zeilen dynamisch aus, sodass nur noch Zeilen angezeigt werden, die Ihren Kriterien entsprechen.
    • Unterstützt Positiv-Filter (Einschließen) und Negativ-Filter (Ausschließen).
    • Einsatzbereich: Beobachtung eines instabilen Langzeitbetriebs, bei dem Sie ausschließlich Warnungen, Fehler oder Nachrichten eines bestimmten Subsystems im Blick behalten möchten.

Schritt-für-Schritt: Filterstrategien in SerialFlow Terminal

Schritt 1: Verbindung herstellen und Puffer vorbereiten

Verbinden Sie Ihr ESP32-Board über ein USB-OTG-Kabel mit Ihrem Android-Gerät und starten Sie SerialFlow Terminal.

  1. Wählen Sie den erkannten USB-zu-UART-Chip (z. B. CP2102, CH340, FT232 oder den nativen USB-CDC-Port des ESP32-S3/C3).
  2. Konfigurieren Sie die korrekte Baudrate (standardmäßig meist 115200 Baud) und das Verbindungsprofil (8 Datenbits, 1 Stoppbit, keine Parität).
  3. Öffnen Sie die Verbindung. Sobald die ersten Protokollzeilen eintreffen, aktivieren Sie bei Bedarf das Auto-Scroll-Feature.

Tipp: Wenn Sie vor dem Debuggen eine frische Firmware aufspielen möchten, können Sie das Board direkt am Smartphone mit ESPFlash flashen und danach nahtlos zu SerialFlow Terminal wechseln.

Schritt 2: Gezielte Stichwortfilter für Subsysteme einrichten

Beginnen Sie bei der Fehlersuche immer mit der Isolierung der beteiligten Softwarekomponente. Im ESP-IDF oder Arduino-ESP32-Framework werden Logs üblicherweise mit Tags wie [I], [W], [E] und Modulbezeichnern versehen.

  • Nur Fehler und Warnungen anzeigen: Geben Sie als Filterkriterium [E] oder ERROR ein. Dadurch werden sämtliche Routine-Statusmeldungen ignoriert.
  • Wi-Fi-Subsystem überwachen: Nutzen Sie den Begriff wifi oder wifi_init. Sie sehen sofort, ob der Verbindungsaufbau an einem falschen Passwort (AUTH_FAIL) oder mangelnder Signalstärke scheitert.
  • MQTT-Transaktionen isolieren: Filtern Sie nach MQTT oder PUB, um zu kontrollieren, ob Telemetrie-Pakete erfolgreich an den Broker übermittelt werden.

Schritt 3: Reguläre Ausdrücke (Regex) für kritische Abstürze nutzen

Wenn ein Mikrocontroller unregelmäßig neu startet, liegt die Ursache häufig in Speicherkorruptionen, Null-Pointer-Dereferenzierungen oder Task-Watchdog-Timeouts. Solche Ereignisse erzeugen spezifische Systemmeldungen.

Aktivieren Sie in SerialFlow Terminal den Regex-Modus und setzen Sie folgendes Muster ein:

(Guru Meditation|panic|abort\(\)|assert failed|watchdog)

Erklärung des Ausdrucks:

  • Guru Meditation: Fängt die klassischen ESP32-Core-Dump-Meldungen ab.
  • panic: Erkennt Fatal-Panics des FreeRTOS-Kernels.
  • abort\(\): Fängt programmgesteuerte Notabschaltungen ab.
  • assert failed: Erkennt fehlgeschlagene Plausibilitätsprüfungen im Code.
  • watchdog: Listet Interrupt- und Task-Watchdog-Ereignisse auf.

Sobald der ESP32 crasht, bleibt die Absturzursache mitsamt dem Register-Dump und Backtrace auf dem Display stehen, ohne von nachfolgenden Boot-Meldungen verdrängt zu werden.

Schritt 4: Rauschen mit Multi-Regel-Filtern eliminieren

In realen Projekten möchten Sie oft mehr als nur ein einzelnes Wort herausfiltern. Ein typisches Szenario: Sie möchten alle Netzwerkprotokolle sehen, aber periodische Heartbeats oder Sensor-Ticker ausblenden.

In SerialFlow Terminal können Sie mehrere Filterregeln verknüpfen:

  1. Regel 1 (Einschluss): Filtern nach (wifi|mqtt|http) – zeigt nur zeilenrelevante Netzwerkereignisse an.
  2. Regel 2 (Ausschluss): Negieren Sie irrelevante Wiederholungen mit Mustern wie heartbeat oder ping_ack.

Dadurch reduzieren Sie Hunderte irrelevante Zeilen auf die 5 bis 10 Ereignisse, die den Verbindungsabbruch tatsächlich dokumentieren.


Praxisbeispiel: Einen abbrechenden MQTT-Client diagnostizieren

Ein häufiges Problem in IoT-Deployments: Ein ESP32 verbindet sich mit dem WLAN, sendet einige Minuten lang Sensordaten und bricht die Verbindung zum MQTT-Broker anschließend dauerhaft ab.

Vorgehensweise:

  1. Terminal pausieren: Sobald die rote Status-LED am Board erlischt, tippen Sie in SerialFlow Terminal auf Pause. Das stoppt das Weiterlaufen des Bildschirms, während neue Daten im Hintergrund weiter gepuffert werden.
  2. Diagnosefilter anwenden: Setzen Sie folgenden Regex-Filter:
    (MQTT_EVENT_DISCONNECTED|wifi_disconnect|heap)
    
  3. Ergebnis analysieren:
    • Erscheint MQTT_EVENT_DISCONNECTED unmittelbar nach einer Warnung wie low internal heap: 1420 bytes, liegt ein Speicherleck (Memory Leak) vor. Der TLS-Handshake scheiterte schlicht am Mangel an zusammenhängendem RAM.
    • Erscheint vor dem Abbruch wifi_disconnect reason: 201, liegt ein Timeout auf Access-Point-Ebene vor.
  4. Log-Export: Exportieren Sie den gefilterten Textabschnitt direkt aus der App als Textdatei oder teilen Sie ihn mit Ihrem Entwicklerteam.

Tipps zur Fehlerbehebung bei der seriellen Filterung

  • Zeichensalat trotz korrekter Filter: Wenn die serielle Ausgabe unleserliche Sonderzeichen enthält, passen die UART-Parameter nicht. Prüfen Sie, ob im Code Serial.begin(115200) aufgerufen wird, während im Terminal 9600 Baud eingestellt ist.
  • Filter zeigt gar keine Ausgaben mehr an: Prüfen Sie, ob versehentlich die Option Case Sensitive aktiviert ist. error findet ERROR nicht, wenn die Groß-/Kleinschreibung beachtet wird. Schalten Sie den Schalter aus oder verwenden Sie (?i)error im Regex-Modus.
  • Frühe Boot-Logs fehlen: Viele ESP32-Entwicklungsboards führen beim Öffnen der seriellen Schnittstelle über DTR/RTS einen automatischen Reset durch. Wenn Sie die allerersten Boot-Meldungen nach dem Einschalten sehen möchten, verbinden Sie das Terminal, leeren Sie die Ansicht und betätigen Sie anschließend kurz die physische EN- bzw. RESET-Taste auf dem Board.

Fazit

Ein gut konfigurierter serieller Monitor spart Stunden mühsamer Fehlersuche. Durch die geschickte Kombination von Stichwortsuche, regulären Ausdrücken und mehrstufigen Ausschlussregeln in SerialFlow Terminal verwandeln Sie unübersichtliche UART-Datenströme in präzise Diagnosewerkzeuge.

Sollten Sie nach der Fehleranalyse Fehler im Code behoben haben, können Sie Ihre neuen Binärdateien mit ESPFlash direkt von Ihrem Smartphone über USB OTG neu aufspielen und das Ergebnis sofort im Terminal überprüfen.