Inhaltsverzeichnis

Mit dem Arduino ins WLAN

Um mit dem Arduino ins WLAN zu kommen, brauchen wir zusätzliche Hardware. Die WLAN-Module, die wir im Kurs haben, basieren auf der Roving Networks Wifly. Die Module enthalten einen eigenen Prozessor, der sich um die Netzwerkkommunikation kümmert, und kommunizieren eine Serielle Schnittstelle mit dem Arduino.

Hardware Anschließen und die Arduino-Library installieren:

Beschrieben in einem eigenen Artikel: WiFly-Modul an den Arduino anschließen

Grundlagen der Kommunikation über IP-Netzwerke und WiFly

IP-Adressen

Grob verkürzt:

Im Netzwerk werden Daten in Pakete verpackt, die eine Absender- und Zieladresse haben. Die Zieladresse muss stimmen, damit die Pakete auch ankommen.

Diese IP-Adressen in einem Heimnetzwerk/WLAN werden meist automatisch vom WLAN-Router an die darin vorhandenen Geräte vergeben (DHCP) und können sich ändern, wenn sie nicht fest eingestellt wurden. Eine typische IP-Adresse in unserem Kurs-WLAN „wally“ ist z.B. 192.168.0.104.

Damit Daten, die ihr von eurem PC aus an den Arduino (oder umgekehrt) schickt, auch ankommen, müsst ihr daher im Programm des Absenders die Adresse des Empfängers ('target', 'outgoing', oder ähnlich) eintragen.

Wie die aktuelle IP-Adresse eurer WiFly lautet, seht ihr in de Ausgabe des Konfigurationsprogramms aus dem vorherigen Abschnitt. Wie die IP eures Laptops lautet, findet ihr je nach Betriebsystem unterschiedlich heraus. Bemüht dazu eine Suchmaschine eurer Wahl…

Ports

Damit mehrere Anwendungen, die auf einem Netzwerkgerät (mit einer IP-Adresse) laufen, nur die jeweils für sie bestimmten Daten bekommen, verwendet jede Anwendung eine eigene „Untermieteradresse, die Port genannt wird. Eine Anwendung kann ihren Port prinzipiell frei wählen, es gibt jedoch einige „standard“-Ports, die üblicherweise für bestimmt Zwecke verwendet werden.

Der „incoming“ Port des Empfängers muss als „outgoing“ Port des Absenders eingetragen werden, damit eine Verbindung zu Stande kommt.

TCP vs. UDP

Ganz kurz:

TCP stellt zunächst Verbindung zwischen zwei Endpunkten einer Netzverbindung, über die danach Daten ausgetauscht werden können. Dabei vermeidet es im Hintergrund automatisch Datenverluste und Netzwerküberlastungen. Allerdings muss ein Programm dafür Mechanismen enthalten, mit Verbindungsabbrüchen umzugehen und diese ggf. wiederherzustellen.

Im Gegensatz dazu ist UDP verbindungslos und ohne Fehlerkorrekturmechanismen, d.h. Daten werden an eine Adresse geschickt, ohne dass vorher eine Verbindung aufgebaut werden muss. Dafür gibt es auch keine Automatik, die sich darum kümmert, verlorengegangene Pakete neu zu versenden.

Die WiFly unterstützt beide Protokolle, OSC (siehe unten) läuft üblicherweise über UDP.

Die WiFly im Netzwerk

Der Funktionsumfang der Wifly-Module ist leider recht beschränkt, aber für für viele Anwendungen ausreichend.

Die WiFly lauscht auf einem vorgegebenen Port auf Pakete und gibt deren Inhalt unverzüglich über ihre serielle Schnittstelle aus.

Das bedeutet:

…Woraus wiederum folgt:

Da eine einfache Serielle Verbindung im Grunde die gleichen Einschränkungen hat, ist es trotzdem sehr gut möglich (auf der Arduino Seite nach der ersten Konfiguration der Wifly sogar ohne irgendwelche Anpassungen des Programms), eine direkte Kommunikation über eine Serielle Schnittstelle durch eine WLAN-Verbindung zu ersetzen.

Direkte Datenverbindung zwischen Processing und Arduino

Java bringt schon alles mit, was nötig ist, um mit wenigen Zeilen Code eine TCP-Verbindung mit der WiFly/dem Arduino herzustellen.

Beispielcode für Processing mit Kommentaren gibt es hier: https://github.com/Zapalot/simpleTcp/blob/master/simpleTcp.pde

Das passende Arduino Programm (für eine fertig Konfigutierte Wifly) hier: https://github.com/Zapalot/SoftSerialRelay

OpenSoundControl (OSC)

Eine sehr bequeme Möglichkeit, Daten mit dem Arduino auszutauschen ist das OSC-Protokoll, welches ursprünglich für die Steuerung von elektronischen Musikinstrumenten entwickelt wurde.

Wie ihr OSC in Processing und Arduino nutzen könnt, erfahrt ihr in einem separaten Artikel