Benutzer-Werkzeuge

Webseiten-Werkzeuge


techniken:wifly

Unterschiede

Hier werden die Unterschiede zwischen zwei Versionen gezeigt.

Link zu dieser Vergleichsansicht

Beide Seiten der vorigen Revision Vorhergehende Überarbeitung
Nächste Überarbeitung
Vorhergehende Überarbeitung
techniken:wifly [2015/01/15 12:53]
fbonowski
techniken:wifly [2016/02/03 12:27]
fbonowski [Direkte Datenverbindung zwischen Processing und Arduino]
Zeile 3: Zeile 3:
 Um mit dem Arduino ins WLAN zu kommen, brauchen wir zusätzliche Hardware. Um mit dem Arduino ins WLAN zu kommen, brauchen wir zusätzliche Hardware.
 Die WLAN-Module,​ die wir im Kurs haben, basieren auf der [[http://​www.microchip.com/​pagehandler/​en-us/​technology/​wifi/​software/​wifly.html|Roving Networks Wifly]]. Die Module enthalten einen eigenen Prozessor, der sich um die Netzwerkkommunikation kümmert, und kommunizieren eine Serielle Schnittstelle mit dem Arduino. Die WLAN-Module,​ die wir im Kurs haben, basieren auf der [[http://​www.microchip.com/​pagehandler/​en-us/​technology/​wifi/​software/​wifly.html|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:​ ===== +===== Hardware Anschließen ​und die Arduino-Library installieren: ===== 
-[[techniken:​wifly:​hardwareInstallation|Eigener ​Artikel: ​Ein WiFly-Modul an den Arduino anschließen]]+[[techniken:​wifly:​hardwareInstallation|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: ​
  
-===== Software für den Arduino ===== +Im Netzwerk werden Daten in Pakete verpackt, die eine [[http://de.wikipedia.org/wiki/IP-Adresse|Absender- und Zieladresse]] haben. ​ Die Zieladresse muss stimmendamit die Pakete auch ankommen.
-Für den Arduino gibt es eine [[http://arduino.cc/de/Guide/​Libraries|Library]], mit der sich die WiFly sehr einfach konfigurieren lässt.\\ +
-Diese müsst Ihr zuerst **herunterladen**:​ [[https://​github.com/​Zapalot/​WiFlyHQ]]+
  
-Dann **Entpacken**...+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''​.
  
-Danach ​**Umbenennen**:​\\ +**Damit Daten, die ihr von eurem PC aus an den Arduino (oder umgekehrt) schicktauch ankommenmüsst ​ihr daher im Programm des Absenders die Adresse des Empfängers ('target''outgoing', oder ähnlich) eintragen.**
-Die der Ordner aus den .zip Dateien, die Ihr von GitHub bekommthaben immer noch ein ''​-master''​ im Dateinamenden ihr duch Umbenennen entfernen müsst. Also z.B. den Ordner ​''​WiFlyHQ-master'' ​in ''​WiFlyHQ''​ umbenennen.+
  
-Und schließlich **ins Arduino library Verzeichnis verschieben**:​\\ +Wie die aktuelle IP-Adresse eurer WiFly lautet, seht ihr in de Ausgabe des Konfigurationsprogramms aus dem vorherigen Abschnitt. 
-Den fertigen Ordner verschiebt ​ihr in die library-Sammlung von Arduino ​(Bei den meisten Leuten liegt die unter ''​Dokumente/Arduino/libraries''​)+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 [[http://de.wikipedia.org/​wiki/​Port_%28Protokoll%29|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: 
  
 +[[http://​de.wikipedia.org/​wiki/​Transmission_Control_Protocol|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.
  
-  * [[https://​github.com/​Zapalot/​ArdOscForWiFlyHQ|ArdOscForWiFlyHQ]] Erlaubt das Senden und Empfangen von [[http://​de.wikipedia.org/​wiki/​Open_Sound_Control|OSC-Nachrichten]] mit dem Arduino.+Im Gegensatz dazu ist [[http://​de.wikipedia.org/​wiki/​User_Datagram_Protocol|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.
  
-===== Ein erster Test ===== +Die WiFly unterstützt beide Protokolle, OSC (siehe untenläuft üblicherweise über UDP.
-Schließt nun alle offenen Arduino Programme ​(Arduino erkennt neu installierte Libraries sonst nichtund öffnet das Beispiel ''​ArdOscForWilfyHQ/​simpleReceiveSoftSerial''​ (Wenn ihr die Wifly ihr eine Software-Serial verwendet) bzw. ''​ArdOscForWilfyHQ/​simpleReceiveHardSerial''​ (Wenn ihr einen Arduino Mega mit einer Hardware-Serial verwendet). Passt im Setup ggf die WLAN-Zugangsdaten an, ladet das Programm hoch und schaut euch die Ausgaben im Serial Monitor an.+
  
-Wenn die Kommunikation zwischen ​Wifly und Arduino nicht klappt ("​Setprompt failed..."​),​ liegt das in 90% der Fälle darandass TX und RX Pins vertauscht bzw. falsch angeschlossen sind.+===== Die WiFly im Netzwerk ===== 
 +Der Funktionsumfang der Wifly-Module ist leider recht beschränktaber für für viele Anwendungen ausreichend.
  
-===== Daten schicken ​aus Processing ===== +Die WiFly lauscht auf einem vorgegebenen Port auf Pakete und gibt deren Inhalt unverzüglich über ihre serielle Schnittstelle ​aus.
-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.+
  
-Eine Library zum verschicken von OSC-Nachrichten ​(über WLAN oder Netzwerkunter Processing gibt es hier: +Das bedeutet: 
-[[http://www.sojamo.de/libraries/oscP5/]]+  * Es ist nicht möglich, den Absender-IP des Pakets festzustellen 
 +  * Wenn Daten schneller ankommen, als das Arduino-Programm sie abholt, gehen sie verloren 
 +  * Welche Daten zu einem Paket gehören, ist (bestenfalls) dadurch erkennbar, dass davor oder danach keine Daten kamen - wenn zwei Pakete schnell hintereinander ankommen garnicht. 
 + 
 +...Woraus wiederum folgt: 
 +  * Wenn ihr mehrere Absender unterscheiden wollt, müsst ihr euch dazu etwas Eigenes einfallen lassen. 
 +  * Ihr habt keine Garantie, dass keine Daten verloren gehen, während euer Programm "nicht hinhört"​. Insbesondere müsst ihr dafür sorgen, dass das sendende Programm nicht schneller sendet, als ihr abholen könnt. 
 +  * Protokolle, die ein UDP-paket als eine abgeschlossene Einheit verwenden (wie das gleich beschriebene OSCfunktionieren nur dann einigermaßen zuverlässig,​ wenn das sendende Programm zwischen zwei gesendeten Paketen eine Pause von einigen 10 Millisekunden einlegt. 
 + 
 +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.
  
-Damit der Code aus den Beispielen funktioniert,​ müssend dort noch die IP Adresse ​und der Port der Wifly eingetragen werdendamit die Nachrichten auch an den richtigen Empfänger kommen...+Wie ihr OSC in Processing ​und Arduino nutzen könnterfahrt ihr in einem [[techniken:​osc|separaten Artikel]]...
  
  
techniken/wifly.txt · Zuletzt geändert: 2016/02/03 12:27 von fbonowski