INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
Ethernet Shield Client
18.04.2014, 04:13
Beitrag #1
Ethernet Shield Client
Hallo,
ich versuche mit dem Ethernet Shield Werte von einem NTC über ein PHP script an meine Datenbank zu senden.
Ich habe einige Beispiele im Internet benutzt und das ganze eher zusammengewürfelt. Die Übertragung funktioniert, das Problem ist aber, dass nach 1-2 Übertragungen die Verbindung abbricht und nichts mehr passiert. Manchmal schlägt auch das Verbinden fehl und es passiert auch nichts mehr.
Auch weiss ich nicht, ob da nicht unnötige Befehle mit bei sind, bei anderen Beispielen waren es weniger.
Wäre nett, wenn mir da jemand helfen könnte.

Code:
#include <Ethernet.h>
    #include <SPI.h>

    byte mac[] = {  0x90, 0xA2, 0xDA, 0x0D, 0xF6, 0xFF };
    byte ip[] = {  192, 168, 20, 25};

    EthernetClient client;
     int zahl;
    String hallo= "testtext=";
    String test;
    float wert;
    float u;
    
    
    void setup()
    {
    Ethernet.begin(mac, ip);
    Serial.begin(9600);
    Serial.println(Ethernet.localIP());
    delay(1000);
    delay(1000);
    
    }

    void loop()                                          
    {      
      wert = analogRead(A0);
      u = (wert/1023.)*5.;
      zahl = 113.45 - 37.38*u;
      Serial.println(zahl);
      test=hallo+zahl;
      
     // Serial.println("connecting...");

    if (client.connect("192.168.20.20",80))
    {                                
    Serial.println("Sending to Server: ");                
    client.println("POST /abfrage.php HTTP/1.1");          
    Serial.print("POST /abfrage.php HTTP/1.1");          
   client.println("Host: host halt");
    client.println("Content-Type: application/x-www-form-urlencoded");
    client.println("Connection: close");
    client.println("User-Agent: Arduino/1.0");
    client.print("Content-Length: ");
    client.println(test.length());
    client.println();
    client.print(test);
    client.println();            
    }
    else
    {
    Serial.println("Cannot connect to Server");    
    while(1);    
    }
    if (client.available()) {
    char c = client.read();
    Serial.print(c);
    }
    if (!client.connected())
    {
    Serial.println();
    Serial.println("disconnecting.");
    client.stop();
    }                              
    
    }
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
18.04.2014, 10:19
Beitrag #2
RE: Ethernet Shield Client
Hallo kiroho,

Zitat:Die Übertragung funktioniert, das Problem ist aber, dass nach 1-2 Übertragungen die Verbindung abbricht und nichts mehr passiert
Auch hier der Hinweis, dass die Loop() sehr schnell durchlaufen wird (im Bereich Millisekunden). Damit wird das Ethernet-Shield einfach dicht gemacht.
Du solltest zwischen den Sendungen an den Server 5 bis 10 Sekunden verzögern.
Dazu aber nicht delay() benutzen, eher millis(). Ansonsten hast du keine Möglichkeit während der Pausen zwischen den Sendungen etwas anderes ablaufen zu lassen.

Grüße Ricardo

PS: Es kann auch sein, dass der Web-Server selbst bei Übertragungen im Abstand von wenigen Millisekunden nicht mit dem Schreiben in die Datenbank nachkommt.

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
20.04.2014, 21:43
Beitrag #3
RE: Ethernet Shield Client
Ich habe ein Beispiel mit den Mili als Verzögerung angeschaut, dort wurden LED´s dadurch zum blinken gebracht.
Aber wie mache ich das, dass der warten soll, wenn die 5-10 Sekunden noch nicht rum sind?
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
21.04.2014, 00:41
Beitrag #4
RE: Ethernet Shield Client
Hallo kiroho,

hier nur ganz grob:
Code:
void setup() {
unsigned long jetzt=0;
unsigned long interval=5000;
}
void loop() {
jetzt=millis();
if ((client.connect("192.168.20.20",80)) && millis() - jetzt > interval) {
jetzt=millis();
Serial.println("Sending to Server: ");                
client.println("POST /abfrage.php HTTP/1.1");          
Serial.print("POST /abfrage.php HTTP/1.1");          
client.println("Host: host halt");
....
}

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2014, 13:12
Beitrag #5
RE: Ethernet Shield Client
Wenn ich Jetzt und Interval im Void Setup deklariere, kommt die Nachricht "'jetzt' was not declared in this scope. Wenn ich es im loop deklariere wird aber kein Wert übertragen.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
23.04.2014, 17:23
Beitrag #6
RE: Ethernet Shield Client
Hallo kiroho,

sorry, war mein Fehler. So ist es bzgl. der Variablen besser:
Code:
unsigned long jetzt = 0;
unsigned long interval = 5000;
void setup() {
jetzt = millis();
}
void loop() {
    if (client.connect("192.168.20.20", 80)) {
    if (millis() - jetzt > interval) {
      jetzt = millis();
      Serial.println("Sending to Server: ");
      client.println("POST /abfrage.php HTTP/1.1");
      Serial.print("POST /abfrage.php HTTP/1.1");
      client.println("Host: host halt");
      // ....
    }
  }
}
Zitat:Wenn ich es im loop deklariere wird aber kein Wert übertragen.
So wie es formuliert ist wartet er 5 Sekunden bis zur ersten "Sendung" insofern eine verbindung besteht.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2014, 13:48
Beitrag #7
RE: Ethernet Shield Client
Das mit dem warten klappt jetzt.
Danke schonmal dafür.
Jetzt ist aber immernoch das Problem, dass eigentlich Zufall ist ob der die Verbindung schafft oder nicht. Mit Glück gehts dann ein paar mal gut, aber sobald er einmal die Verbindung verloren hat bekommt er die nicht wieder aufgebaut.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
29.04.2014, 15:40
Beitrag #8
RE: Ethernet Shield Client
Hallo kiroho,
Bei dir sieeht es so aus:
Code:
if (client.connect("192.168.20.20",80)) // verbindet den Client
{
...
}
Ich würde daraus folgendes machen:
Code:
// vor setup()
unsigned int connwait = 1000;
client.connect("192.168.20.20",80);
jetzt = millis();
while  (millis() - jetzt < connwait) {};
if (client.connected()) // prüft die Verbindung
{
...
}

In deinem Code wird verbunden und sofort losgelegt ohne zu testen ob wirklich die Verbindung da ist.
In meinem Vorschlag wird verbunden und 1 Sekunde gewartet und dann getestet ob wirklich die Verbindung da ist. Wenn ja, dann gehts los.
connwait musst du sicher anpassen.
Wichtig: client.connected() liefert auch true wenn noch Daten zum senden anliegen, auch wenn keine Verbindung wirklich existiert. Also immer nach dem Senden ein client.flush() aufrufen um alte / verlorene Daten zu verwerfen.
Die while-Schleife als Ersatz für delay(), da ansonsten der Arduino beinahe schläft und zwischenzeitlich die Verbindung unter Umständen nicht aufgebaut werden könnte.

Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  CP2102 und USB Host Shield ?? DL1AKP 0 50 01.12.2016 08:55
Letzter Beitrag: DL1AKP
  Arduino UNO und Ethernet Shield 2 POE und Fritzbox 3272 tr3 2 161 19.11.2016 10:46
Letzter Beitrag: tr3
  Kommunikation über das WiFi-Shield Flap 3 235 07.11.2016 20:20
Letzter Beitrag: hotsystems
  Ethernet Modul Enc28j60 Pin13 LED Schalten BennIY 16 518 27.09.2016 20:30
Letzter Beitrag: BennIY
  Arduino Lan Shield - Visual Basic ZackiE 6 217 20.09.2016 19:26
Letzter Beitrag: ZackiE
  adafruit V2.3 Shield Hangloose 6 298 08.09.2016 17:13
Letzter Beitrag: rpt007
  Can-Bus Shield ok, aber keine Daten Clubsport 38 1.540 01.09.2016 14:17
Letzter Beitrag: Clubsport
  Arduino mega 2560 mit TFT LCD Touch Shield V1 Clemens55555 17 940 02.08.2016 20:51
Letzter Beitrag: Clemens55555
Question Webserver, Client, Loop Marc2014 6 369 29.07.2016 21:04
Letzter Beitrag: Marc2014
  SainSmart 3.2 TFT + 5" TFT/SD Shield + Due SAM3X8E ARM (Arduino Due) Techniker_UE 13 3.235 24.07.2016 14:34
Letzter Beitrag: Eichner

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste