2017-05-23 1 views
0

Das ist meine Situation: Ich habe einen Schalter und zwei Arduinos mit Ethernet-Shields verbunden, beide mit einem einfachen (Test) Webserver-Programm. Mein Computer ist auch mit dem Switch verbunden, sodass ich Anfragen an die Arduinos senden kann. Dies ist das Arduino-Programm (nur die IP-Adresse auf dem zweiten Arduino unterscheidet):Wie repariere ich mehrere Arduinos im LAN verursacht Timeouts

#include <Ethernet.h> 

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED }; //ethernet shield mac address 
byte ip[] = { 192, 168, 0, 11 }; // arduino IP in lan 
byte gateway[] = { 192, 168, 0, 1 }; // internet access via router 
byte subnet[] = { 255, 255, 255, 0 }; //subnet mask 
EthernetServer server(80); //server port 

void setup() { 
    //start Ethernet 
    Ethernet.begin(mac, ip, gateway, gateway, subnet); 
    server.begin(); 
} 

void loop() { 
    EthernetClient client = server.available(); 
    if (client) { 
    int nrOfCharacters = 0; 
    String msg = ""; 
    while (client.connected() && client.available()) { 
     char c = client.read(); 
     Serial.print(c); 
     nrOfCharacters++; 

     if(c == '\n' || nrOfCharacters >= 6 && c == ' ') 
     { 
     httpResponse(client, msg); 
     } 
     else if(nrOfCharacters >= 6) { 
     msg += c; 
     }  
    } 
    } 
} 

void httpResponse(EthernetClient client, String msg) 
{ 
    client.println("HTTP/1.1 200 OK"); 
    client.println(); 
    client.print(msg); 
    client.stop(); 
} 

Ein Arduino hat 192.168.0.10 IP-Adresse und die anderen IP-Adresse 192.168.0.11.

Alles funktioniert gut, und Anfragen werden perfekt behandelt, aber wenn ich eine Anfrage an einen Arduino und anschließend an die andere gesendet, dann das zweite Arduino aus, und danach funktioniert es wieder. Ich kann dieses Problem fast immer wieder perfekt reproduzieren.

Ich habe versucht, den Socket-Status auf dem Arduinos Inspektion diese Methode fand ich online:

byte socketStat[MAX_SOCK_NUM]; 

void ShowSockStatus() 
{ 
    for(int i = 0; i < MAX_SOCK_NUM; i++) { 
     Serial.print(F("Socket#")); 
     Serial.print(i); 
     uint8_t s = W5100.readSnSR(i); 
     socketStat[i] = s; 
     Serial.print(F(":0x")); 
     Serial.print(s, 16); 
     Serial.print(F(" ")); 
     Serial.print(W5100.readSnPORT(i)); 
     Serial.print(F(" D:")); 
     uint8_t dip[4]; 
     W5100.readSnDIPR(i, dip); 
     for(int j = 0; j < 4; j++) { 
     Serial.print(dip[j], 10); 
     if(j < 3) Serial.print("."); 
     } 
     Serial.print(F("(")); 
     Serial.print(W5100.readSnDPORT(i)); 
     Serial.println(F(")")); 
    } 
    Serial.println(""); 
} 

Aber ich fand keine Probleme. Ich habe auch inspiziert, ob es "hickups" beim Aufruf der loop() Methode gibt, aber auch keine Probleme.

Ich vermute, es hat etwas mit Daten zu einem Arduino auch auf der anderen Seite gesendet zu werden, verursacht eine Art von Problem damit, aber ich bin nicht wirklich vertraut mit der Funktionsweise von Netzwerk-Switches.

Hat jemand eine Möglichkeit, das zu beheben?

+1

@JarrodRoberson guter Haken, das ist wahrscheinlich was passiert - Schalter erkennt, wo dieser Mac angeschlossen ist und liefern keine Daten an einen anderen. – Slava

+0

FYI: [arduino.se] –

+0

@JarrodRoberson du hast gerade meinen Tag .. Vielen Dank. Changed die MAC-Adresse und BAM, keine Probleme mehr. – yaba

Antwort

2

Nur die IP-Adresse auf dem zweiten Arduino ist anders, Sie sollten auch eine andere MAC-Adresse haben.

Verwandte Themen