Datenaustausch ESP 8266

Hallo,

ich habe ein etwas umfangreicheres Projekt, bei dem ich eine LED Lampensteuerung neben einer lokalen Steuerung über Display und Keypad auch über WLAN steuern möchte.

Soweit funktioniert alles einwandfrei.

Jedoch wenn ich im Stresstest massiv Daten über WLAN an den ESP8266 sende, kommt es nach einer gewissen Zeit zu korrupten Speicherbereichen.

Empfangene Daten werden in einem 256 Byte Char Array abgespeichert und Sequenziell abgearbeitet.
Wenn einzelne Sequenzen abgearbeitet wurden, verschiebe ich anschließend mittels memmove den noch verbleibenden Buffer an den Anfang des Arrays und fülle den verbleibenden Bereich mit neuen Daten.

Der Buffer ist eigentlich nie voll und die Routine:

  if( (uint16_t) this->chrRxPtr > (uint16_t) &this->charBuffer ) {
    uint8_t intBufSize = (uint16_t) this->chrRxPtr - (uint16_t) &this->charBuffer ;   
    memmove(&this->charBuffer, this->chrRxPtr, WIFI_RX_BUFFER_SIZE - intBufSize); 
    this->charBuffer[WIFI_RX_BUFFER_SIZE - intBufSize] = 0;
    this->intRxPos = this->intRxPos - intBufSize;
    this->chrRxPtr = this->charBuffer; 
  }

arbeitet auch für eine gewisse Zeit einwandfrei.
Anschließend kommt es dann allerdings vor, dass andere Variablen im Speicher beschädigt werden.

Das ganze passiert auch erst wenn, wenn ich mehr als 2000 Sequenzen (ca. 10-14 Byte) pro Minute an den Arduino über WLAN an den Arduino sende.

Kann es sein, dass der Atmega nicht mehr mitkommt ? Oder durch das permanente verschieben der Speicherbereiche ein Problem entsteht ?

Ich habe jetzt schon tagelang alle möglichen Funktionen deaktiviert und den Stresstet laufen lassen.
Eigentlich aber immer mit dem selben Ergebnis.

Gruß

Lufi

Hi,

ich bin auch am Thema ESP8266 dran. Bei mir kommt es unter UDP-Senden ab und zu mal vor, daß ich
kein Ping mehr absetzen kann und sich bei mir der Arduino (von mir so gewollt) neustartet, wenn die serielle Schnittstelle für den ESP nicht mehr verfügbar ist.

Ich kann den Fehler auch nicht nachstellen, mal passiert nichts eine halbe Stunde lang, manchmal
alle 2-3 Minuten. Habe noch nicht rausbekommen, warum !

TCP ist mir zu frickelig, da nehm ich später lieber den CC3000.

Wie und in welche Richtung sendest Du die Daten, suche noch nach einer Möglichkeit, über UDP Daten zu mit dem Modul zu empfangen.

Ich sende in beiden Richtungen, eine Clientsoftware kann die Konfiguration des Arduino auslesen und Kommandos an den ihn senden.

Dann ist der Arduino mit dem ESP der "Server" . Machst Du das per TCP ?

Ja, TCP.

Die 3 grundlegenden Leitsätze der Programmierer:

a) Ein Programm macht nicht was du willst, sondern das was programmiert wurde.
b) Die Abwesenheit von Fehlern ist nicht nachweisbar.
c) isso ...

... will sagen: Bei komplexen Projekten gibts eigentlich so viele Fehlemöglichkeiten, dass es kaum möglich ist, da komplett durchzuehen. Noch dazu, wenn Andere bzw. Fremde mitspielen ...

Klugscheiss: Hättest den Stresstest machen sollen, bevor dein Programm den heutigen Umfang hat! :o

Ohne jetzt dein Programm gesehen zu haben, hört sich das für mich an nach:

  1. Bufferoverflow von irgeneinem Array
  2. nicht ausgereifte AT-Firmware auf dem ESP8266
  3. Probleme mit Softserial, falls benutzt? Baudrate schneller als 9600?
  4. Was passiert, wenn du das mit UDP machst?

@qualidat
Nicht wirklich hilfreich .....

@ElEspanol
Ich habe die Arrays stück für stück ausgeschlossen, indem ich die betreffenden Bereiche umgeschrieben habe (ohne arrays).
Die Firmware ist die aktuell verfügbare Original.
Baudrate über Hardware Serial ist 57600
UDP könnte ich noch versuchen. Allerdings finde ich Protokolle ohne Fehlerkontrolle unschön. :wink:

Hinweis zu UDP :

Ich habe manchmal den Effekt, daß sich das Modul bei UDP-Senden schlafen legt.
Serielle Schnittstelle3 (Mega) ist dann nicht mehr verfügbar.

Kann den Fehler auch nicht nachstellen.

@Murumba
Die Spannung kommt aus dem Arduino 3.3v
RX TX sind direkt an Seriell1

Rx/Tx sind 5V tolerant.

Allerdings müssen die 3,3V Versorgung von extern kommen, wenn das Modul nicht gerade neben dem AP liegt.

Teste doch mal einfach eine andere FW Version

soll ich dir jetzt X Fundstellen aufzählen, wo steht, das die Eingänge 5V tolerant sind? Bei mir schon monatelang so in Betrieb. Bei der Versorgungsspannung habe ich 2 Dioden in Reihe davor.

Die Angaben auf Seite 15 des angeführten Datenblattes interpretiere ich so, dass es ab 5,8 bis 6V Ärger gibt.

eben, Überspannungsschutz. Wieso ist der dann nicht bei 3,8V? Wenn bei 5V das Teil schon übern Jordan ginge, was bringt dann der Schutz bei 5,8V noch.