INFO: Dieses Forum nutzt Cookies...
Cookies sind für den Betrieb des Forums unverzichtbar. Mit der Nutzung des Forums erklärst Du dich damit einverstanden, dass wir Cookies verwenden.

Es wird in jedem Fall ein Cookie gesetzt um diesen Hinweis nicht mehr zu erhalten. Desweiteren setzen wir Google Adsense und Google Analytics ein.

Antwort schreiben 
 
Themabewertung:
  • 0 Bewertungen - 0 im Durchschnitt
  • 1
  • 2
  • 3
  • 4
  • 5
UDP empfangen?
07.08.2015, 16:51
Beitrag #1
UDP empfangen?
Hallo, ich beschäftige mich erst seit heute mit dem Arduino, ein Sketch um diesen mit meiner Hausautomation zu verbinden wenn es an der Haustür klingelt, habe ich bereits gefunden und angepasst. Senden funktioniert also.
Jetzt würde ich aber umgekehrt gerne noch UDP Pakete von der Automation empfangen und damit Ausgänger ein oder ausschalten.

Hier mein Sketch

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

// PIN Settings
#define Klingeltaster 2

// Variable Declaration
char KlingelState = 0;

// Network Settings
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 222);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

// Local UDP port to listen on
unsigned int localPort = 7002;

// Recipient IP
IPAddress RecipientIP(192, 168, 0, 27);

// Recipient UDP Port
unsigned int RecipientPort = 7007;

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];

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

void setup()
{
  // for debug only
  Serial.begin(9600);

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

  // Start UDP
  Udp.begin(localPort);

  // Klingeltaster
  pinMode(Klingeltaster, INPUT);

  // send UDP Ready
  sendUDP("UDP Ready");
}

void loop()
{
// Klingeltaster (Send)
  if (digitalRead(Klingeltaster) == LOW && KlingelState != 0)
  {
    sendUDP("Klingel=0");
    KlingelState = 0;
  }

  if (digitalRead(Klingeltaster) == HIGH && KlingelState != 1)
  {
    sendUDP("Klingel=1");
    KlingelState = 1;
  }

delay(20);
}

// Function to send UDP packets
void sendUDP(String text)
{
    Udp.beginPacket(RecipientIP, RecipientPort);
    // Udp.write("Test");
    Udp.print(text);
    Udp.endPacket();
    delay(10);
}

Evtl kann mir ja jemand weiter helfen...
Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.08.2015, 09:25
Beitrag #2
RE: UDP empfangen?
Hier gibts ein gutes Beispiel wie man per UDP Strings senden / empfangen kann:
https://www.arduino.cc/en/Tutorial/UDPSendReceiveString
Grüße Ricardo

Nüchtern betrachtet...ist besoffen besser Big Grin
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
08.08.2015, 11:43
Beitrag #3
RE: UDP empfangen?
Schau mal hier nach

http://www.arduinoforum.de/arduino-Threa...mm-Arduino

Ist auch Grundlage für eine Klingelanlage.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2015, 14:56
Beitrag #4
RE: UDP empfangen?
Hallo, danke für eure Antworten,

aber es fällt mir schwer, das vorhandene Sketch sselbst so anzupassen, dass es UDP entgegen nimmt um dann ausgänge zu schalten. Selbst der Link mit der Hilfe bringt mich aktuell nicht weiter...

Das fertige Projekt im 2. link ist mir eigentlich auch zu umfangreich.
Im Prinzip brauche ich nur Hilfe beim erweitern meines funktionierenden Sketches um einfach die Ausgeänge zu schalten.

Danke
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
09.08.2015, 15:34
Beitrag #5
RE: UDP empfangen?
Hi,

ich kann Dir nur raten, UDP-Pakete (Bekommst Du hin, ist wirklich nicht schwer) einzeln zu empfangen und einzeln (siehe Links rkuehle) ) zu senden, um zu verstehen, wie das funktioniert. Erst einmal ganz OHNE das "Klingelgedöns".

Dauert länger, der AHA-Effekt ist um so größer .

Es gibt eine App für Android , die heißt TCP/UDP Terminal. Ist ganz einfach und es funktioniert. UND Du siehst, was wirklich alles ankommt , wenn etwas gesendet wurde ! Habe ich gerade gehabt :

Kleiner Tip :

In den Grundbibliotheken ist der Wert UDP_TX_PACKET_MAX_SIZE mit 24 eingetragen und ich habe mich immer gewundert, warum nach 2x Zeichen nur Grütze ankommt .

Lösung : habe mir im Sketch eine eigene Puffergröße erstellt UND diesen Verweis benutzt (gesamten Sketch durchsuchen !!!), eine Änderung in der Grundblibliothek hatte keine Wirkung gezeigt.

#define UDP_TX_PACKET_MAX_SIZE_NEW 96

Deiner loop-Schleife fehlt ein UDP-Empfangsteil,was nachfragt, welche Daten über UDP-Ankommen, deswegen der Hinweis auf meinen Sketch (den ich übrigens auch noch ändern muss ! Stichwort : UDP_TX_PACKET_MAX_SIZE).

Einfach mal so was reinschreiben oder kopieren is nicht, das funktioniert nicht. Probieren und verstehen, auch wenns länger dauert, Du hast mehr davon .

Und das sagt Dir einer, der es am Anfang auch so gemacht hat.
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
10.08.2015, 09:36
Beitrag #6
RE: UDP empfangen?
Ich möchte mich eigentlich nicht weiter mit dem Arduino beschäftigen, da ich das Gerät für mehr nicht benötige.
Ich habe ein weiteres Sketch gefunden und konnte es dann selbst zusammenbasteln, dass das was ich haben möchte funktioniert.

Für alle die so etwas evtl auch mal brauchen, hier der Sketch

Code:
#include <SPI.h>
#include <Ethernet.h>
#include <EthernetUdp.h>
boolean reading = false;

// PIN Settings
#define Klingeltaster 2

// Variable Declaration
char KlingelState = 0;

// Network Settings
byte mac[] = { 0xDE, 0xAD, 0xBE, 0xEF, 0xFE, 0xED };
IPAddress ip(192, 168, 0, 222);
IPAddress gateway(192, 168, 0, 1);
IPAddress subnet(255, 255, 255, 0);

EthernetServer server = EthernetServer(80);

// Local UDP port to listen on
unsigned int localPort = 7002;

// Recipient IP
IPAddress RecipientIP(192, 168, 0, 27);

// Recipient UDP Port
unsigned int RecipientPort = 7007;

// buffers for receiving and sending data
char packetBuffer[UDP_TX_PACKET_MAX_SIZE];

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

void setup()
{
  // for debug only
  Serial.begin(9600);

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

  // Start UDP
  Udp.begin(localPort);

  // Klingeltaster
  pinMode(Klingeltaster, INPUT);
  pinMode(3, OUTPUT);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(6, OUTPUT);
  pinMode(7, OUTPUT);
  pinMode(8, OUTPUT);
  pinMode(9, OUTPUT);

  // send UDP Ready
  sendUDP("UDP Ready");
}

void loop()
{

// warten auf Anfragen von Clients
  checkForClient();
  
// Klingeltaster (Send)
  if (digitalRead(Klingeltaster) == LOW && KlingelState != 0)
  {
    sendUDP("Klingel=0");
    KlingelState = 0;
  }

  if (digitalRead(Klingeltaster) == HIGH && KlingelState != 1)
  {
    sendUDP("Klingel=1");
    KlingelState = 1;
  }

delay(20);
}

// Function to send UDP packets
void sendUDP(String text)
{
    Udp.beginPacket(RecipientIP, RecipientPort);
    // Udp.write("Test");
    Udp.print(text);
    Udp.endPacket();
    delay(10);
}

void checkForClient(){

  EthernetClient client = server.available();

  if (client) {

    
    boolean currentLineIsBlank = true;
    boolean sentHeader = false;

    while (client.connected()) {
      if (client.available()) {

        if(!sentHeader){
          // HTML senden
          client.println("HTTP/1.1 200 OK");
          client.println("Content-Type: text/html");
          client.println();
  
          client.println("<HTML>");
          client.println("<HEAD>");
          client.println("<TITLE>Arduino</TITLE>");
          client.println("</HEAD>");
          client.println("<BODY>");
          client.println("Arduino IO control <br>");
          client.println("<br>");
          client.println("</a>");
          
          client.println("Out 03");
          client.println("<a href=\"/?c\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?d\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 04");
          client.println("<a href=\"/?e\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?f\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 05");
          client.println("<a href=\"/?g\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?h\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 06");
          client.println("<a href=\"/?i\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?j\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 07");
          client.println("<a href=\"/?k\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?l\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 08");
          client.println("<a href=\"/?m\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?n\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("Out 09");
          client.println("<a href=\"/?o\" target=\"inlineframe\">ON</a>");
          client.println("<a href=\"/?p\" target=\"inlineframe\">OFF</a><br>");
          
          client.println("<br>");
          client.println("</a>");
        
          client.println("<a href=\"/?cegikmo\" target=\"inlineframe\">all ON</a>");
          client.println("<a href=\"/?dfhjlnp\" target=\"inlineframe\">all OFF</a><br>");
          
          client.println("<IFRAME name=inlineframe style=\"display:none\" >");          
          client.println("</IFRAME>");

          client.println("</BODY>");
          client.println("</HTML>");
          sentHeader = true;
        }
//auslesen der Eingabe

        char c = client.read();

        if(reading && c == ' ') reading = false;
        if(c == '?') reading = true; //found the ?, begin reading the info

        if(reading){
          
//schalten der Ausgänge

           switch (c) {
            
            case 'c':
            //add code here to trigger on 4
              digitalWrite(3, HIGH);
              break;
            case 'd':
            //add code here to trigger on 5
              digitalWrite(3, LOW);
              break;
            case 'e':
            //add code here to trigger on 6
              digitalWrite(4, HIGH);
              break;
            case 'f':
            //add code here to trigger on 7
              digitalWrite(4, LOW);
              break;
            case 'g':
            //add code here to trigger on 8
              digitalWrite(5, HIGH);
              break;
            case 'h':
            //add code here to trigger on 9
              digitalWrite(5, LOW);
              break;  
              case 'i':
            //add code here to trigger on 2
              digitalWrite(6, HIGH);
              break;
            case 'j':
            //add code here to trigger on 3
              digitalWrite(6, LOW);
              break;
            case 'k':
            //add code here to trigger on 4
              digitalWrite(7, HIGH);
              break;
            case 'l':
            //add code here to trigger on 5
              digitalWrite(7, LOW);
              break;
            case 'm':
            //add code here to trigger on 6
              digitalWrite(8, HIGH);
              break;
            case 'n':
            //add code here to trigger on 7
              digitalWrite(8, LOW);
              break;
            case 'o':
            //add code here to trigger on 8
              digitalWrite(9, HIGH);
              break;
            case 'p':
            //add code here to trigger on 9
              digitalWrite(9, LOW);
              break;
          }

        }

        if (c == '\n' && currentLineIsBlank)  break;

        if (c == '\n') {
          currentLineIsBlank = true;
        }else if (c != '\r') {
          currentLineIsBlank = false;
        }

      }
    }

    delay(1); // pause für den Browser
    client.stop(); // Verbindung trennen

  }

}
Alle Beiträge dieses Benutzers finden
Diese Nachricht in einer Antwort zitieren
Antwort schreiben 


Möglicherweise verwandte Themen...
Thema: Verfasser Antworten: Ansichten: Letzter Beitrag
  NRF24L01+ "Ping" senden, empfangen, bestätigen MeisterQ 8 377 23.08.2016 13:19
Letzter Beitrag: MeisterQ
  Serielle Schnittstelle - Daten empfangen Datatom 8 773 22.05.2016 18:10
Letzter Beitrag: avoid
  SPI Buffer empfangen BennIY 5 707 17.03.2016 13:35
Letzter Beitrag: Bitklopfer
  DMX Signal mit Arduino empfangen, aber wie? mat21his 4 658 28.01.2016 16:20
Letzter Beitrag: ardu_arne
  IR Pioneer empfangen Respun 9 982 07.01.2016 23:26
Letzter Beitrag: Respun
  Mit dem Webserverbeispiel senden und empfangen. arduinofan 3 677 09.12.2015 12:41
Letzter Beitrag: arduinofan
  I2C mehr als 32-Byte empfangen chhec 10 773 16.11.2015 11:26
Letzter Beitrag: chhec
  Daten per USB senden/empfangen chhec 6 1.057 03.11.2015 09:15
Letzter Beitrag: arduinofan
  Webserver Daten empfangen und Diagramm erstellen KK66 2 1.085 16.07.2015 07:34
Letzter Beitrag: KK66
  NRF24 soll Daten empfangen und senden... MaHaI976 2 938 08.06.2015 19:36
Letzter Beitrag: MaHaI976

Gehe zu:


Benutzer, die gerade dieses Thema anschauen: 1 Gast/Gäste