Serial.print event abfangen und weiterleiten möglich?

Seid gegrüßt. :wave: :grinning:

Ich bastel schon seit einigen Monaten an mein Smart Home Projekt mit einem ESP32 und der AsyncWebserver Lib.

Funktioniert bereits alles so wie gewollt.
Steckdosen/Beleuchtung schalten, RGB LED Steuerung, RTC, Temperatur- & Feuchtigkeitsmessung, Nachtschaltung etc. etc.

Jetzt habe ich zwecks Debugging sehr viele Serial.print's im Sketch, die ich natürlich nur über eine COM Verbindung bekomme.
Da ich aber nicht ständig mit nem Laptop dran will, möchte ich ALLE Serial.print's zusätzlich noch umleiten und an meine Benutzeroberfläche schicken.

Ich weiß, es gibt zum Beispiel das WebSerial, das funktioniert auch, allerdings ist das nicht, was ich benötige.
Denn da deklariert man selbst nochmal Nachrichten und schickt sie weiter.
Hilft mir allerdings nicht weiter.

Es geht darum, dass ab und an der ESP doch noch abstürzt und rebootet, ich aber nicht genau ermitteln kann, wann und warum das passiert.
Daher möchte ich über ein paar Tage lang Informationen zu(m) Fehlercode(s) sammeln, ohne unnötig einen PC/Laptop am laufen zu haben.

Daher meine Frage, ist es möglich, das Serial.print Event umzuleiten/abzufangen?
Quasi eine Überwachung, ob was vom Sketch/ESP gesendet wird?
Bitte nicht mit Serial.read verwechseln, ich möchte nur das Serial.print umleiten, sofern es möglich ist.

Vielen Dank vorab.

Grüße

Umleiten kannst Du es meines Wissens nicht, aber Du kannst eine Variable vom Typ Print oder Stream bzw. einen Pointer darauf nutzen und das wahlweise auf einen Client oder Serial zeigen lassen.
miq19 hat hier mal sowas gemacht.

Gruß Tommy

nicht ausgegoren aber vieleicht:

eine Klasse machen ,
von HardwareSerial erben lassen
und im write() nicht nur an den Serialbuffer schicken sondern auch via UDP ins LAN schreiben?

ich würde vermutlich aber auch nur eine Referenz machen und dann halt die Referenz entweder auf Serial oder auf UDP (Broadcast) umleiten.

nur das ist mir unklar

wohin willst du schicken lassen, wenn da kein PC/Laptop laufen soll???

Ist zu speziell, eher Stream oder Print

Du kannst einer initialisierten Referenz kein neues Ziel zuweisen, also eher einen Pointer nehmen.

Gruß Tommy

Vielen Dank schon mal für die Antworten.

Werde ich mich mal versuchen einzulesen, auch wenn es, wie miq19 schon schrieb, ziemlich kompliziert aussieht.
Sieht auf dem Ersten Blick schon verwirrend aus.
Bin erst seit etwas über nem Jahr mit Arduino's befreundet. :grin:

Hier auch nochmal von ihm aber etwas übersichtlicher, wie ich finde.

Via IP auf Tablet, Smartphone (hab so einige hier rumfliegen :grinning_face_with_smiling_eyes:) oder ich logge es auf einer SD Karte.

Ideal wäre, wenn man das Print Event und den Inhalt einfach abfangen könnte und ich es simpel auf eine Funktion lege.

Am wichtigsten ist mir vor allem der Fehlercode, den der ESP beim Absturz generiert.

Der wird aber nicht durch print ausgegeben, sondern vom ESP32-System. Da wirst Du sehr tief ins SDK des ESP32 abtauchen müssen.

Da halte ich den Laptop mit einem loggenden Terminalprogramm für die wesentlich einfachere Lösung.

Gruß Tommy

Edit: Evtl. kann Dir das beim Suchen helfen.

sehe ich auch so.
Wenn der Startup vom ESP auch gewünscht ist, dann wirds nichts bringen im User-Code was zu ergänzen.

Nimm einen OTG Adapter und ein Serial-Programm für dein Tablet und lass das Tablet laufen.

Ich befürchte auch, schade eigentlich. :sweat:

Soweit ich das sehe, liefert RESET_REASON nur einen Zahlenwert, womit man ungefähr sehen kann, in welchem Bereich ein Reset stattgefunden hat.

Zum Glück hab ich alles in meiner groooßen Krims Krams Schublade da, ich denke, dass wird das einfachste sein. :grinning:

Trotzdem Danke für Eure Hilfe. :wave:

Grüße

Wenn das mein Problem wäre, dann würde ich sowas aus dem Lager holen:

Gibts in verschiedensten Farben und Ausprägungen.

Nur bringt es leider nichts, wenn ich die Fehlermeldungen nicht abfangen kann. :grinning:

Das Modul sieht aber interessant aus, würde dank des eigenen Mikrocontroller zumindest weiterlaufen, wenn der ESP abstürzt.

Ich hab zur Zeit noch diese SD Card Module rumfliegen:

Und ein paar ATtiny85 mit USB ebenfalls.
Kann mir daraus auch was basteln. :grin:

Edit:
Hab jetzt noch das hier gefunden, das könnte was sein.
Wenn ich das Debugging einfach auf nen Seriellen Port lege, könnte das was werden. :smiley:

Warum kann man damit die Fehlermeldungen nicht abfangen?

Weil diese ja über die serielle Schnittstelle ausgegeben werden.
Bzw, zur Zeit nur mit verbundener USB Verbindung mit dem ESP.

Hab aber (siehe Link oben) gesehen, dass man wohl nochmal separate RX/TX Pins belegen kann.
Wenn's klappt, dass ich darüber die Fehlermeldungen bekomme, wärs genau das, was ich brauch.

Genau!
Mein Reden...

Tut nichts zur Sache.

Am ESP?
Die helfen dir nicht weiter.
Du musst an den Tx Pin welcher auch zum USB Wandler geht.

Durchaus.

Brauchst doch nicht.
RX/TX ist rausgeführt.
Dort abnehmen was kommt.
IMHO

Den Loggern traue ich nur soweit, wie ich sie werfen kann.
16MHz bei 3,3V das ist außerhalb der Spezifikation.

Dann logomatic - ich habe vor Jahren mal einen von Sparkfun(?) in der Hand gehabt, der soll nach damaliger Auskunft einwandfrei gemacht haben, was verlangt war.
Da war mein Einstieg in den Arduino.... Ich hab grad versucht son Ding zu finden, aber 55 Euro oder/und nicht verfügbar scheint mir doch irgendwie nicht passend.

Ich denke, das die openLog ggfls. auch so geflasht werden können, das die bei 3.3V 8Mhz machen.
Und ja, da muss dann vermutlich 'nachgeholfen' werden.
Danke für den Hinweis!