Problem mit Ethernet shield

Hallo,
Ich habe bei meinem Arduino Mega ein ETHERNET schield angeschlossen und an das einen Router

Wenn ich aber dann mit meinem Handy die IP aufrufen möchte findet es den Arduino (IP) nicht.
Kann mir jemand helfen??

Muss ich bei der IP/Mac Adresse noch etwas ändern??

#include <Ethernet.h>
#include <SPI.h>
boolean reading = false;

//Konfiguration

  byte ip[] = { 192, 168, 0, 21 };   //Manual setup only
  byte gateway[] = { 192, 168, 0, 1 }; //Manual setup only
  byte subnet[] = { 255, 255, 255, 0 }; //Manual setup only

  // if need to change the MAC address (Very Rare)

  // if need to change the MAC address 
byte mac[] = { 0x90, 0xA2, 0xDA, 0x0D, 0xB4, 0x6F };

EthernetServer server = EthernetServer(80); //port 80


void setup(){
  
//Pins 10,11,12 & 13 werden vom ethernet shield verwendet, 1 zur Programmübertragung

  pinMode(2, OUTPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  Ethernet.begin(mac); //Ethernet.begin(mac, ip, gateway, subnet); //for manual setup
  server.begin();
 
}

void loop(){

  // warten auf Anfragen von Clients
  checkForClient();

}

void checkForClient(){

  EthernetClient client = server.available();

  if (client) {

    
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected()) {
      if (client.available()) {

        if(!sentHeader){
          // HTML senden 
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
   
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("Arduino IO control 
");
          client.println("
");
          client.println("</a>");
          
          client.println("Out 02");
          client.println("<a href=\"/?a\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?b\" target=\"inlineframe\">OFF</a>
"); 
          
          client.println("Out 03");
          client.println("<a href=\"/?c\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?d\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 04");
          client.println("<a href=\"/?e\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?f\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 05");
          client.println("<a href=\"/?g\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?h\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 06");
          client.println("<a href=\"/?i\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?j\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 07");
          client.println("<a href=\"/?k\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?l\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 08");
          client.println("<a href=\"/?m\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?n\" target=\"inlineframe\">OFF</a>
");
          
          client.println("Out 09");
          client.println("<a href=\"/?o\" target=\"inlineframe\">ON</a>"); 
          client.println("<a href=\"/?p\" target=\"inlineframe\">OFF</a>
");
          
          client.println("
");
          client.println("</a>");
         
          client.println("<a href=\"/?acegikmo\" target=\"inlineframe\">all ON</a>"); 
          client.println("<a href=\"/?bdfhjlnp\" target=\"inlineframe\">all OFF</a>
");
          
          client.println("<IFRAME name=inlineframe style=\"display:none\" >");          
          client.println("</IFRAME>");

          client.println("</BODY>");
          client.println("</HTML>");
          sentHeader = true;
        }
//auslesen der Eingabe

        char c = client.read();

        if(reading && c == ' ') reading = false;
        if(c == '?') reading = true; //found the ?, begin reading the info

        if(reading){
          
//schalten der Ausgänge

           switch (c) {
            case 'a':
              //add code here to trigger on 2
              digitalWrite(2, HIGH);
              break;
            case 'b':
            //add code here to trigger on 3
              digitalWrite(2, LOW);
              break;
            case 'c':
            //add code here to trigger on 4
              digitalWrite(3, HIGH);
              break;
            case 'd':
            //add code here to trigger on 5
              digitalWrite(3, LOW);
              break;
            case 'e':
            //add code here to trigger on 6
              digitalWrite(4, HIGH);
              break;
            case 'f':
            //add code here to trigger on 7
              digitalWrite(4, LOW);
              break;
            case 'g':
            //add code here to trigger on 8
              digitalWrite(5, HIGH);
              break;
            case 'h':
            //add code here to trigger on 9
              digitalWrite(5, LOW);
              break;  
              case 'i':
            //add code here to trigger on 2
              digitalWrite(6, HIGH);
              break;
            case 'j':
            //add code here to trigger on 3
              digitalWrite(6, LOW);
              break;
            case 'k':
            //add code here to trigger on 4
              digitalWrite(7, HIGH);
              break;
            case 'l':
            //add code here to trigger on 5
              digitalWrite(7, LOW);
              break;
            case 'm':
            //add code here to trigger on 6
              digitalWrite(8, HIGH);
              break;
            case 'n':
            //add code here to trigger on 7
              digitalWrite(8, LOW);
              break;
            case 'o':
            //add code here to trigger on 8
              digitalWrite(9, HIGH);
              break;
            case 'p':
            //add code here to trigger on 9
              digitalWrite(9, LOW);
              break;
          }

        }

        if (c == '\n' && currentLineIsBlank)  break;

        if (c == '\n') {
          currentLineIsBlank = true;
        }else if (c != '\r') {
          currentLineIsBlank = false;
        }

      }
    }

    delay(1); // pause für den Browser
    client.stop(); // Verbindung trennen

  } 

}

void triggerPin(int pin, EthernetClient client){

  client.print("Turning on pin ");
  client.println(pin);
  client.print("
");

  digitalWrite(pin, HIGH);
  delay(25);
  digitalWrite(pin, LOW);
  delay(25);
}

Das Händy hängt auch am Router über WiFi?

Beide Geräte müssen im selben Netz (IP-Netzwerk) sein.
Uwe hat es ja schon geschrieben, wenn das Handy per WLan angeschlossen ist kann es funktionieren, muss aber nicht.

Wenn ich aber dann mit meinem Handy die IP aufrufen möchte

Welche IP gibst du ein?

Meine Glaskugel sagt:

//Ethernet.begin(mac, ip, gateway, subnet); //for manual setup

Warum kommentierst du das aus, wenn du doch die IP selber festlegen willst...?

uwefed:
Das Händy hängt auch am Router über WiFi?

ja

HotSystems:
Beide Geräte müssen im selben Netz (IP-Netzwerk) sein.
Uwe hat es ja schon geschrieben, wenn das Handy per WLan angeschlossen ist kann es funktionieren, muss aber nicht.

hab ich

combie:
Welche IP gibst du ein?

Meine Glaskugel sagt:Warum kommentierst du das aus, wenn du doch die IP selber festlegen willst...?

  1. 192, 168, 0, 21
  2. den sketch hab ich von jmd. als example bekommen.

Sorry für die späte antwort

  1. 192, 168, 0, 21

Aber die verwendest du doch gar nicht!
Das ist das, was ich dir vorher schon erklären wollte.

Also jetzt nochmal:
Wenn du möchtest, dass der Arduino die 192, 168, 0, 21 bekommt, dann musst du ihm das schon sagen.
Dann tut er das auch.
Aber hellsehen kann dein kleiner Arduino nicht.

Alternativ:
Sage dem DHCP deins Routers, dass er dem Gerät mit der MAC { 0x90, 0xA2, 0xDA, 0x0D, 0xB4, 0x6F } die IP 192, 168, 0, 21 zuteilt.

Diese beiden Möglichkeiten hast du!

combie:
Diese beiden Möglichkeiten hast du!

Die dritte (normale) Methode wäre:

Der Arduino erhält seine Adresse via DHCP (das macht dein Sketch schon)
und du benutzt diese Adresse von deinem Client aus.
Nachsehen könntest du die Adresse im Router,
du könntest sie im Arduino ausgeben,
oder mittels eines Netwerk-Scanners ermitteln.

Whandall:
... oder mittels eines Netwerk-Scanners ermitteln.

Das heißt ich eoll den arduino beim Router anstecken und dann eine Netzwerkscann machen

Oder?

Einen IP Scan, falls dein Router dir die DHCP Clientes nicht anzeigt

Das heißt ich eoll den arduino beim Router anstecken und dann eine Netzwerkscann machen

Oder?

Warum gibst du die IP nicht mit Serial.print() aus?
Dann steht sie vor dir!
Musst sie nur noch notieren.


Ich bleibe dabei!

Wenn du eine feste IP verwenden willst, dann verwende eine feste IP!
Die beiden Möglichkeiten habe ich dir genannt. Eine wird dir im Code gezeigt. Es ist mir ein Rätsel, warum du diese Methode nicht verwenden willst.
Der einzige Grund, den ich sehe, warum du das nicht tust, ist dass du keine/wenig Ahnung hast.

Wenn du eine dynamische IP verwenden willst, dann tue das!
Aber dann lebe auch mit den Problemen.
z.B. dass sie ab und zu mal wechselt.


Es ist nicht schlimm, keine Ahnung zu haben.
Denn das kannst du ändern.
Da mussten wir alle durch.

Und das können wir dir nicht abnehmen!

Also, mein Tipp: LERNE

Lerne wie das Ethernet funktioniert. Denn erst dann kannst du auch erkennen ob die 192.168.0.21 überhaupt funktionieren kann

Lerne die Sprache, welche in der Arduino IDE verwendet wird.
Also lerne C++.
Lese die Doku zu der Arduino Ethernet Klasse.

Matthi02:
Sorry für die späte antwort

Lieber spät als nie.
Aber liest du auch was wir dir schreiben ?
Combie hat es dir doch schon deutlich geschrieben.
Aktiviere doch einfach mal die "manuelle" Initialisierung.

Ethernet.begin(mac, ip, gateway, subnet)

Aber liest du auch was wir dir schreiben ?
Combie hat es dir doch schon deutlich geschrieben.

Ich befürchte, dass unsere Ansagen schon gelesen werden, aber nicht verstanden werden.

Ursache:
Für eine erfolgreiche Kommunikation braucht man ein gemeinsames Vokabular und übereinstimmende Begriffsdefinitionen.

Dort ist die Arbeit!

Die Kristallkugel sagt mir:
Da ich die Router Konfiguration nicht kenne, vermute ich, dass die 192.168.0.21 sowieso nicht funktioniert.

combie:
Ich befürchte, dass unsere Ansagen schon gelesen werden, aber nicht verstanden werden.

Ursache:
Für eine erfolgreiche Kommunikation braucht man ein gemeinsames Vokabular und übereinstimmende Begriffsdefinitionen.

Dort ist die Arbeit!

Die Kristallkugel sagt mir:
Da ich die Router Konfiguration nicht kenne, vermute ich, dass die 192.168.0.21 sowieso nicht funktioniert.

Ja klar, nur wird auch das selten richtig verstanden.

Arbeit will ja keiner mehr haben. Ist ja alles so einfach, wenn es im Internet steht.

Dann gebe ich dem TO noch einen Tipp:
Einfach nachsehen welche IP sein Rechner hat und diese posten.

combie:
Warum gibst du die IP nicht mit Serial.print() aus?
Dann steht sie vor dir!
Musst sie nur noch notieren.

Also, mein Tipp: LERNE

Werd ich beides machen