Pages: [1]   Go Down
Author Topic: LAN/WLAN Verbindung reist nach kurzer Zeit ab ...  (Read 536 times)
0 Members and 1 Guest are viewing this topic.
Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo allerseits,
ich komme dem Problem nich auf die schliche. Vieleicht kann sich jemand mal den Sketch und den Aufbau anschauen.
Also folgendes...

Arduino Nano mit einem WIZ812MJ Ethernet SPI/Bus Module (saelig)
Das WIZ812MJ hängt an einem TP-Link TPLINK
Und verbindet sich dann mit einer Fritzbox 7390.
Der TP-Link fungiert als Client (Client-Modus eingestellt)

Nach dem anschliessen funktioniert alle Super, solange die Webseite, die den Arduino abfragt, geöffnet bleibt und alle 25 sek. eine Anfrage an den Arduino stellt.
Schliesse ich die Webseite (PC fährt runter o.Ä.) für länger als ca 2 min und starte sie dann wieder Neu, gibt es keine Verbindung mehr. Ich kann den Arduino auch nicht An-Pingen...
Aber in der Fritzbox, taucht der Arduino weiterhin als verunden auf...
Ich habe schon eine Ping-Anfrage (an google) in den Sketch mit eingebaut, aber selbst mit dem will die verbindung nicht bleiben.

Ich hoffe ihr versteht was ich meine, vieleicht hat ja jemand eine Idee, woran es liegen könnte...

Vielen Dank...

Sketch
« Last Edit: March 29, 2013, 04:44:18 pm by Cetax » Logged

*greatz*

 CeTax

www dot blinkmann dot de


Forum Moderator
BZ (I)
Offline Offline
Brattain Member
*****
Karma: 272
Posts: 21940
+39 349 2158303
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

in bearbeitung ...
orgineller Post  smiley-wink smiley-wink smiley-wink
Logged

Germany
Offline Offline
Sr. Member
****
Karma: 1
Posts: 309
View Profile
WWW
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo uwefed,
hatte den Sende Button zu schnell gedrückt  smiley-mr-green
Sorry...
Logged

*greatz*

 CeTax

www dot blinkmann dot de


Offline Offline
Edison Member
*
Karma: 21
Posts: 1419
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hallo Stefan,

ich hab mal kurz über den Code geschaut. Dazu folgende Anmerkungen:

Code:
 RTC.getTime();                                        // aktuelle Zeit merken
  if (int(RTC.hour) == 21 && int(RTC.minute) == 30)     // immer um 21:30 Uhr Zeit vom NTP holen
 {
  while ( pause < 1 ) {
  NTP_READ();                                           // Uhrzeit per NTP aktualisieren
  Mail_senden();                                        // Sende Info Mail das die Uhrzeit aktualisiert wurde
  pause++;
   }
 }
Du wirst nur einmal (nämlich beim ersten Mal 21:30 Uhr) per NTP die Zeit holen, denn die Variable "pause" wird danach nie wieder auf "0" gesetzt.


Code:
EthernetClient client = server.available();        // auf eine eingehende Verbindung warten

  if (client) {  
Hier verschwendest Du Speicher, denn die Variable client ist schon globale deklariert, Du erzeugst aber mit dem "EthernetClient client = server.available();" eine neue lokale Variable, statt mit "client = server.available(); " die globale Variable zu verwenden.

Sonst habe ich erstmal nichts Größeres gesehen, außer das Du sehr viele Variablen deklarierst, die dann nie verwendet werden, oder in den entsprechenden Funktionen wieder durch lokale Variablen verdeckt werden.

Zum allgemeinen Troubleshooting würde ich aber einen Rechner an die serielle Konsole hängen und Debug-Ausgaben machen, was der Arduino gerade macht und wo das Ganze hängt.

Mario.
« Last Edit: March 30, 2013, 09:35:18 am by mkl0815 » Logged

Germany S-H
Offline Offline
Faraday Member
**
Karma: 175
Posts: 3293
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hier verschwendest Du Speicher, denn die Variable client ist schon globale deklariert, Du erzeugst aber mit dem "EthernetClient client = server.available();" eine neue lokale Variable, statt mit "client = server.available(); " die globale Variable zu verwenden.

Das ist nicht nur Speicherverschwendung, es hat auch funktionell erhebliche Auswirkungen: Eine in der loop deklarierte Variable hat ihre Lebensdauer nur so lange die loop-Funktion läuft. Am Ende der loop verliert die Variable ihre Daseinsberechtigung und im nächsten Durchlauf der loop feiert die Variable Wiederauferstehung, während eine globale Variable ständig bestehen bleibt.

Sonst habe ich erstmal nichts Größeres gesehen, außer das Du sehr viele Variablen deklarierst, die dann nie verwendet werden, oder in den entsprechenden Funktionen wieder durch lokale Variablen verdeckt werden.

Als ganz dicker Hund fällt mir an dem Code auf, dass am laufenden Band vom Client Zeichen gelesen werden, z.B.
command =client.read();     
ohne dass vorher mit "if (client.available())" geprüft wurde, ob überhaupt ein Zeichen zum Lesen bereitsteht.

Das ist wie jemand, der Besuch erwartet, hundertmal zur Tür läuft, Tür auf / Tür zu, und nachdem er das hundertmal gemacht hat davon ausgeht, dass er dann tatsächlich 100 Leute in seine Wohnung gelassen hat. Das kann ja tatsächlich nur dann funktionieren, wenn sich die Leute massenhaft vor der Wohnungstür drängeln, so dass jedesmal einer reinkommt, wenn die Tür aufgeht. Also müssen sich die Bytes im Client-Puffer drängeln, nur dann kann man jedesmal mit client.read() auch was lesen. Die ganze Einleselogik vom EthernetClient scheint mir stark änderungsbedürftig zu sein.
Logged

Pages: [1]   Go Up
Jump to: