Arduino UDP Kommunikation

Nachdem der Arduino Uno bereits ein Ethernet Shield bekommen hat, soll der Arduino heute UDP Pakete senden und empfangen.

Hier ein kleines HowTo um mit dem Arduino UDP Pakete zu senden und empfangene Pakete zu verarbeiten.

Versuchsaufbau

Der Arduino UDP Versuchsaufbau besteht aus einer LED an Pin 7 und einem Taster an Pin 2. Die LED wird später über 071 (AN) und 070 (AUS) gesteuert. Der Taster sendet später ein 020 (gedrückt = LOW) und 021 (losgelassen = HIGH) an den Empfänger.Arduino UDP Steckplatine

Arduino UDP Sketch

Alles zu erklären wäre jetzt etwas viel. Das wichtigste ist MAC Adresse, IP Adressen und die UDP Ports anzupassen. Die Funktionen zum senden (sendUDP) und empfangen (checkUDP) habe ich ausgelagert um die Übersicht zu erhöhen.

 Test und Verwendungszweck

Testen kann man das ganze sehr gut mit dem Tool Packet Sender (externer Link: PacketSender.com) oder einem anderen UDP Tool. Mit diesem Grundgerüst ist es sehr schnell möglich über das Netzwerk z. B. ein 8-fach Relais Modul zu steuern oder Taster anzubinden. Mit einem Arduino Mega wären dann noch mehr Ein- und Ausgänge möglich. Wie das ganze in die Loxone eingebunden wird zeige ich im nächsten Beitrag.

16 Gedanken zu „Arduino UDP Kommunikation

  1. Hi Stefan,
    vielen Dank für deinen Sketch! Hat mir für die UDP-Übertragung zwischen Arduino und Loxone massiv weitergeholfen!
    Der Schalter in deiner Zeichnung sollte aber über einen Widerstand – wie unter http://funduino.de/index.php/3-programmieren/nr-5-tastendruck erläutert – eingebunden werden, damit es korrekt funktioniert. Nach deiner Anleitung liefert ein Druck auf den Taster eine 0 und beim Loslassen eine 1.

    Grüße und bis bald mal wieder
    Jörg

    PS: Werde mit dem Arduino jetzt wohl erst einmal eine automatische Bewässerung einiger Topfpflanzen mit Regelung bzw. Steuerungsmöglichkeiten über Loxone umsetzen…

    1. Hallo Jörg,

      freut mich das dir die Beiträge geholfen haben! Einen Widerstand muss du nicht zwingend verwenden! Ich nutze den internen PullUp Widerstand vom AVR-Mikrocontroller und spare mir so die zusätzliche Verkabelung. Auf der Seite Arduino Playground ist der Unterschied anschaulich erklärt. Man muss nur den internen Pull Up Widerstand im Setup mit digitalWrite(pin, HIGH); aktivieren und die If-Abfrage auf LOW statt auf HIGH setzen, um einen Tastendruck zu erkennen. Also vom Prinzip wie bei der Loxone den Eingang invertieren wenn ein Dauerplus anliegt.

      Viele Grüße
      Stefan

  2. Hallo,

    Danke fur deine anleitungen. Ich mochte fragen wie soll ich UDP paket schicken im Loxone einstellen?
    Geht es so: das Loxone schickt UDP paket zu arduino (zu Relay ON) , dan kann es auch status ON/OFF bei Loxone lessen?

    Oder es geht nur so das Loxone schickt macht ON command, dann macht OFF command? Keine info uber status (fur web interface)

    oder man muss dafur Loxone RS485 oder ModBus extension kaufen?
    Ich mochte es fur Loxone -> Arduino -> Relays ON/OFF benutzen
    Danke

    1. Hallo David,

      hast du den Beitrag Loxone UDP Kommunikation schon gelesen? Hier war es eine LED die per UDP Befehl ein- und ausgeschaltet wurde. Im Endefekt nichts anderes als ein Relais.

      Ein RS485 Modul benötigst du für die Ansteuerung von Koppelrelais nicht. Wenn du viele Koppelrelais hast, ist eventuell ein MCP23017 I2C I/O Port sinnvoll.

      Viele Grüße
      Stefan

  3. Hallo,

    Ja klar hab ich nachher gefunden…Ich hab das jetzt uber Loxone und es lauft 🙂
    Geht es auch funktion Knopf „halten“ machen? Veil wann ich mach druck und halte es schickt nur 1-druck.
    Ich bin nur gerade mit Arduino angefangen so ich kann noch nicht code schreiben von Anfang aber modifizieren kann ich schon etwas 🙂

    Hast du es auch mit Wifi Shield ausprobiert? oder da kann die pakete verloren sein ?

    1. Hallo David,

      freut mich das es funktioniert! Ich gehe mal davon aus das du an dem virtuellen Ausgang einen Taster angeschlossen hast?! Wenn ja kannst du eine „Halten“ Funktion am einfachsten mit einem Taster Baustein in der Loxone aufbauen. Diesen einfach vor dem virtuellen Ausgang setzen und Taster an Eingang „Tr“ anschließen. So wechselt das Relais bei jeden Tastendruck den Zustand.

      Egal ob du mit WLAN Modul, Ethernet Shield, 433 MHz Sender, RS485 oder irgendetwas anderem arbeitest, wenn alle Parameter stimmen ist die Kommunikation sehr stabil. Wenn du z. B. schlechten Empfang hast oder sich die Geräte gegenseitig blockieren musst du die Kommunikation bidirektional aufbauen und ggf. ein Errorhandling implementiert werden. Das wird dann aber schon komplexer.

      Viele Grüße
      Stefan

  4. Hallo,

    Danke fur dein tip. Jetzt habe ich noch andere Button2 / LED2 und RELAY 7,8 im code gegeben , aber bei Button 1 oder 2 druck es druck sich mehr mals. Deine original code version ist es ok, kannst du das anschauen was kann da falsch sein?

    Danke

    1. Hallo David,

      dein Sketch (habe ihn aus deinem Kommentar entfernt) war auf dem ersten Blick nur im Aufbau falsch. Abgesehen von den leeren Include Zeilen am Anfang waren darin zwei Loop Schleifen? Das funktioniert nicht. Hast du den richtigen Sketch gepostet?

      Bitte überarbeite den Sketch nochmal, sonst sah er schon ganz gut aus.

      Viele Grüße
      Stefan

  5. neue update:
    ich hab versucht simple code machen nur 1x led,button,relay (https://drive.google.com/open?id=0B1cE2_ezqj26all1cU9LMEw3RkU) und es geht wieder sofort am Loxone 7.4 und 8
    Dann wieder 2x led,button,relay, display, senzor DHT22 (https://drive.google.com/open?id=0B1cE2_ezqj26ZVdlVllLbXpLLWc)
    und es geht wieder ap und zu 🙁

    Wann hast du lust kanst du das vielleicht angucken wo kann das problem sein? Es fangt am line 162 und runter,

    Danke

    1. Hallo David,

      ich habe leider aktuell etwas wenig Zeit das ganze nachzustellen, habe es noch nicht mal geschafft die Loxone Config 8 zu installieren. Ich habe mir den Sketch Greenhouse2-working-inprogress3 angeschaut. Mir sind nur folgende Punkte aufgefallen:
      – In Zeile 158 und 180 hast du mittendrin geschweifte Klammern gesetzt. Ich weiß nicht was das für Auswirkungen hat?!
      – In Zeile 186 liest du den DHT Sensor nochmal. Das kannst du kürzen, schau dir doch mal den Sketch vom Arduino Info Display an.

      Viele Grüße
      Stefan

  6. hi David

    Did you allready fixed the reading on the dht 22 sensor
    now its like
    temp: 20 ° instead of 20.00°
    i tried with a long integer but it doesnt change
    hope you fixed this and can help me out

    greetz

    michael

    1. hello Michael,

      to be honest i dont remember :D, but if im not mistaken i try to contact loxone also and they werent much help.
      haven’t touch it for some time, busy with other things…
      But i will have a look definitely, as spring is coming and i have to come to that project again. Hope within 2 weeks 😉

  7. well ive checked it…

    So from arduino i was sending value like 265 C – in loxone as input is „v.2“ and i was separating it by 10.
    hope it helps 😉

  8. Hallo Stefan,
    ich bin Arduino Neuling, habe einen Uno mit shield 2. Deinen sketch habe ich kopiert, aber leider wird die
    geänderte IP Adresse nicht übernommen. Mac habe ich selbstverständlich geändert. Die Leds vom shield
    blinken lustig vor sich hin. Hast Du eine Idee wo das Problem liegen könnte?
    Danke im voraus.
    LG Anton

    1. Hallo Anton,

      ich gehe jetzt davon aus, dass du das Ethernet Shield nicht über die IP Adresse die du gewählt anpingen kannst?! Es sollten auf der Platine dauerhaft die Link und natürlich auch die Power LED leuchten. Wenn die Link Lampe nicht dauerhaft leuchtet und er immer wieder versucht eine Verbindung aufzubauen kann es sein, dass die Auto-Negotiation nicht funktioniert und somit keine Verbindung zustande kommt. Probiere wenn möglich mal einen anderen Switch (möglichst keinen Gigabit Switch) um auf der sicheren Seite zu sein. Wenn die Link Lampe dauerhaft leuchtet, versuche mal mit folgender Zeile am Ende vom Setup die IP-Adresse über den Serial Monitor auszugeben.

      Serial.println(Ethernet.localIP());

      Probiere am besten auch mal das DhcpAddressPrinter Example Skript aus der Arduino IDE aus und lass dir eine IP Adresse vom DHCP Server ausstellen.

      Viele Grüße
      Stefan

  9. Hallo Stefan,
    danke für Deine Antwort. Die „link“ und „power“Led leuchten permanent.
    Ich habe Deine Zeile eingefügt, es passiert jedoch nichts.
    Schön langsam glaube ich, dass die shield Baugruppe defekt ist.
    LG Anton

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

*

code