ESPAsyncWebServer und Serial.readString

Gast #7229562
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?
Gast #7229772
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

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren