Forum: Mikrocontroller und Digitale Elektronik STM32F4/ESP8266 schließt Verbindung nur jede zweite Übertragung


von DanS S. (dns712)


Angehängte Dateien:

Lesenswert?

Hallo zusammen,

ich betreibe einen ESP8266 als Webserver, welcher 4 Relais schaltet.

Funktioniert alles soweit nur aus mir unerklärlichen Gründen wird die 
Verbindung, nur bei jeder zweiten Übertragung an den Browser, 
(unterschiedliche Browser ausprobiert) geschlossen.

Habe vermutet das die bei "AT+CIPSEND=0,888" nicht richtig ist jedoch 
habe ich mehr und weniger Zeichen durch probiert und es ändert nichts an 
dem genannten Problem.

Bin jetzt nicht so sehr mit HTML vertraut, könnte es an dem HTML CODE 
liegen?

Bei jeder Anfrage vom Browser wird folgender Code abgearbeitet:
1
    case ESP_SET_OUTPUT:
2
      USART_puts(USART1, "AT+CIPSEND=0,888\r\n");  
3
      Delay(50);
4
      USART_puts(USART1, "<html>");
5
      USART_puts(USART1, "<!DOCTYPE html><head><meta name=\"viewport\" content=\"width=480\"/></head>");
6
      USART_puts(USART1, "<body>");
7
      USART_puts(USART1, "<h1>Powersteuerung:</h1><form ACTION=\"Gartensteuerung\" method=\"get\">");
8
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"ON1\">Ausgang 1 ON</button>");
9
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"ON2\">Ausgang 2 ON</button>");
10
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"ON3\">Ausgang 3 ON</button>");
11
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"ON4\">Ausgang 4 ON</button>");
12
      USART_puts(USART1, "<br></br>");
13
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"OFF1\">Ausgang 1 OFF</button>");
14
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"OFF2\">Ausgang 2 OFF</button>");
15
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"OFF3\">Ausgang 3 OFF</button>");
16
      USART_puts(USART1, "<button style=\"height:100px;width:100px\" name=\"ACTION\" value=\"OFF4\">Ausgang 4 OFF</button>");
17
      USART_puts(USART1, "</body>");
18
      USART_puts(USART1, "</html>\r\n");
19
      Delay(500);
20
      USART_puts(USART1, "AT+CIPCLOSE=0\r\n");
21
      USART_puts(USART1, "AT+CIPCLOSE=1\r\n");
22
      USART_puts(USART1, "AT+CIPCLOSE=2\r\n");
23
  
24
      Delay(100);
25
      ESP_Status = 0;
26
    break;

: Bearbeitet durch User
von Stefan F. (Gast)


Lesenswert?

Wenn du ihm sagst, dass du 888 Bytes senden willst, dann musst du auch 
genau 888 Bytes senden.

Du solltest besser vorher ermitteln, wie viele Bytes es denn genau sein 
werden.

strlen() wäre dazu zum Beispiel hilfreich.

Außerdem mache Dir mal Gedanken über "Strings im Flash". bei der ob 
gezeigten Programmierweise wird Dir nämlich sonst sehr bald das RAM 
ausgehen. Alle deine Strings liegen permanent im RAM!

Warum schließt du drei Verbindungen, sendest aber nur auf einer?

So wie ich das hier sehe, empfängt dein Webserver Vebindungsanfragen vom 
Web browser und sendet dann HTML Seiten zurück. Du musst dazu schon den 
richtigen Kanal (als Variable) benutzen. Wenn der ESP einer Vebindung 
zum Beispiel die Nummer 4 zuweist, geht bei Dir gar nichts mehr.

von DanS S. (dns712)


Lesenswert?

Das mit der Länge ist mir bewusst, habe auch schon mit der zahl der 
Zeichen variert.

Sollte nur ein Teilnehmen zugreifen sollte dieser im Normalfall Channel 
0 erhalten, dass muss noch genau angepasst werden das ist der erste 
Output.
Aber ich bekomme ja jedes mal die Seite nur sie wird halt nur jede 
zweite übertragung geschlossen.

von Stefan F. (Gast)


Lesenswert?

> Sollte nur ein Teilnehmen zugreifen sollte dieser im Normalfall
> Channel 0 erhalten

Nein, die Kanalnummer hängt vom Glück ab, vor allem, weil jeder Browser 
mehrere Verbindungen gleichzeitig zum Server aufbaut. Selbst wenn deine 
Seite nur aus HTML Text besteht, versucht der Browser ab und zu das Bild 
favicon.ico zu laden.

> nur sie wird halt nur jede zweite übertragung geschlossen.

Woran genau erkennst du das?
Kannst du die Antworten des ESP Moduls protokollieren?

von DanS S. (dns712)


Lesenswert?

Hab leider kein Datenlogger.

Aber ich habe nochmal die Channel einzeln abgefragt, dass hat den Fehler 
behoben.

viel dank für Unterstützung

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.