ESP8266 sendet, Browser interpretiert nicht als Website

Gast #3966855
Lesenswert?

Hallo zusammen,

ich setzte mich gerade mit dem ESP8266 auseinander.
Für Testzwecke habe ich ein VB-Tool, dass über die serielle 
Schnittstelle mit dem ESP kommuniziert

Jetzt soll ein bisschen Interaktion über einen Mini- Webserver laufen.

1. ich bin soweit, dass ich per Browser eine Seitenanforderung sendet 
"192.168.178.14:8080"
2. am ESP8266 kommt ensprechend dies an
1
+IPD,0,302:GET / HTTP/1.1
2
Host: 192.168.178.14:8080
3
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5
Accept-Language: de,en-US;q=0.7,en;q=0.3
6
Accept-Encoding: gzip, deflate
7
Connection: keep-alive
8

9

10
OK
3. jetzt sende ich ein primitive Website
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
2
<html>
3
<head>
4
<p>Hello World</p>
5
</head>
6
<body>
7
<p>this is ESP8266 talking</p>
8
 <hr
9
><p>time: 14.01.2015 18:49:11 </p> 
10
</body>
11
</html>

Die unmittelbare Rückmeldung von ESP8266 (Echo) lautet
1
+IPD,0,302:GET / HTTP/1.1
2
Host: 192.168.178.14:8080
3
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64; rv:34.0) Gecko/20100101 Firefox/34.0
4
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
5
Accept-Language: de,en-US;q=0.7,en;q=0.3
6
Accept-Encoding: gzip, deflate
7
Connection: keep-alive
8

9

10
OK
11
AT+CIPSEND=0,208
12

13
> 
14

15

16

17

18

19

20

21

22

23
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><p>Hello World</p></head><body><p>this is ESP8266 talking</p> <hr><p>time: 14.01.2015 19:15:53 </p> </body></html>
24
SEND OK
25
Unlink

aber anstatt der Webbrowser den HTML Code interpretiert, wird mein 
gesendeter Text in Klarform dargestellt, sprich im Browser erscheint nun
1
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><p>Hello World</p></head><body><p>this is ESP8266 talking</p> <hr><p>time: 14.01.2015 18:49:11 </p> </body></html>

Der primitive HTML Code ist seitens Syntax korrekt, dass habe ich lokal 
geprüft, indem ich ein HTML File erzeugt, die empfangenen Daten 
reinkopiert und dann im Browser aufgerufen habe.

Ich sehe daher mein Fehler/Problem beim Senden.

Kann mir jemand dazu helfen?

Noch ein paar Info zum Init (alle werden positiv bestätigt)
1
AT+RST
2
AT+CIPMUX=1
3
AT+CIPSERVER=1,8080
4
AT+CIPSTO=0
5
AT+CWJAP="xxx","yyy"

Version ist 9.02
 (AT+GMR) : 0018000902-AI03


Gruß
Manu
Gast #3967057
Lesenswert?

Danke für die Hinweise, das macht absolut Sinn :-)

Trotzdem kommt nur folgender Text im Browser an
1
HTTP/1.1 200 OK
2
Content-Type: text/html
3
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN"><html><head><p>Hello World</p></head><body><p>this is ESP8266 talking</p> <hr><p>time: 14.01.2015 21:24:42 </p> </body></html>

(Beim Senden habe ich die \r\n mitgeschickt - wie sensitiv darauf ist 
die Struktur überhaupt?)

Ich habe auch anhand der Routine
1
void HTML_Make_Header()
 unter  http://arduino-hannover.de/2014/12/11/wifi-kochbuch-mit-esp8266/ 
mein Glück versucht, auch hier ohne Erfolg.

Ist hier ein Fehler sichtbar?
KEnnt Ihr eine verständliche Anleitung zwecks Headerstruktur? Ich will 
wirklich nicht zu tief aber tief genug einsteigen und verstehen, was zu 
machen ist. Z.B ist bzw. wann ist ein Content-Length Eintrag nötig...?
Gast #3967081
Lesenswert?

@Holger

danke, es sieht aus als ob es das war. Wider Erwartungen habe ich beim 
Zusammensetzen nicht die richtige Anzahl an \r\n drin gehabt.
Wenn ich das richtig verstehen, muß der Header mit \r\n\r\n 
abgeschlossen werden; nicht zwangsläufig nach dem ok, sondern ggf. nach 
den zusätzlichen Headerangaben?!

Wenn noch jetzt jemand eine Link zu einer guten (und einfachen) 
Headerbeschreibung liefern könnte, wäre mein Tag vollends gerettet.

Danke und Gruß
Manu
Gast #3967273
Lesenswert?

Es gibt einige gute Gründe diesen Header zu senden.

Wenn du die Verbindung offen halten willst, solltest du zwingend den 
Content-length Header mit senden. Wichtigster Grund: Woran soll der 
Browser sonst erkennen, dass die Übertragung von Daten (das HTML) zu 
Ende ist?

Auf Grund der begrenzen Ressourcen deines Arduinos kannst/solltest du 
ganz entspannt auf den Content-length Header verzichten. Dann beende 
aber die Verbindung nach jedem Response.
Persönliche Seite #4015448
Lesenswert?

Ich hab mal im Zusammenhang mit dem header und Content mal eine Frage :
Wo kann ich rausbekommen wieviele Bytes ich per AT+CIPSEND schicken kann 
? Ich hab mir mal den "Spaß" gegönnt ein bitmap von Ca 5kb zu 
verschicken. Der ESP quittierte mit "too long". Wo kann ich nachschauen 
wieviele Byte in einem "rutsch" verschickt werden ? Und meine zweite 
Frage ist ob ich größere Pakete durch mehrere CIPSENDs verschicken kann 
oder ob mir da eine Begrenzung im TCP/IP Protokoll greift die den ESP 
erst so klein macht (Paketrouting usw) ? Sprich wenn ich z.b. 10 kb 
verschicken möchte das ich 10 mal 1k verschicke und mit dem 
Content-length Feld "alles gesagt " ist und es egal ist wieviele 
einzelübertragungen das nachher sind ? Ich befürchte das genau das nicht 
geht.
Gast #4015542
Lesenswert?

Die Grenze wird von der Firmware festgelegt und variiert je nach 
Version. Bei Version 0.91 kannst du maximal 1024 Bytes am Stück senden.

Die meisten Netzwerke erlauben etwa mehr (zum Beispiel 1,4 Kilobytes). 
Ich glaube, es sind maximal 4kB Möglich, wenn alle betroffenen 
Netzwerkkomponenten mitspielen. Aber das ist eher selten.

10kB gehen jedenfalls nicht, egal welche Firmware zu hast.
Gast #4015558
Lesenswert?

Stefan Us schrieb:
> 10kB gehen jedenfalls nicht, egal welche Firmware zu hast.


Wie sieht eine Aufsplittung aus
html die ein bild von 10kb inhalt verlinkt wären dann zwei requests,
wie folgt der zweite request in 1024 Teilen für das Bild?

<html>
<body>
<img src="ich.jpg">
</body>
</html>

Dein Fachrat ist gefragt:
Beitrag "ESP8266 hängt bei gleichzeitigem senden/empfangen"

und würde Manuel 'alias Fritz Huber', besser eindenken lassen.
Mich würde das auch mal interessieren, denke ich mache da einen 
entscheideneden Denkfehler mit Stream Technik in einem Request, besser 
vieleicht mehrere Request machen, aber wie sollte man als Server dem 
Clienten auffordern, einen weiteren Request für ein weiteres Teilpaket 
anzufordern?

lg
Persönliche Seite #4016600
Lesenswert?

Pete ...

Also ist quasi die Länge der HTML Seite die ich anzeigen kann auf einen 
Frame mit Max MTU Bytes (also zw 1400 und 1500 Byte) begrenzt ?
Das ich mehr übertragen kann wenn ich nicht HTML sondern was eigenes 
mache ist klar, aber da kann ich mich dann nicht auf nem Webbrowser 
einkorken.
Also ist eine Website beim esp erstmal auf einen Frame begrenzt, richtig 
?
Gast #4016611
Lesenswert?

Rene B. schrieb:
> Pete ...
>
> Also ist quasi die Länge der HTML Seite die ich anzeigen kann auf einen
> Frame mit Max MTU Bytes (also zw 1400 und 1500 Byte) begrenzt ?
> Das ich mehr übertragen kann wenn ich nicht HTML sondern was eigenes
> mache ist klar, aber da kann ich mich dann nicht auf nem Webbrowser
> einkorken.
> Also ist eine Website beim esp erstmal auf einen Frame begrenzt, richtig
> ?

Nein.

Mache dich kundig. Das richte Forum dazu lautet: http://www.esp8266.com/
Gast #4016730
Lesenswert?

Kablejau schrieb:
>> Also ist eine Website beim esp erstmal auf einen Frame begrenzt, richtig
>> ?
>
> Nein.
>
> Mache dich kundig. Das richte Forum dazu lautet: http://www.esp8266.com/

Wäre ja schön wenn wir alle von deinem Kundtun und der Erfahrung darin 
hier in der Frage mehr erfahren würden, wenn du selber keine Worte hast, 
dann wo du dich kundig gemacht hast und vor allem in welchem Thread 
dort.

quacksalber!

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