Arduino UNO und DFR0272 Ethernet Shield

Hallo zusammen

Ich bin nun schon eine paar Stündchen dran dem Ethernet Shield DFR0272 zu sagen das es sich von meinem DHCP Server eine IP holen soll.

Ich habe schon ethliche Library ausprobiert, die aus der Arduino Software und auch welche von GitHub und von der Hersteller Seite, die verweisen aber auch wieder auf GitHub , allerdings bleibt das Problem immer das gleiche, entweder wird keine Hardware gefunden, oder im Seriellen Monitor steht folgendes "Trying to get an IP address using DHCP", das heist er bleibt im Sketch in dieser Zeile " if (Ethernet.begin(mac) == 0) { " hängen.

Mit DHCP und dem Kabel Router etc. ist alles OK, wenn ich ein anderes Gerät an das Kabel hänge bekommt dieses sofort eine IP.
Ich weiss leider nicht mehr weiter, vielleicht kann mir da jemand weiterhelfen.

Ziel ist es, das der Arduino sich bei meinem Raspberry ioBroker meldet, per MQTT.

/*
 DHCP Chat  Server
 
 A simple server that distributes any incoming messages to all
 connected clients.  To use telnet to  your device's IP address and type.
 You can see the client's input in the serial monitor as well.
 Using an Arduino Wiznet Ethernet shield. 
 
 THis version attempts to get an IP address using DHCP
 
 Circuit:
 * Ethernet shield attached to pins 10, 11, 12, 13
 
 created 21 May 2011
 modified 9 Apr 2012
 by Tom Igoe
 Based on ChatServer example by David A. Mellis
 
 */

#include <SPI.h>
#include <EthernetV2_0.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network.
// gateway and subnet are optional:
byte mac[] = { 
  0x00, 0xAA, 0xBB, 0xCC, 0xDE, 0x02 };
IPAddress ip(192,168,1, 177);
IPAddress gateway(192,168,1, 1);
IPAddress subnet(255, 255, 0, 0);

// telnet defaults to port 23
EthernetServer server(23);
boolean gotAMessage = false; // whether or not you got a message from the client yet
#define W5200_CS  10
#define SDCARD_CS 4
void setup() {
  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  pinMode(SDCARD_CS,OUTPUT);
 digitalWrite(SDCARD_CS,HIGH);//Deselect the SD card
  // this check is only needed on the Leonardo:
   while (!Serial) {
    ; // wait for serial port to connect. Needed for Leonardo only
  }


  // start the Ethernet connection:
  Serial.println("Trying to get an IP address using DHCP");
  if (Ethernet.begin(mac) == 0) {
    Serial.println("Failed to configure Ethernet using DHCP");
    // initialize the ethernet device not using DHCP:
    Ethernet.begin(mac, ip, gateway, subnet);
  }
  // print your local IP address:
  Serial.print("My IP address: ");
  ip = Ethernet.localIP();
  for (byte thisByte = 0; thisByte < 4; thisByte++) {
    // print the value of each byte of the IP address:
    Serial.print(ip[thisByte], DEC);
    Serial.print("."); 
  }
  Serial.println();
  // start listening for clients
  server.begin();
 
}

void loop() {
  // wait for a new client:
  EthernetClient client = server.available();

  // when the client sends the first byte, say hello:
  if (client) {
    if (!gotAMessage) {
      Serial.println("We have a new client");
      client.println("Hello, client!"); 
      gotAMessage = true;
    }

    // read the bytes incoming from the client:
    char thisChar = client.read();
    // echo the bytes back to the client:
    server.write(thisChar);
    // echo the bytes to the server as well:
    Serial.print(thisChar);
  }
}

Auf dem Ding ist ein W5200 verbaut.
Und hier ist die Herstellerseite: Ethernet Shield for Arduino - W5200-DFRobot
Unter Documents findest Du die passende lib und ein wiki zur Installation und Inbetriebnahme.
Wenn Du da nicht weiter kommst, dann beschreibe, was Du gemacht hast und was Du erwartest.
Tip: vorherige (ethernet)libs aus anderen Quellen löschen. Muss nicht unbedingt, schliesst aber ggfls. Probleme aus.

Ja da war ich schon, habe das auch machen wollen, nur die Lib, heisst nun anders und auch das Sketch ist nicht so wie in der Anleitung, da ist einiges anders geworden.

Ich möchte das sich der Arduino eine IP holt und dann mit dem Raspi (ioBroker) quatscht, das ist eigentlich alles :-/

NEIN!

Weiss auch nicht was da los ist, ich habe die Arduino Software neu installiert und nun gehts komisch.

Nun schau ich mal wegen MQTT, mal sehen wie das klappt :slight_smile:

Nachtrag:
2 von 3 Ethernet Shields sind defekt.

Hallo

Also es sind definitiv 2 Ethernet Shields defekt. Ich habe das einmal mit einem Original Arduino und einmal mit einem DCcduino getestet. Ein einziges Shield hat sich aufstecken lassen und hat sich eine IP geholt, alle anderen hatten nicht mal einen Link.

Da wird der Händler sicherlich mit einem Austausch reagieren.
Wenn einer funktioniert ist zumindest wahrscheinlich, das es nicht an der Software liegt.

Habe heute Meldung von der Bastelgarage, so heisst der Shop, bekommen, Sie hätten sowas noch nie gehabt.
Nun einmal ist immer das erste mal, mal schauen was die mir nun weiter vorschlagen.

Achso, Kommunikation mit MQTT und Raspberry in beide Richtung klappt.
Nun wüsste ich noch eins, habe nichts direktes gefunden, kann man einen Arduino über das Ethernet Shield neu programmieren?

Wenn du einen Ethernet oder I2C fähigen Bootloader findest.....
Wie auch immer, mit Zusatz Hinschmalz ist das sicherlich zu machen.

Habe mir nun 3 Original LAN Shields gekauft, drauf gesteckt und boooom alles geht :slight_smile:

Kaufe mir keine 2 Wahl Hardware mehr.

Nun habe ich doch noch mal eine Frage.
Das Shield " Arduino Ethernet Shield 2 — Arduino Official Store" gekauft. Nun möchte ichdas auf einen Arduino Mega R3 2560 stecken bzw. habe ich das gemacht, das Ethernet Shield funktioniert auch, doch durch Zufall habe ich das hier gelesen:

BlockquoteThe Shield does not come with a built in PoE module, it is a separate component that must be added on. Arduino communicates with both the W5500 and SD card using the SPI bus (through the ICSP header). This is on digital pins 10, 11, 12, and 13 on the Uno and pins 50, 51, and 52 on the Mega. On both boards, pin 10 is used to select the W5500 and pin 4 for the SD card. These pins cannot be used for general I/O. On the Mega, the hardware SS pin, 53, is not used to select either the W5500 or the SD card, but it must be kept as an output or the SPI interface won't work.

Sind die Pin 50, 51, 52 auf dem Mega ein muss oder ein kann? Wenn es ein muss ist, wieso funktioniert das Shield auf dem Mega dann?

Dann steht da noch folgendes:

This shield also hosts Tinkerkit compatible connectors as follows:

  • 2 TinkerKit connectors for two Analog Inputs (in white), connected to A2 and A3.
  • 2 TinkerKit connectors for two Aanlog Outputs (in orange in the middle), connected to PWM outputs on pins D5 and D6.
  • 2 TinkerKit connectors for the TWI interface (in white with 4 pins), one for input and the other one for output.

Heisst das ich kann den Analogenausgang A2 und A3 nicht benutzen?

Gruss Sascha

Hier ist ein PINOUT drin.
Ansehen. Bitte beachte den Header ICSP.
Wenn dann noch Unklarheiten sind kann das gelöst werden.

Mhh um ehrlich zu sein verstehe ich nur Bahnhof.
Der ICSP ist doch garnicht das Porbelm oder? es geht doch um Die Pin's 11, 12, 13 beim UNO und 50, 51, 52 beim Mega.
Wenn ich das Ethernet Shield auf den Mega Stecke funktioniert doch alles, warum muss ich dann auf die Pin's 50, 51, 52 wechseln?

Du sollst nicht wechseln, sondern drauf achten, das die Pin-nummern sich unterscheiden!

Das NetzwerkShield benutzt den SPI.
Auf dem Uno unter Punkt 19
Auf dem MEGA unter Punkt 21

Die Pins sind auf dem UNO und dem MEGA anders angeordnet.
UNO: 13/12/11/10 - und gleichzeitig ICSP
MEGA: 53/52/51/50 - und gleichzeitig ICSP

Der ICSP-Header bringt immer die "richtige" Beschaltung.
Das Netzwerkshield benutzt genau diesen Header und nicht die Pins.

Du solltest auf die Verwendung der PIN's MISO/MOSI/SCL verzichten, wenn diese nicht auch für SPI-Zwecke genutzt werden.

du sollst nur im Setup als einer der ersten Funktionen einen pinMode(SS, OUTPUT) setzen. Erst danach Ethernet und SD Karte initialisieren.
Wegen den anderen Pins 50, 51, 52 brauchst dir keine Sorgen machen, die holt sich das Shield über den ICSP header.
Nur halt drann denken falls du weitere SPI Teilnehmer hättest, dass dafür 50, 51,52 notwendig sind.

Also ich fasse mal zusammen, der ICSP Header sind die 6 Pin's beim UNO am ende und beim Mega im hinteren drittel. Das Ethernet Shield benutzt diesen ICSP Header. Ich muss jetzt schauen das ich nicht pin 50, 51, 52 nehme weil das die gleichen Pin's sind wie die vom ICSP Header.
Also wenn das stimmt habe ich das verstanden.

Was jetzt unklar ist, ist das mit dem "pinMode(SS, OUTPUT)". Also ich brauche eigentlich nur 3 mal analog und 3 mal digitale Pin's . kann ich da den SS Pin ignorieren?

Gerade gelesen, der SS Pin ist damit der Master mit dem Slave kommunizieren kann. Muss ich den Wert setzen, wenn ich sonst nichts weiter über die SPI kommuniziere? Macht man das aus Sicherheit?

Ja, den darfst du ignorieren, weil der schon von der SPI Library auf OUTPUT gesetzt wird.
Ja, den darfst du nach Belieben verwenden, aber nicht als INPUT

Das ist richtig!
Wobei der hier nicht als ISP genutzt wird, sondern als SPI!
Nicht jedes Arduino Board hat dort seinen ISP, aber immer ist es SPI

1 Like

oki, hoffentlich kann ich mir das alles behalten :-/

Vielen Dank

Merke dir einfach:

  1. Es gibt Schaltpläne für quasi jedes Board
  2. Es gibt Dokumentationen für jedes Board und jede Lib

Wenn du dir das merken kannst, und den Schluss daraus ziehst kanns, dass du diese Unterlagen mit ein klein wenig Suche, wirklich nur ein ganz kleines bisschen suchen, finden und dann auch lesen kannst.
Dann .... dann besteht etwas Hoffnung .....

Hier muss ich Dir Danke Sagen!!!.
Hab nämlich Problem das mir ein Pin fehlt um einen Lüfter Steuern (über MOSFET), Wollte schon zweites Nano nehmen nur für den einen Pin, so wie ich das verstanden habe kann passieren das der Pin sich schaltet auf High, oder Low wen die SD Karte in Betrieb geht, was mich aber nicht stören wird, nur muss ich sorgen das mein Lüfter nicht in Quere kommt mit SD. Werde genau sich einlesen wie das in der Lib so läuft, DANKE.