ESP8266 mit W5500 stürzt immer wieder ab

#7206061
Lesenswert?

Hallo zusammen,

ich verwende einen NodeMCU ESP8266 mit einem AZDelivery W5500 im LAN und 
einen Temperatursensor DS18B20. Der ESP kann sich ins LAN einwählen und 
ich kann auf dem Browser die Daten sehen.
Leider stürzt der ESP nach einiger Zeit (unterschiedlich bis zu 1,5 
Stunden) ab und ist nicht mehr ansprechbar. Auch nach löschen des 
„Refresh“ stürzt er irgendwann ab. Ich habe bereits mehrere W5500 und 
ESPs ausprobiert. Ich habe das Shield auch zur Überprüfung über ein 
externes Netzteil versorgt. Ich habe alles verlötet,… hat aber nichts 
gebracht. Nur ein Reset behebt das Problem und der ESP startet wieder 
bis er irgendwann wieder nicht mehr ansprechbar ist.
Ich habe heute festgestellt, dass der ESP wesentlich länger ansprechbar 
ist, wenn ich die Baudrate von 9600 auf 115200 erhöhe.
Ich möchte anmerken, dass ich kein Programmierprofi bin und bitte euch 
um Nachsicht 😊, wenn ich irgendeinen Blödsinn in den Code eingetragen 
habe.

Gruß
Stefan
1
#include <SPI.h>
2
#include <Ethernet.h>
3
#include <OneWire.h>
4
#include <DallasTemperature.h>
5

6
// Der PIN D2 (GPIO 4) wird als BUS-Pin verwendet
7
#define ONE_WIRE_BUS 4
8

9
OneWire oneWire(ONE_WIRE_BUS);
10
DallasTemperature DS18B20(&oneWire);
11

12

13
// Enter a MAC address and IP address for your controller below.
14
// The IP address will be dependent on your local network:
15
#if defined(WIZ550io_WITH_MACADDRESS) // Use assigned MAC address of WIZ550io
16
;
17
#else
18
byte mac[] = {0x02, 0xF0, 0x0D, 0xBE, 0xEF, 0x01};
19
#endif  
20
IPAddress ip(10,0,1,29);
21

22
// Initialize the Ethernet server library
23
// with the IP address and port you want to use 
24
// (port 80 is default for HTTP):
25
EthernetServer server(80);
26

27
void setup() {
28
 // Open serial communications and wait for port to open:
29
  Serial.begin(115200);
30
   while (!Serial) {
31
    ; // wait for serial port to connect. Needed for Leonardo only
32
  }
33

34

35
  // start the Ethernet connection and the server:
36
#if defined(WIZ550io_WITH_MACADDRESS)
37
  Ethernet.begin(ip);
38
#else
39
  Ethernet.begin(mac, ip);
40
#endif  
41
  server.begin();
42
  Serial.print("server is at ");
43
  Serial.println(Ethernet.localIP());
44
  DS18B20.begin();
45

46
}
47

48

49
void loop() {
50
  // listen for incoming clients
51
  EthernetClient client = server.available();
52
  if (client) {
53
    Serial.println("new client");
54
    // an http request ends with a blank line
55
    boolean currentLineIsBlank = true;
56
    while (client.connected()) {
57
      if (client.available()) {
58
        char c = client.read();
59
        Serial.write(c);
60
        // if you've gotten to the end of the line (received a newline
61
        // character) and the line is blank, the http request has ended,
62
        // so you can send a reply
63
        if (c == '\n' && currentLineIsBlank) {
64
          // send a standard http response header
65
          client.println("HTTP/1.1 200 OK");
66
          client.println("Content-Type: text/html");
67
          client.println("Connection: close");  // the connection will be closed after completion of the response
68
          client.println("Refresh: 15");  // refresh the page automatically every 15 sec
69
          client.println();
70
          client.println("<!DOCTYPE HTML>");
71
          client.println("<html>");
72
          DS18B20.requestTemperatures();
73
          float tempC1 = DS18B20.getTempCByIndex(0);
74
          
75
          // Ausgabe am Bildschirm des Client
76
           
77
           client.print("Die Temperatur 1 betr&#228;gt: ");
78
           client.print(tempC1);
79
           client.println(" &#186;C");
80
                      
81
           //-------------   
82
           
83
           client.println("</html>");
84
          break;
85
        }
86
        if (c == '\n') {
87
          // you're starting a new line
88
          currentLineIsBlank = true;
89
        } 
90
        else if (c != '\r') {
91
          // you've gotten a character on the current line
92
          currentLineIsBlank = false;
93
        }
94
      }
95
    }
96
    // give the web browser time to receive the data
97
    delay(1);
98
    // close the connection:
99
    client.stop();
100
    Serial.println("client disconnected");
101
  }
102
}
Gast #7206090
Lesenswert?

Stefan schrieb:
> Ich möchte anmerken, dass ich kein Programmierprofi bin

Ich möchte anmerken, dass du vermutlich auch kein Hardware-
profi bist. An Versorgung und Aufbau solcher Schaltungen
sind schon viele gescheitert.

Also ohne detailliert zu zeigen wie du verschaltet, aufgebaut
und versorgt hast wird man dir hier nicht weiterhelfen können.

Stefan schrieb:
> mit einem AZDelivery W5500

Was soll das genau sein? Es gibt mindestens zwei AZDelivery
Module wo ein W5500 drauf ist.
#7206153
Lesenswert?

OMG schrieb:
> Stefan schrieb:
>> Ich möchte anmerken, dass ich kein Programmierprofi bin
>
> Ich möchte anmerken, dass du vermutlich auch kein Hardware-
> profi bist. An Versorgung und Aufbau solcher Schaltungen
> sind schon viele gescheitert.
>
> Also ohne detailliert zu zeigen wie du verschaltet, aufgebaut
> und versorgt hast wird man dir hier nicht weiterhelfen können.
>
> Stefan schrieb:
>> mit einem AZDelivery W5500
>
> Was soll das genau sein? Es gibt mindestens zwei AZDelivery
> Module wo ein W5500 drauf ist.

Ich habe vor 30 Jahren einen Abschluss in Elektronik gemacht und kann 
gerne auf deine Bemerkungen verzichten. Wenn du mir nicht helfen willst, 
lass es einfach, aber werde hier nicht persönlich bitte.
PS: laut AZDelivery-Seite gibt es einen W5500 
https://www.az-delivery.de/products/w5500-ethernet-netzwerk-internet-modul-fuer-arduino
#7206157
Lesenswert?

Alt G. schrieb:
> Stefan schrieb:
>> AZDelivery W5500
>
> Ist das wider mal ein versuch dieser bude gratiswerbung zu machen?
> Nicht das erste mal! Deshalb kauf ich dort nie was.
>
> Warum braucht ein esp8266 einen kabel ethernet controller?
> Doppelt gemoppelt hält besser oder was?
>
> Mach das über WiFi dann geht das auch.

Warum wird man hier in diesem Forum beim ersten Versuch um Hilfe zu 
bitten so angefeindet.
Es soll ja nicht dein Problem sein, warum ich das gerne realisieren 
möchte, oder? Ich werde schon meine Gründe haben, sonst hätte ich nicht 
gefragt.

Unfassbar, was hier für ein Ton herrscht.
#7206247
Lesenswert?

Stefan schrieb:
>> Mach das über WiFi dann geht das auch.
>
> Warum wird man hier in diesem Forum beim ersten Versuch um Hilfe zu
> bitten so angefeindet.

Das ist keine Anfeindung, sondern ein durchaus sinnvoller Ratschlag.

Warum man zum simplen Auslesen eines Temperaturfühler neben der ohnehin 
vorhandenen WLAN-Schnittstelle eine Kabel-gebundene braucht, erschließt 
sich wohl kaum jemanden ausser dir.

Selbst "wenn" wegen WLAN-Problemen mal ein Report verloren geht, ist das 
kein Beinbruch. Der ESP reconnected sich irgendwann wieder.

Und btw.: OMGs Beitrag ist auch nicht unbegründet.

Viele (auch welche, die das mal gelernt haben) scheitern an der doch 
recht anspruchsvollen Stromversorgung bei einem ESP8266.

"Unerklärliche Abstürze" sind dann meist die Folge...
Gast #7206306
Lesenswert?

Harry L. schrieb:
> Viele (auch welche, die das mal gelernt haben) scheitern an der doch
> recht anspruchsvollen Stromversorgung bei einem ESP8266.

Dagegen ist leider kein Kraut gewachsen (klingt ein bisschen
nach Beratungsresistenz):

Stefan schrieb:
> Ich habe vor 30 Jahren einen Abschluss in Elektronik gemacht und kann
> gerne auf deine Bemerkungen verzichten.
Gast #7206400
Lesenswert?

Stürzt das Teil auch ab, wenn ein total anderes Programm darauf läuft? 
Irgendetwas harmloses, ohne Serial und Ethernet?
Oder ist wirklich exakt das Programm Schuld an den Abstürzen?

Ich hatte auch mal eine CPU, die zuverlässig nach 15 Minuten abgestürzt 
ist.
Auch ein paar Raspis hatten ein ähnliches Problem. Nachdem ich einen 
Kühlkörper darauf montiert hatte, laufen die Geräte nun jahrelang.
#7206409
Lesenswert?

Harry L. schrieb:

>
> Warum man zum simplen Auslesen eines Temperaturfühler neben der ohnehin
> vorhandenen WLAN-Schnittstelle eine Kabel-gebundene braucht, erschließt
> sich wohl kaum jemanden ausser dir.
>

... wenn man in einem Poolschacht im Boden mit Betonwänden kein Wlan 
hat, nicht extra dafür einen AP hinstellen möchte und es zufällig für 
die Steuerung der Anlage bereits ein LAN-Kabel gibt.
Sollte aber für die gestellte Frage auch unerheblich sein, da ich mir im 
Vorfeld natürlich auch Gedanken gemacht habe.
#7206414
Lesenswert?

PittyJ schrieb:
> Stürzt das Teil auch ab, wenn ein total anderes Programm darauf läuft?
> Irgendetwas harmloses, ohne Serial und Ethernet?
> Oder ist wirklich exakt das Programm Schuld an den Abstürzen?
>
> Ich hatte auch mal eine CPU, die zuverlässig nach 15 Minuten abgestürzt
> ist.
> Auch ein paar Raspis hatten ein ähnliches Problem. Nachdem ich einen
> Kühlkörper darauf montiert hatte, laufen die Geräte nun jahrelang.

Die ESP, die ich getestet habe, haben mit anderen Programmen und ohne 
W5500 problemlos funktioniert. Die Wärmeentwicklung schließe ich aus, da 
sowohl der ESP als auch der W5500 nur warm sind. Ich denke, dass Michael 
das Problem behoben hat. Es dürfte definitiv am Code liegen.
#7206417
Lesenswert?

Stefan schrieb:
> dein Rat dürfte funktionieren. Das Teil läuft jetzt seit ca 22:00 Uhr
> ohne Absturz. Dürft ich dich Fragen, wieso Serial.write(c); dieses
> Problem verursacht?

Wenn Daten per Ethernet schneller reinkommen als du sie per serieller 
Schnittstelle ausgeben kannst, dann ist irgendwann der Sendepuffer voll. 
Entweder Serial.write() blockiert bis der Puffer wieder geleert ist, 
dann hättest du eine lange Wartezeit in der Schleife, was zu einem 
Timeout führen kann.

Oder die zu sendenden Daten werden verworfen.

Zum Debuggen sind solche Konstrukte hilfreich, aber im Betrieb können 
sie eben Probleme machen.

  Michael
#7206418
Lesenswert?

Michael D. schrieb:
> Harry L. schrieb:
>
>> Viele (auch welche, die das mal gelernt haben) scheitern an der doch
>> recht anspruchsvollen Stromversorgung bei einem ESP8266.
>
> Die meisten davon haben Probleme, weil das WLAN senden so viel Strom
> benötigt und die Peaks im Strom sehr steil sind. Die Frage ist, wie viel
> Strom das Ethernet benötigt.
>
>   Michael

dann dürfte das Shield bereits intern Probleme mit dem hohen Strom 
haben, da ich den W5500 mit einem separaten und leistungsfähigen 
Netzteil mit 5V betrieben habe.
#7206420
Lesenswert?

Michael D. schrieb:
> Stefan schrieb:
>> dein Rat dürfte funktionieren. Das Teil läuft jetzt seit ca 22:00 Uhr
>> ohne Absturz. Dürft ich dich Fragen, wieso Serial.write(c); dieses
>> Problem verursacht?
>
> Wenn Daten per Ethernet schneller reinkommen als du sie per serieller
> Schnittstelle ausgeben kannst, dann ist irgendwann der Sendepuffer voll.
> Entweder Serial.write() blockiert bis der Puffer wieder geleert ist,
> dann hättest du eine lange Wartezeit in der Schleife, was zu einem
> Timeout führen kann.
>
> Oder die zu sendenden Daten werden verworfen.
>
> Zum Debuggen sind solche Konstrukte hilfreich, aber im Betrieb können
> sie eben Probleme machen.
>
>   Michael

Super, vielen Dank für deine Hilfe!
Gruß
Stefan
#7206424
Lesenswert?

Michael D. schrieb:
> Entweder Serial.write() blockiert bis der Puffer wieder geleert ist,

Auszug aus der Doku von 
https://www.arduino.cc/reference/en/language/functions/communication/serial/write/
1
Notes and Warnings
2

3
As of Arduino IDE 1.0, serial transmission is asynchronous. If there is enough empty space in the transmit buffer, Serial.write() will return before any characters are transmitted over serial. If the transmit buffer is full then Serial.write() will block until there is enough space in the buffer. To avoid blocking calls to Serial.write(), you can first check the amount of free space in the transmit buffer using availableForWrite().

Serial.write() blockiert also tatsächlich. Daher hängt es auch von der 
Baudrate ab, wie oft/schnell das Problem auftritt.

Flowcontrol ist ein lustiges Problem und nicht einfach zu lösen, da dies 
viel mit Pufferhandling und Timeouts zu tun hat.

  Michael
Gast #7206727
Lesenswert?

ich denke das Serial.write ist vielleicht nicht direkt das problem..

Die Ursache ist der loop an sich, das Serial.Write bei der eingestellten 
Baudrate nicht die Daten los wird. Aber woher kommen die Daten und wieso 
sind das soviele ;)

Ich halte den Loop auf den ersten Blick in der umsetzung für unsinnig.
Gast #7206746
Lesenswert?

Stefan schrieb:
> Warum wird man hier in diesem Forum beim ersten Versuch um Hilfe zu
> bitten so angefeindet.

Weil die Leute gereizt sind.

Mietwucher, (zu viel) Einwanderung, Fachkräftemangel, Corona, 
Chipmangel, Krieg, Energiekriese, Inflation, kein Klopapier, ...

In meinem Leben gab es noch nie so viele Sorgen gleichzeitig.
Gast #7206820
Lesenswert?

Stimmt! Deshalb lese ich hier auch nur noch und verkneife mir zu fragen 
oder zu antworten. Man wird eh immer von Leuten die alles besser wissen 
niedergemacht.
Der Umgangston ist in den letzten Jahren immer schlimmer geworden.
Warum Leute die nix Gescheites beitragen trotzdem ihre dummen Sprüche 
ablassen verstehe ich nicht.
Wenn man nix beitragen kann oder will dann sollte man auch nichts 
schreiben! Voll zum Kotzen.
Gast #7208168
Lesenswert?

Es ist wichtig, den entsprechenden Aggressoren sofort eine 
reinzusemmeln.
Woran erkennt man einen Aggressor? Daran, daß er beispielsweise mit 
unbelegten Unterstellungen(*) arbeitet - wie im Fall hier bezüglich 
einer Fa., die der Aggressor offensichtlich nicht wertschätzt und dem 
Threaderöffner mit seiner eigenen Problematik überhilft.
Solche aggressiv auftretenden Leute finden man inzwischen zuhauf in 
Foren und Firmen, weil sie (leider zu oft) mit den Zauderern und den 
Vorsichtigen leichtes Spiel haben.

Deshalb: Gleich eine reinsemmeln, dass das virtuelle Blut spritzt, wozu 
es notwendig ist, die (*)Manipulation zu erkennen und knackig auf den 
Punkt zu bringen. Dann hat man früher seine Ruhe und kann sich seiner 
Arbeit statt den Schwachmaten dieser Welt widmen.
Gast #7208762
Lesenswert?

Da muß man aber ganz schön blöde sein, um so zu argumentieren. Bist Du 
einer von denen, die den Ton hier schätzen? Dann bist Du eben blöde, wie 
eingangs vermutet. Wahrscheinlich mangelt es auch an Sozialkompetenz.

Du erkennst wahrscheinlich gar nicht den Verlauf in diesem Thread. Das 
macht ja nichts, aber oft ist es dann besser, sich nicht zu äußern. Es 
sei denn, man ist blöde so wie Du, dann rafft man auch das nicht.
Gast #7208787
Lesenswert?

Semmel schrieb:
> ist Du einer von denen, die den Ton hier schätzen?

Deinen Ton schätze ich jedenfalls eben so wenig wie deine mangelhafte 
Sozialkompetenz die du gerade zur schau gestellt hast.

Es gibt Leute, die können ihr eigenes Verhalten bei anderen nicht 
ertragen.
Beitrag #7208800 wurde von einem Moderator gelöscht.
Gast #7208855
Lesenswert?

Stefan schrieb:
> Schade, dass das hier so ist.
Das wird auch hier so bleiben.

Es ist nicht so häufig, dass jemand mit einem Einzeiler
>kommentiere diese Zeile mal aus.
das Problem lösen kann, aber es passiert. Und daran erkennt man auch, 
dass das ganze Geseier von denen, über deren Ton Du Dich zurecht 
beschwerst, völlig überflüssig war. Meins natürlich auch.

Da das Problem gelöst ist, eine Rückfrage: Was ungefähr ist der Grund, 
weshalb Du Ethernet an einen WiFi-Controller dranbastelst? Hast Du mit 
dem ESP angefangen und kennst nur diesen Prozessor, um den W5500 
anzutreiben?
#7208904
Lesenswert?

Semmel schrieb:

> Da das Problem gelöst ist, eine Rückfrage: Was ungefähr ist der Grund,
> weshalb Du Ethernet an einen WiFi-Controller dranbastelst? Hast Du mit
> dem ESP angefangen und kennst nur diesen Prozessor, um den W5500
> anzutreiben?

Ich habe sonst immer mit dem RaspPi gearbeitet. Der ist aber entweder 
nicht lieferbar oder viel zu teuer. Ich habe dann mit dem ESP einige 
Versuche gestartet und da ich in einem Poolschacht im Boden mit 
Betonwänden kein Wlan
habe, nicht extra dafür einen AP hinstellen möchte und es zufällig für
die Steuerung der Anlage bereits ein LAN-Kabel gibt, wollte ich dies mit 
einem ESP + W5500 realisieren. Die Herausforderung hat mich halt 
gereizt... Wie oben schon geschrieben, bin ich kein Profi, sondern habe 
vor vielen Jahren einen Abschluss in Elektronik gemacht (damals gab es 
noch den Apple IIe und Assembler) und bin dann in eine ganz andere 
Richtung gegangen. Elektronik ist nur mehr ein Hobby. Ich bastle nur für 
einige Projekte rund ums Haus ;-)
Gast #7208915
Lesenswert?

Stefan schrieb:
> wollte ich dies mit einem ESP + W5500 realisieren.

Ein einfacher Arduino Uno, Nano oder Micro hätte es auch getan.
Wesentlich anspruchsloser im Leistungsverbrauch. Und keiner
hätte sich ob der skurrilen Kombination gewundert.

Arduino gibt es auch mit integriertem W5500.

siehe https://www.ebay.de/itm/353174184847

War allerdings früher schon mal weniger als halb so teuer.
#7208953
Lesenswert?

OMG schrieb:
> Ein einfacher Arduino Uno, Nano oder Micro hätte es auch getan.

Da kannst du aber nicht einfach einen http client dranhängen. 
Vielleicht geht es mit viel Krücken, aber die RAM Größe der kleinen AVRs 
mit 1 bis 2kB ist einfach zu klein, schließlich kann alleine ein 
einziges Ethernet Paket bis zu 1500 Byte groß sein.

Der ESP hat hat viel mehr Ressourcen und einen TCP/IP Stack und http. 
Damit kann man standard Web-Clients verwenden (sogar einen Browser oder 
wget/curl) und ist nicht auf spezifische ressourcenschonende Protokolle 
angewiesen. Sogar Verschlüsselung über https ist möglich.

  Michael
Gast #7208967
Lesenswert?

Michael D. schrieb:
> schließlich kann alleine ein
> einziges Ethernet Paket bis zu 1500 Byte groß sein.

Offensichtlich hast du das was der TO erreichen will nicht
verstanden. Oder du kennst den W5500 nicht, dann kannst du
nicht mitreden. Ein riesiges RAM ist in seiner Anwendung
nicht erforderlich.

Ein Arduino mit W5500 reicht in diesem Zusammenhang
tatsächlich aus.
#7208970
Lesenswert?

OMG schrieb:
> Offensichtlich hast du das was der TO erreichen will nicht
> verstanden. Oder du kennst den W5500 nicht,

Stimmt den kannte ich tatsächlich nicht, ich dachte das sei einfach ein 
Ethernet Interface aber tatsächlich ist das ja quasi dasselbe wie ein 
ESP nur mit Ethernet anstatt WLAN.

D.h. man verwendet einen winzigen Microcontroller um einen größeren zu 
steuern. Da ist mir der ESP doch lieber, da spart man sich den kleinen 
Microcontroller und gewinnt Flexibilität.

  Michae

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