Moin,
mit einem Modul /Tenstar Robot W5500/ gibt es Problemchen. Sieht aus wie
auf dem folgenden Bild, ist aber in DE gekauft:
https://www.aliexpress.com/i/32819343794.html
Angesteuert wird er von einem ATmega328p über SPI. Verwendet wird die
Ethernet3-lib. Link, DHCP, HTML usw. funktioniert auch alles, aber in
unregelmäßigen Abständen scheint sich das Modul "aufzuhängen".
Das kann nach 3 Minuten passieren oder nach fünf Tagen, anscheinend
jedoch nicht ohne externe Anfragen.
Die Funktion /client.available()/ liefert einfach kein TRUE mehr bei
Anfragen, die Led für Netzwerkaktivität leuchtet jedoch.
Nach einem Reset des Boards läuft dann wieder alles.
Könnte es sein, daß irgendwelcher Netzwerkverkehr zu einer Überlastung
des W5500 führt?
Die WIZnet-Module funktionieren durch die Bank weg nach meiner Erfahrung
problemlos!
Viel wichtiger ist es mit dem Konfigtool TCP-keepalive im
COM-Port-Treiber und auch im WIZnet-Modul einzuschalten. Somit werden
unterbrochene Netzwerkverbindungen erkannt und das WIZnet-Modul gibt den
Socket wieder frei.
Macht man das nicht, nimmt das WIZnet-Modul keine neue Verbindung an.
Ein ICMP-Ping funktioniert allerdings weiterhin.
Viele Grüße!
Sven
Danke, das werde ich mir morgen ansehen.
Offenbar scheint meine LIB da keine Funktion vorzusehen, dann werde ich
das wohl von Hand nachimplementieren müssen.
Viele Grüße
Nach vielen weiteren Tests scheint es nun so zu sein, daß ich das Modul
tatsächlich neu initalisieren muß, da offenbar sogar die IP verloren
geht.
Das kann ich mir nicht wirklich erklären.
Wenn jedoch die Abfragen weit genug zeitlich auseinander liegen, dann
kann zwischendurch das Modul immer wieder neu initialisiert werden.
Nicht schön, aber eine QnD-Lösung.
Ich nehme mal an es geht um Arduino, oder?
Das von dir genannte Modul habe ich mit der Ethernet-Lib am von dir
genannten Controller problemlos zum Laufen gebracht. Auch am ESP32.
Beispiel:
https://github.com/arduino-libraries/Ethernet/blob/master/examples/WebClient/WebClient.ino
Angebunden wird das ja via SPI. Man muss halt bei der Initialisierung
drauf achten, dass man den passenden CS-Pin konfiguriert.
Ja, ist ein Arduino.
Mit der Arduino-LIB hatte ich das Arduino Ethernet2 Shield zum laufen
gebracht.
Das genannte Modul arbeitete damit jedoch sehr langsam. Deshalb bin ich
auf diese Lib umgestiegen:
https://github.com/sstaub/Ethernet3
Damit läuft das Modul auch, aber hat halt ganz gelegentlich Aussetzer.
Der Arduino läuft als Webserver und wird von einem Webbrowser (derzeit
noch Mozilla) abgefragt. Die Abfrage initiert das Auslesen von Daten,
die dann als HTML-Seite dargestellt werden. Ein PC soll die Daten später
loggen.
Mittlerweile vermute ich, daß evtl. der Client Schuld ist. Wenn ich nach
jedem Auslesen ein Hardwarereset des Modules durchführe, dann geht es.
Bei dieser Lösung hätte ich aber Bedenken wie lange das Modul/Chip das
mitmachen, wenn jede Minute neu initialisiert wird. Außerdem dauert das
etwa 30 Sekunden bis der Webserver wieder betriebsbereit ist.
Wenn ich ein Softwarereset durchführe (Ethernet.softreset()), dann
scheint es auch zu funktionieren. Zwar steigt ab und an der Browser auch
aus, aber mit Klick auf "Wiederholen" holt er dann die Seite, d.h. das
Modul arbeitet weiter.
An der von dir genannten Lib finde ich auf jeden Fall gut, dass man den
PHY konfigurieren kann. Reduziert man die Geschwindigkeit von 100 auf 10
MBps, hat man schon deutlich weniger Stromverbrauch. Schaltet man die
Netzwerkverbindung komplett ab, ist es nochmal weniger. Mir ging das
allerdings nicht weit genug und habs final dann so gemacht, dass das
komplette Modul über einen MosFET spannungslos gemacht wird und mein uC
auch Heia macht. Nach 5min wacht der uC wieder auf und der MosFET
schaltet auch das Ethernet-Board wieder ein. Aber das jetzt nur als
Randnotiz.
Was ich an deiner Stelle mal zum Datentransport mir anschauen würde ist
MQTT (https://github.com/knolleary/pubsubclient). Ich lese in meinem
Projekt (neben der Steuerung der Gartenbewässerung) verschiedene
Sensoren aus und das Ganze übertrage ich dann per MQTT. Der zugehörige
Dienst (Broker) läuft auf einem Raspberry Pi. Falls du MQTT nicht
kennst: Man überträgt dort Werte in sog. Topics. Kannst dir wie einen
String-Container vorstellen. In ein solches Topic können Teilnehmer
reinschreiben oder auch nur lesen. Der Broker notifiziert die
Teilnehmer, wenn ein neuer Wert eingetroffen ist. Bei mir ist openHAB2,
welches ebenfalls auf dem Raspi läuft, ein Teilnehmer und kümmert sich
um die PErsistierung in einer mySQL-DB. Die Visualisierung mache ich mit
Grafana. Bei der Gartenbewässerung ist es ein Stück weit umgekehrt: Da
schreibt openHAB in ein Topic rein und der uC empfängt den Befehl.
Die Notifizierung der Teilnehmer erfolgt auf jeden Fall innerhalb von
Millisekunden und es gibt auch Mechanismen dafür, wenn Teilnehmer mal
nicht erreichbar sind. Ich finde MQTT auf jeden Fall grandios.
Das MQTT klingt interessant, das versuche ich mir zu merken.
Aber in diesem Projekt ist es wohl keine Option, denn ich möchte, daß
die Werteausgabe des µC auch mit einem "stinknormalen" PC ohne
zusätzliche Software gelesen werden kann, da eignet sich HTML eben sehr
gut.
Das Datenlogging können dann ein paar Zeilen Code auf einem Computer
übernehmen.
Mit dem Aufruf von Ethernet.softreset() nach dem Ende jeder
Datenübertragung scheint das Problem gelöst zu sein. Der dauert auch nur
1 Sekunde.
Ich vermute folgendes Problem: der Client baut die Verbindung nicht
100% ab oder schickt irgendwelche kruden Daten und daher "hängt" das
Socket irgendwie. Der Reset initialisiert das Modul wieder neu.
Könnte man natürlich per Netzpaketanalyse herausfinden, aber das ist mir
derzeit viel zu zeitaufwendig.
Die Netzwerkschnittstelle verbraucht ordentlich Strom, so bis zu 140mA
im Betrieb, so daß der 7805 wohl noch einen Kühlkörper spendiert
bekommt. Bei 10 Mbit soll sich der Strimbedarf etwa halbieren und im
"Powerdown" bei etwa 5mA liegen - habe ich aber (noch) nicht
nachgemessen.
Da der µC jedoch per Netzteil versorgt wird, spielt der Energiebedarf
keine Rolle.
Mein ursprünglicher Ansatz für ein anderes Projekt war mal, dass ich den
328P schlafen lege und das Eth-Modul ihn bei Bedarf wieder aufweckt. Bis
ich mir dann mal den Strombedarf des uC und den das EthBoards angeschaut
habe :-) Ich habe in nem anderen Forum mal nen längeren Text dazu
geschrieben:
https://www.arduinoforum.de/arduino-Thread-ESP32-Ethernet?pid=56653#pid56653
Ich weiß nicht mehr genau, wie hoch der Strombedarf vom EthBoard war,
wenn man es auf Powerdown gesetzt hatte. Ich fand es auf jeden Fall
vergleichsweise viel und hab es dann per Mosfet "richtig" gemacht.
Betreibst Du den Arduino mit 5V und den W5500 mit angepasstem Pegel?
Falls nicht, dann geht das Modul kurz über lang über den Jordan. Ist mir
nicht nur 1x passiert (auch mit dem W5200).
Uwe D. schrieb:> Betreibst Du den Arduino mit 5V und den W5500 mit angepasstem Pegel?> Falls nicht, dann geht das Modul kurz über lang über den Jordan. Ist mir> nicht nur 1x passiert (auch mit dem W5200).
OMG!
Was muss ich da schon wieder für einen Käse lesen?
Tausende von (5V-) Arduinos auf der ganzen Welt funktionieren mit
einem W5100 oder W5500.
> Die WIZnet-Module funktionieren durch die Bank weg nach meiner Erfahrung> problemlos!
Die Erfahrung kann ich nicht teilen: Ich wollte den 5500 mal als MAC/PHY
verwenden, aber Datenframes mit einem bestimmten Muster kamen
korrumpiert an. Eine entsprechende Meldung beim Hersteller wurde
anscheinend nicht ernst genommen.
J. W. schrieb:> Eine entsprechende Meldung beim Hersteller wurde> anscheinend nicht ernst genommen.
Weil du vermutlich mit der Hardware nicht ausreichend sorgfältig
und angemessen umgehen konntest.
Viele Leute sind schon an der Versorgung von W5x00-Modulen und
-Chips gescheitert. Und immer war der Chip dran schuld, nie der
"Entwickler" und Nutzer der Chips.
> Weil du vermutlich mit der Hardware nicht ausreichend sorgfältig> und angemessen umgehen konntest.
Mag sein.
Aber
1) es war ein fertiges Board von WIZnet,
2) ich hatte (mehrfach) die entsprechenden Abschnitte im Datenblatt
gelesen,
3) das Problem trat nur bei einem bestimmten Bitmuster auf.
J. W. schrieb:> 1) es war ein fertiges Board von WIZnet,
War die Stromversorgung und der umgebende Aufbau auch von WIZnet?
OMG schrieb:> Viele Leute sind schon an der Versorgung von W5x00-Modulen und> -Chips gescheitert.J. W. schrieb:> das Problem trat nur bei einem bestimmten Bitmuster auf.OMG schrieb:> Und immer war der Chip dran schuld, nie der> "Entwickler" und Nutzer der Chips.J. W. schrieb:> aber Datenframes mit einem bestimmten Muster kamen> korrumpiert an
Im Datenblatt ist nichts dazu beschrieben, aber wenn ich
RAW Ethernet bzw PHY Mode annehme dann wird dort keine
Checksum Überprüfung enthalten sein, daher können dann
auch fehlerhafte Pakete empfangen werden.
svensson schrieb:> Das Modul von Tenstar hat einen Spannungsregler und einen Pegelwandler,> so daß ein Betrieb mit 3.3V/5V-Pegel möglich sein soll.
Ich habe mir das Modul noch einmal angesehen, Spannungsregler ja,
Pgelwandler doch nicht. Macht aber nichts, da der W5500 auch 5V-Pegel
abkann.
Funktioniert übrigens seit Hunderten von Anfragen.
OMG schrieb:> Uwe D. schrieb:>> Betreibst Du den Arduino mit 5V und den W5500 mit angepasstem Pegel?>> Falls nicht, dann geht das Modul kurz über lang über den Jordan. Ist mir>> nicht nur 1x passiert (auch mit dem W5200).>> OMG!>> Was muss ich da schon wieder für einen Käse lesen?>> Tausende von (5V-) Arduinos auf der ganzen Welt funktionieren mit> einem W5100 oder W5500.
Ja, für 10 Minuten auf dem Steckbrett, aber nicht immer über Monate. Du
kannst gerne ein paar von meinen Wiz820 Modulen haben, die 5V tolerant
waren.
Auf Datenblättern kann jeder reiten.