Arduino Ethernet Shield - UDP probleme

Hallo liebe Leute,

ich habe ein kleines Problem mit der Verbindung zwischen zwei Arduinos mit Ethernet Shield. Vorab: Es sind alles originale Arduino Boards. Die Shields haben den w5500 Chip verbaut. Als Verbindung zwischen den beiden Shields ist ein Standard Crossover Kabel.

Ich möchte momentan ganz simpel über UDP auf dem einen Arduino erkennen das der andere was sendet.

Siehe hierzu einmal den Transmitter:

#include <SPI.h>

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet2.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp2.h>
#include <Twitter.h>
#include <util.h>




// Enter a MAC address and IP address for your controller below.

// The IP address will be dependent on your local network:

byte mac[] = { 0x90, 0xA2, 0xDA, 0x11, 0x3C, 0xD2 };

IPAddress ip(192, 168, 1, 177);



unsigned int localPort = 8888;      // local port to listen on



// An EthernetUDP instance to let us send and receive packets over UDP

EthernetUDP Udp;



void setup() {

  // start the Ethernet and UDP:

  Ethernet.begin(mac,ip);
  Serial.begin(9600);
  Udp.begin(localPort);

}



void loop() {

  Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());

    Udp.write("hello");
    Serial.println("gesendet");
    Udp.endPacket();

}

und einmal den Receiver:

#include <Dhcp.h>
#include <Dns.h>
#include <Ethernet2.h>
#include <EthernetClient.h>
#include <EthernetServer.h>
#include <EthernetUdp2.h>
#include <Twitter.h>
#include <util.h>

#include <SPI.h>        

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {  
  0x90, 0xA2, 0xDA, 0x11, 0x3C, 0xCB };
IPAddress ip(192, 168, 1, 176);

unsigned int localPort = 8888;      // local port to listen on

// An EthernetUDP instance to let us send and receive packets over UDP
EthernetUDP Udp;

char packetBuffer[UDP_TX_PACKET_MAX_SIZE]; //buffer to hold incoming packet,

void setup() {
  // start the Ethernet and UDP:
  Ethernet.begin(mac,ip);
  Udp.begin(localPort);
  Serial.begin(9600);

}

void loop() {

  int packetSize = Udp.parsePacket();
  if(packetSize >= 0)
  {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From IP : ");

    IPAddress remote = Udp.remoteIP();
    //print out the remote connection's IP address
    Serial.print(remote);

    Serial.print(" on port : ");
    //print out the remote connection's port
    Serial.println(Udp.remotePort());
  }

}

Im Serial Monitor vom Receiver bekomme ich nur folgende Nachricht:

From IP : 0.0.0.0 on port : 0
Received packet of size 0

Habt Ihr eine Idee? Mache ich was grundlegendes Falsch?

Danke schon mal für eure Hilfe!

Gruß,

Michael

Du musst beim Sender IP und Port explizit angeben, wohin er senden soll. Woher soll die UDP-Klase das wissen?

Beim Empfänger würde ich auf if(packetSize > 0) abfragen, also wenn was da ist.

Gruß Tommy

Hi Tommy,

danke für deine Antwort. Kannst du mir mal gerade eine Zeile nenne wie das funktioniert?

Mit udp.write ("hello", ip, port); funktionierts schonmal nicht. UDP.send kann ich auch nicht nutzen.

Hast du eine Idee?

Gruß,

Michael

Ich habe das hier mal mit 2 NodeMCU demonstriert. Der Ablauf ist aber auch beim Ethernet-Shield der gleiche.

Gruß Tommy