Nano + W5500 ethernet Netzwerk Modul

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:
grafik

Mit diesem Sketch kann ich meinen arduino in meinem Netz unter der 192.168.178.57 anpingen und dachte, dass alles funktioniert...

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

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

void setup() {
  Serial.begin(9600);
  IPAddress meineIP(192, 168, 178, 57);
  Ethernet.begin(mac, meineIP);
}

void loop() {
}

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:

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

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

void setup() {

  Serial.begin(9600);

  IPAddress meineIP(192, 168, 178, 57);

  Ethernet.begin(mac, meineIP);
  Serial.println(meineIP);
  Serial.println(Ethernet.localIP());
}

void loop() {

}

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.

mfg ein Moderator.

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.

Das ist sehr eigenartig:

# Query terms are ambiguous.  The query is assumed to be:
#     "n 192.209.100.114"
#
# Use "?" to get help.
#

NetRange:       192.209.64.0 - 192.209.127.255
CIDR:           192.209.64.0/18
NetName:        RADIANZ-192-209-64-0
NetHandle:      NET-192-209-64-0-1
Parent:         NET192 (NET-192-0-0-0-0)
NetType:        Direct Allocation
OriginAS:       
Organization:   RADIANZ Americas, Inc. (RADIAN-25)
RegDate:        1992-08-14
Updated:        2012-02-24
Ref:            https://rdap.arin.net/registry/ip/192.209.64.0

Der TO hängt an ner FB. Da dürfte sein 192.168.178.57 schon richtig sein.

Das stimmt nicht. Dahinter verbirgt sich ein Klasse C Netz.

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.

Die Einstellungen an meiner FritzBox sehen so aus:


Ich will dem arduino eine feste IP geben.
Die Ausgabe vom Sketch 192.209.100.114 passt da gar nicht!
Es wird aber noch verrückter:

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

byte mac[] = {  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };

void setup() {

  Serial.begin(9600);

  IPAddress meineIP(192, 168, 178, 57);

  Ethernet.begin(mac, meineIP);
  Serial.println(meineIP);
  Serial.println(Ethernet.localIP());
  byte macBuffer[6];
  Ethernet.MACAddress(macBuffer);
  Serial.print("The MAC address is: ");
  for (byte octet = 0; octet < 6; octet++) {
    Serial.print(macBuffer[octet], HEX);
    if (octet < 5) {
      Serial.print('-');
    }
  }
  Serial.println();
}

void loop() {

}

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?

Zieh mal das Netzwerkkabel ab - was kommt als Ausgabe?
Und mach mal Foto vom Aufbau. von oben.

Hallo,
habe hier auch ein W5500 am Start, dieser braucht die "Ethernet2.h" Library. Die normale funktioniert nur mit W5100 und W5200...

Gruß,
Horst

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 :frowning:

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

Foto!
Ich hab das mit einem Nano und dem gleichen Modul nachgebaut: geht.

..das wäre zu einfach... Trotzdem Danke!

Danke!
Ich vermute langsam, dass das Modul einen "Knacks" hat...

Was möchtest du auf dem Foto erkennen?

Diese Info ist veraltet. Sie funktioniert mittlerweile auch mit der W5500.
https://www.arduino.cc/en/Reference/Ethernet

Gruß Tommy

:fearful: 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.

Gruß,
Horst

Die Verkabelung.
Du warst zu dicht dran.
Mach mal bitte von oben das ich alle Kabel sehe...


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

Also:
Ich habe hier zusammengebaut:
NANO 5500
+5V +5V
GND GND
D13 SLCK
D12 MISO
D11 MOSI
D10 SCS

Nicht mehr und nicht weniger.
Ne Fritzbox aus der Kiste geholt und angepinnt - geht.

1 Like

OK,
Spannung noch einmal gemeinsam, den RESET weg und auch den pullUp Widerstand...

geht leider nicht

Danke für die intensive Hilfe!
Ich besorge mir ein neues Modul...

Schönes Wochenende alle miteinander.