Forum: Mikrocontroller und Digitale Elektronik ESPAsyncWebServer und Serial.readString


von Loretta Wahn (Gast)


Lesenswert?

Hi,

es sieht so aus, als könnte ich innerhalb eines Request Handlers der 
ESPAsyncWebServer Lib kein Serial.readString() o.ä. verwenden, weil 
diese Funktionen yield verwenden, yield und delay sind nicht erlaubt. 
Der Esp8266 kriegt einen Panic und startet neu.

Ich möchte Daten, die ich im Request Handler per UART von einer 
Peripherie einlese, als JSON response über HTTP herausgeben. Die Daten 
muss ich komplett einlesen und dafür sollte es einen Timeout geben. Kann 
ich nicht einfach den Code von Serial.readString() wiederverwenden, aber 
ohne den yield call? Ich verstehe es so, dass yield dazu da ist, damit 
meine Funktion den Scheduler nicht unnötig blockiert. Kann aber nicht 
einschätzen, was es heißen würde, wenn ich das weglasse? Es geht um 
keine allzugroßen Datenmengen (< 255 Bytes) und ich kann den Timeout 
vermutlich ziemlich kurz halten.

Hat jemand Ideen oder vielleicht sogar Codebeispiele, wo sowas gelöst 
wurde?

von J. S. (jojos)


Lesenswert?

Mit Websockets bekommt man das komplett asynchron hin, da kann man dann 
auch binäre Daten schicken.

von Loretta Wahn (Gast)


Lesenswert?

Naja, ich habe die Funktion jetzt mehr oder weniger kopiert und das 
yield weggelassen. Funktioniert. Bisher keine offensichtlichen Probleme.

von J. S. (jojos)


Lesenswert?

mit dem beginResponseStream() / ... / send() müsste das auch gehen, ist 
vielleicht etwas sauberer. Dann ist man auch nicht im callback und yield 
müsste erlaubt sein.
https://github.com/me-no-dev/ESPAsyncWebServer#print-to-response
Bin kein http Experte, aber mit http 1.1 hält der Server den Socket doch 
eine Zeit lang offen?

von Loretta Wahn (Gast)


Lesenswert?

J. S. schrieb:
> mit dem beginResponseStream() / ... / send() müsste das auch gehen, ist
> vielleicht etwas sauberer. Dann ist man auch nicht im callback und yield
> müsste erlaubt sein.
> https://github.com/me-no-dev/ESPAsyncWebServer#print-to-response
> Bin kein http Experte, aber mit http 1.1 hält der Server den Socket doch
> eine Zeit lang offen?

ich hatte da verstanden, dass man schon innerhalb des callbacks ist. 
Dass diese Beispiele den umgebenden callback-body einfach weglassen. Ich 
meine, dieses request-Objekt muss doch irgendwo herkommen, also aus den 
Argumenten des Callbacks. Vielleicht versteh ich das aber auch komplett 
falsch. Müsste mal den Code dahinter studieren.

Ich fand auch diesen Stream processor interessant. Aber der braucht eine 
size-Angabe vorab, was wiederum ungünstig ist: 
https://github.com/me-no-dev/ESPAsyncWebServer#respond-with-content-coming-from-a-stream-containing-templates

Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.