Hallo, nachdem an meinem nano der Klassiker "Blink" und auch oneWire mit dem DS18B20 funktioniert hat, soll es eine Ethernet Verbindung mit diesem Modul sein:
Mit diesem Sketch kann ich meinen arduino in meinem Netz unter der 192.168.178.57 anpingen und dachte, dass alles funktioniert...
Nachdem nun aber alle weiteren Versuche scheitern, habe ich wieder alles aus dem Sketch rausgeschmissen um den Fehler einzugrenzen, und bin dabei auf folgendes gestoßen:
Die Ausgabe im serial Monitor sieht dann so aus:
192.168.178.57
192.209.100.114
Kann das jemand nachvollziehen? Was läuft hier falsch?
Danke!
Grüße Tom
Im englischen Teil des Forum müssen die Beiträge und Diskussionen in englischer Sprache verfasst werden. Deswegen wurde diese Diskussion in den deutschen Teil des Forums verschoben.
Dein eigenes (Homenetz) entspricht nicht deiner manuell eingegebenen IP.
Die sollte schon in deinem Netz liegen. Die ersten 3 Blöcke müssen da überein stimmen.
Aus meiner Sicht gar nichts, wenn denn die in Ethernet.begin() übergebene IP nicht zur Anwendung kommt - warum auch immer.
meineIP ist ein Objekt der Klasse IPAdress, die den im Konstruktor zugewiesenen Wert hat. Ethernet.localIP() ist die dem Shield vom Router (via DHCP oder fest) zugewiesene Adresse im Netzwerk.
Edit: Das hier ist aus der Ethernet-Library:
void EthernetClass::begin(uint8_t *mac, IPAddress ip)
{
// Assume the DNS server will be the machine on the same network as the local IP
// but with last octet being '1'
IPAddress dns = ip;
dns[3] = 1;
begin(mac, ip, dns);
}
Wenn die Netzwerk-Werte aus Post #4 von @my_xy_projekt stimmen, der Router tatsächlich die 1 am Ende hat und Du eine noch nicht vergebene Adresse aus dem Bereich 192.209.64.0 - 192.209.127.255 als meineIP verwendest, sollte es funktionieren.
Der abgefragte Adressbereich ist ein öffentlicher.
Wenn das Shield eine öffentliche Adresse (via DHCP) zugewiesen bekommt, dann stimmt etwas nicht.
Seine 192.168.178.x Konfig wird schon richtig sein.
Die lokale Adresse muss aus dem Adressraum 192.168/16 bei entsprechender Subnetmask bzw. 192.168.178./24 ohne explizite Subnetangabe sein - vorausgesetzt die FB meldet sich auf der Standardadresse.
Meine z.B. macht das nicht und das Gastnetz IMHO auch nicht.
Hier bekomme ich als Ausgabe im Serial Monitor nach einem RESET immer mal was anderes:
192.168.178.57
192.209.100.114
The MAC address is: DE-5B-7D-DF-FD-DB
192.168.178.57
192.168.100.114
The MAC address is: DE-DB-7D-DF-FD-DB
192.168.178.57
192.81.100.114
The MAC address is: DE-5B-7D-DF-FD-DB
Was ist jetzt los?
Keine der gezeigten MAC Adressen habe ich vergeben.
Die IP Adresse ist auch immer mal eine andere?
Also den Sketch stört das gar nicht.
Am Ethernet Modul gehen halt die gelbe LED aus und die grüne LED hört auf zu blinken.
Der >ping 192.168.178.57 -t sagt dann: Zeitüberschreitung der Anforderung.
Mit diesem Code
#include <SPI.h>
#include <Ethernet.h>
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
void setup() {
Serial.begin(9600);
IPAddress ip(192, 168, 178, 57);
IPAddress dns(192, 168, 178, 65);
IPAddress gateway(192, 168, 178, 1);
IPAddress subnet(255, 255, 255, 0);
Ethernet.begin(mac, ip, dns, gateway, subnet);
// Ethernet.begin(mac, meineIP);
Serial.print("Meine IP ist: ");
Serial.println(ip);
Serial.print("Die Ethernet Adresse ist: ");
Serial.println(Ethernet.localIP());
byte macBuffer[6];
Ethernet.MACAddress(macBuffer);
Serial.print("Die MAC Adresse ist: ");
for (byte octet = 0; octet < 6; octet++) {
Serial.print(macBuffer[octet], HEX);
if (octet < 5) {
Serial.print('-');
}
}
Serial.println();
Serial.print("Die Gateway Adresse ist: ");
Serial.println(Ethernet.gatewayIP());
Serial.print("Die DNS Server Adresse ist: ");
Serial.println(Ethernet.dnsServerIP());
Serial.print("Die Subnet Maske ist: ");
Serial.println(Ethernet.subnetMask());
Serial.println();
}
void loop () {
if (Ethernet.linkStatus() == Unknown) {
Serial.println("Link status unknown. Link status detection is only available with W5200 and W5500.");
}
else if (Ethernet.linkStatus() == LinkON) {
Serial.println("Link status: On");
}
else if (Ethernet.linkStatus() == LinkOFF) {
Serial.println("Link status: Off");
}
delay(1000);
}
Sieht der Serial Monitor auch so aus, als wenn alles passen würde... tut es aber nicht
Meine IP ist: 192.168.178.57
Die Ethernet Adresse ist: 192.81.100.114
Die MAC Adresse ist: DE-5B-7D-DF-FD-DB
Die Gateway Adresse ist: 192.81.100.3
Die DNS Server Adresse ist: 192.168.178.65
Die Subnet Maske ist: 255.255.255.0
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: On
Link status: On
Link status: On
Link status: On
Link status: On
Link status: On
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Link status: Off
Habs gerade gesehen die Ethernet.h kann alle 3 Typen. Dann habe ich wohl was falsch gemacht - war nur froh, das es dann mit der Ethernet2.h funktionierte.
der nano wird per USB vom Computer versorgt
das Ethernet Modul bekommt schon 5V von extern ( ich dacht es braucht zu viel Strom )
GND, RESET, SCK, MISO, MOSI und SS sind 1:1 verbunden
der SS hat zusätzlich einen PullUp von 6,8k nach 5V