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


Announcement: there is an English version of this forum on EmbDev.net. Posts you create there will be displayed on Mikrocontroller.net and EmbDev.net.
von DanS S. (dns712)


Angehängte Dateien:

Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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.

: Bearbeitet durch User
von DanS S. (dns712)


Bewertung
0 lesenswert
nicht 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. (stefanus)


Bewertung
0 lesenswert
nicht 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?

: Bearbeitet durch User
von DanS S. (dns712)


Bewertung
0 lesenswert
nicht lesenswert
Hab leider kein Datenlogger.

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

viel dank für Unterstützung

Antwort schreiben

Die Angabe einer E-Mail-Adresse ist freiwillig. Wenn Sie automatisch per E-Mail über Antworten auf Ihren Beitrag informiert werden möchten, melden Sie sich bitte an.

Wichtige Regeln - erst lesen, dann posten!

  • Groß- und Kleinschreibung verwenden
  • Längeren Sourcecode nicht im Text einfügen, sondern als Dateianhang

Formatierung (mehr Informationen...)

  • [c]C-Code[/c]
  • [code]Code in anderen Sprachen, ASCII-Zeichnungen[/code]
  • [math]Formel in LaTeX-Syntax[/math]
  • [[Titel]] - Link zu Artikel
  • Verweis auf anderen Beitrag einfügen: Rechtsklick auf Beitragstitel,
    "Adresse kopieren", und in den Text einfügen




Bild automatisch verkleinern, falls nötig
Bitte das JPG-Format nur für Fotos und Scans verwenden!
Zeichnungen und Screenshots im PNG- oder
GIF-Format hochladen. Siehe Bildformate.
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.

Mit dem Abschicken bestätigst du, die Nutzungsbedingungen anzuerkennen.