Ich brauche Hilfe mit UDP Kommunikation

Hallo,

ich benötige Unterstützung beim Senden von UDP-Paketen. Mein Ziel ist es, eine Flipdot-Anzeige von Alfazeta mithilfe eines Controllino Maxi zu steuern. Die Anzeige wird über UDP mit dem auf dem Bild beschriebenen Protokoll gesteuert. Es ist mir bereits gelungen, solche "Dataframe" von meinem PC aus an die Anzeige zu senden, aber ich habe Schwierigkeiten, dies mit dem Controllino zu bewerkstelligen. Über jede Hilfe würde ich mich sehr freuen.

Mit freundlichen Grüßen,
Tim

Welche?

ich kenn mich nicht so gut mit programmieren aus also hab ich es versucht mit dem Beispiel welches in der ethernet libary ist und ich habe es auch versucht mir von chatgpt erklären zu lassen, oder von chatgpt eins schreiben zu lassen dies hat aber auch nichts gebracht. Ich habe auch schon versucht simple Sachen zu senden, an meinen PC der dann auf diesen Port Hört dies hat aber leider auch nicht funktioniert.

Offensichtlich eine tolle Idee
Auf jeden Fall bin ich nicht bereit in Wettstreit mit irgendwelchen AIs zu treten.

Übrigens:
Wenn du nicht zeigen willst, was du tust, kann man dir auch nicht zeigen, so es klemmt.

@BLAIDDDRWG ,

Ihr anderes Thema zum gleichen Thema wurde gelöscht.

Bitte stellen Sie Ihre Fragen nicht doppelt, da dies Zeit und Mühe der Freiwilligen verschwendet, die versuchen, Ihnen zu helfen, da diese dann an verschiedenen Stellen dasselbe beantworten.

Bitte erstellen Sie nur ein Thema für Ihre Frage und wählen Sie die Forumskategorie sorgfältig aus. Wenn Sie mehrere Fragen zu demselben Projekt haben, stellen Sie Ihre Fragen bitte in einem Thema, da die Antworten auf eine Frage einen nützlichen Kontext für die anderen bieten und Sie Ihr Projekt nicht ständig wiederholt erklären müssen.

Wiederholte Doppelbeiträge können zu einem vorübergehenden oder dauerhaften Ausschluss aus dem Forum führen.

Könnten Sie sich einen Moment Zeit nehmen, um zu erfahren, wie Sie das Forum nutzen?

Es wird Ihnen helfen, in Zukunft das Beste aus dem Forum herauszuholen.

Danke schön.

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

byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 178, 156);
IPAddress targetIP(192, 168, 178, 173);
unsigned int targetPort = 11000;
EthernetUDP udp;

// Port für lokale UDP-Kommunikation
unsigned int UDP_LOCAL_PORT = 12345;


void setup() {
  Ethernet.begin(mac, ip);
  udp.begin(UDP_LOCAL_PORT);
}

void loop() {
  // Datenstruktur gemäß deiner Beschreibung
  byte data[] = {
    0x66, 0xaa, 0xaa, 0xaa, 0xaa, 0x92, 0x0e,
    // Hier kannst du die Daten einfügen. In diesem Beispiel sind sie alle 0x00.

/*  0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, // WEIß
    0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f, 0x7f,
*/
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, //SCHWARZ
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    
    // ab hier nur filler ?
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
    0x00, 
    
    0xbd ,0x5b // Controll sum für Schwarz
    //0x18 ,0xb0 // controll sum für Weiß
  };


  // Sende die Daten über UDP
  udp.beginPacket(targetIP, targetPort);
  udp.write(data, sizeof(data));
  udp.endPacket();

  delay(1000);
}

des müsste der letzte/aktuellste code sein den ich probiert hab welcher an die anzeige gehen soll

Als Mensch KI-Code zu analysieren und zu verstehen ist bedeutend schwieriger als von Menschen geschriebener Code.

Das bedeutet du mutest den Usern fünf bis zehn mal mehr Arbeit zu den Code zu verstehen!
Und das macht kein MENSCH !"

Es ist von entscheidender Bedeutung, Code so zu schreiben, dass Menschen ihn verstehen können, damit wir Fehler finden und beseitigen sowie Code warten und aktualisieren können.

Dies wird nicht mehr nötig sein, wenn Maschinen dies zuverlässig erledigen können – was wahrscheinlich die schwierigste Aufgabe ist!!! -
Dafür bedarf es sehr, sehr präziser Vorgaben, die klar, vollständig und eindeutig sind!

Die KI-Codestruktur erfordert viel mehr „abstraktes Denken“. Vielleicht liegt es daran, dass die ganze Aufgabe für eine KI ohne Zugang zur menschlichen Realität „abstrakt“ ist ...

Seien also bitte so freundlich zu jenen Mitgliedern, die ihre Zeit für zu wertvoll halten, um sie für vorübergehende Verbesserungen zu verschwenden, die von einer KI, die kein wirkliches Verständnis für eine bestimmte Aufgabe hat, Schritt für Schritt wieder zunichte gemacht werden.

Entweder du steigst auf konsequentes du als Mensch lernst Programmieren um.
Und dann wirst du hier hunderte Fragen beantwortet bekommen
oder
du bleibst konsquent bei KI.
Diese KI ist doch angeblich soooooooooo intelligent.
Schreibe der KI immer weitere Prompts bis der Code so funktioniert wie du es möchtest.

vgs

Wenn man etwas neues zu programmieren beginnt dann empfiehlt es sich immer mit einem Demo-Code zu beginnen von dem bekannt ist das die Software korrekt ist.

Du benutzt die library EthernetUdp.h da gibt es ein Unterverzeichnis mit Beispielcodes
u.a. diesen hier

/*
 UDPSendReceiveString:
 This sketch receives UDP message strings, prints them to the serial port
 and sends an "acknowledge" string back to the sender

 A Processing sketch is included at the end of file that can be used to send
 and received messages for testing with a computer.

 created 21 Aug 2010
 by Michael Margolis

 This code is in the public domain.
 */


#include <Ethernet.h>
#include <EthernetUdp.h>

// Enter a MAC address and IP address for your controller below.
// The IP address will be dependent on your local network:
byte mac[] = {
  0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED
};
IPAddress ip(192, 168, 1, 177);

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

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];  // buffer to hold incoming packet,
char ReplyBuffer[] = "acknowledged";        // a string to send back

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

void setup() {
  // You can use Ethernet.init(pin) to configure the CS pin
  //Ethernet.init(10);  // Most Arduino shields
  //Ethernet.init(5);   // MKR ETH shield
  //Ethernet.init(0);   // Teensy 2.0
  //Ethernet.init(20);  // Teensy++ 2.0
  //Ethernet.init(15);  // ESP8266 with Adafruit Featherwing Ethernet
  //Ethernet.init(33);  // ESP32 with Adafruit Featherwing Ethernet

  // start the Ethernet
  Ethernet.begin(mac, ip);

  // Open serial communications and wait for port to open:
  Serial.begin(9600);
  while (!Serial) {
    ; // wait for serial port to connect. Needed for native USB port only
  }

  // Check for Ethernet hardware present
  if (Ethernet.hardwareStatus() == EthernetNoHardware) {
    Serial.println("Ethernet shield was not found.  Sorry, can't run without hardware. :(");
    while (true) {
      delay(1); // do nothing, no point running without Ethernet hardware
    }
  }
  if (Ethernet.linkStatus() == LinkOFF) {
    Serial.println("Ethernet cable is not connected.");
  }

  // start UDP
  Udp.begin(localPort);
}

void loop() {
  // if there's data available, read a packet
  int packetSize = Udp.parsePacket();
  if (packetSize) {
    Serial.print("Received packet of size ");
    Serial.println(packetSize);
    Serial.print("From ");
    IPAddress remote = Udp.remoteIP();
    for (int i=0; i < 4; i++) {
      Serial.print(remote[i], DEC);
      if (i < 3) {
        Serial.print(".");
      }
    }
    Serial.print(", port ");
    Serial.println(Udp.remotePort());

    // read the packet into packetBufffer
    Udp.read(packetBuffer, UDP_TX_PACKET_MAX_SIZE);
    Serial.println("Contents:");
    Serial.println(packetBuffer);

    // send a reply to the IP address and port that sent us the packet we received
    Udp.beginPacket(Udp.remoteIP(), Udp.remotePort());
    Udp.write(ReplyBuffer);
    Udp.endPacket();
  }
  delay(10);
}


/*
  Processing sketch to run with this example
 =====================================================

 // Processing UDP example to send and receive string data from Arduino
 // press any key to send the "Hello Arduino" message


 import hypermedia.net.*;

 UDP udp;  // define the UDP object


 void setup() {
 udp = new UDP( this, 6000 );  // create a new datagram connection on port 6000
 //udp.log( true ); 		// <-- printout the connection activity
 udp.listen( true );           // and wait for incoming message
 }

 void draw()
 {
 }

 void keyPressed() {
 String ip       = "192.168.1.177";	// the remote IP address
 int port        = 8888;		// the destination port

 udp.send("Hello World", ip, port );   // the message to send

 }

 void receive( byte[] data ) { 			// <-- default handler
 //void receive( byte[] data, String ip, int port ) {	// <-- extended handler

 for(int i=0; i < data.length; i++)
 print(char(data[i]));
 println();
 }
 */

jetzt probiere mal diesen Code aus ob damit etwas auf deinem PC ankommt.
Die IP-Adressn musst du natürlich auf deinen PC anpassen

vgs

Bitte verlinke das Produkt.
Bitte verlinke das Datasheet der Anzeige bzw poste die Beschreibung in einer besser lesbaren Qualität.
Der Link auf die CRC Berechnung soll auch anklickbar sein.

erstmal tut es mir leid dass ich jetzt erst antworte, hatte einfach zu viel anderes zu tun.
im Anhang ist die Datei welche das Protokoll beschreibt .
und das ist der link vom Hersteller. https://flipdots.com/en/home/ Ich habe das XY5 Board in der Ethernet Ausführung und mein ziel ist es dieses über den Arduino (oder Pi4) so anzusteuern das bei bestimmten Inputs aufm Arduino (oder Pi4) bestimmte Sachen angezeigt werden. Falls irgendjemand ne bessere Idee hat bin ich auch offen für diese.

Flip dots protocols 7x7 7x14 7x28 LAN and SERIAL_ Octo_23.pdf (85,8 KB)

*Edit Datei angefügt

ich glaub da fragst jetzt besser mal beim Hersteller nach was du bei einem XY5 Board schicken musst, denn das ist nicht mal im Serial Protokoll angeführt.

Und was du da als pix data lenght verwenden sollst.

Was passiert wenn man eines der gegebenen Beispiele sendet?

Oder du sniffst mit Wireshark mit was der originale Controller so raus schickt...

also ich habe eigentlich kein Problem mit dem was ich senden muss. dies habe ich schon rausgefunden wies funktioniert und durch senden von meinem pc aus(mit Packet Sender) bestätigt. Mein Problem ist es im Moment das ich es nicht hin bekomme dieses packet von meinem Arduino aus an die anzeige zu senden bzw. ich bekomme es nicht mal hin mir vom Arduino aus etwas simples an meinen pc zu senden

ich hab nur ein kurzes Delay im Setup ergänzt und ich sehe UDP Nachrichten Richtung meinem PC

  Ethernet.begin(mac, ip);
  delay(500); // give the W5100 a little bit to get set
  udp.begin(UDP_LOCAL_PORT);

funktioniert dein LAN?
Ist der Arduino pingbar?

Keine gute Idee!
Irgendwann sind die Dateien weg und der Thread ist kaputt.
Verstümmelt bis zur Nutzlosigkeit.

also der Arduino Ist Pingbar.
benutzt du des programm von oben welches ich reingeschickt habe?
wie schaust du ab etw. am pc an kommt? (ich versuchs die ganze zeit mit UDP-Sender/Reciever ausm microsofft Store)?
kanns sein das meine firewall oder meine fritzbox dies blockiert?

ja das programm von oben,
angepasst auf meine IPs und der delay.

Checke ich mit wireshark.

hab ich mir schon gedacht.
kann aber als neuer Benutzer keine Dateien anhängen.

This topic was automatically closed 180 days after the last reply. New replies are no longer allowed.