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

Hinweis: der ursprüngliche Beitrag ist mehr als 6 Monate alt. Bitte hier nur auf die ursprüngliche Frage antworten, für neue Fragen einen neuen Beitrag erstellen.

Formatierung
  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] – Link zu einem Artikel
  • Verweis auf einen anderen Beitrag: Rechtsklick auf dessen Beitrags-ID (#8078628), „Adresse kopieren“, in den Text einfügen

Mehr zur Formatierung

Längeren Sourcecode als Anhang, nicht in den Text. JPG nur für Fotos und Scans; Zeichnungen und Screenshots als PNG oder GIF. Siehe Bildformate.

Schon registriert? Anmelden

Wird nicht angezeigt. Wir schicken dir einen Link; sobald du damit bestätigst, erscheint dein Beitrag.

Mit dem Abschicken legst du einen kostenlosen Account an und erkennst die Nutzungsbedingungen und die Datenschutzerklärung an.