banner left Boxtec Banner
Platzhalter BoxtecProdukteForumShopKontaktPlaygroundn/aJobs
 

This is an old revision of the document!


Wifi / WLan Kommunikation mit Arduino

Im folgenden zeigen wir anhand von Beispielen verschiedener Module, wie ein Arduino über ein Wireless LAN kommunizieren kann. Es existieren eine Vielzahl von Modulen, die eine WLan Anbindung für Arduino ermöglichen.

RN-XV WiFly Modul

Als erstes haben wir uns das RN-XV WiFly Modul von Roving Networks vorgenommen, dieses bietet einiges an Funktionalität für den Preis:

31015.jpg

Konfiguration WiFly Modul

Das Modul kommt vorteilhafterweise gleich mit einer integrierten Antenne und ist in jedem XBee Sockel einsetzbar.

Um das Modul zu konfigurieren wird eine serielle Verbindungen mit z.B. einem Foca oder UartSBee eingesetzt. Natürlich geht das auch mit Shields die eine direkte Kommunikation mit dem XBee Modul erlauben, wie z.B. dem Itead XBee Shield. Die Konfiguration selbst geschieht mit einfachen Kommandos, welche über die serielle Schnittstelle abgesetzt werden. Es gilt dabei zu beachten, dass das WiFly Modul zwei exklusive Betriebsmodi für seine Schnittselle kennt:

  • command mode
  • data mode

Nach dem Start befindet sich das WiFly im data mode, zum Umschalten in den command mode wird standardmässig folgende Zeichenfolge gesendet (konfigurierbar):

$$$

Dabei sollte nach dem letzten $-Zeichen für min. 250ms kein anderes Zeichen gesendet werden, da die Drahtlos-Fliege dies sonst als Teil eines zu übermittelnden Datenpakets ansieht und nicht in den command mode wechselt. Ist der Wechsel in den command mode erfolgreich, quittiert das die Fliege mit einem Prompt der die Firmware Version enthält:

<2.32>

Standardmässig ist das WiFly Modul auf 9600 (8N1) eingestellt, dies kann jedoch im Konfigurationsmodus ebenfalls geändert werden.

Ist die Verbindung mit einem Terminalprogramm (Achtung: der Serial Monitor von Arduino eignet sich dazu NICHT) erstellt, und mit $$$ in den command mode gewechselt, kann ein Modul mit z.B. folgenden Befehlen einfach an eine WPA2-PSK gesicherters WLan angebunden werden: Erfolgreiche Kommandos werden vom Modul mit dem String AOK beantwortet.

set wlan ssid IHRE_WLAN-SSID
set wlan phrase Ihr-WPA2-preshared_Key
set wlan rate 0
set ip dhcp 1
set comm idletimer 3
set ip host 10.10.200.3
set ip remote 8000
join IHRE_WLAN-SSID

Foca mit aufgesetztem WiFly

Jedes Kommando sollte jeweils mit AOK quittiert werden, dann wurde dies erfolgreich ausgeführt, d.h. das sieht dann etwa so aus im Terminal:

<2.32> set wlan ssid IHRE_WLAN-SSID
AOK
<2.32> set wlan phrase Ihr-WPA2-preshared_key
AOK
<2.32> set wlan rate 0
AOK
<2.32> set ip dhcp 1
AOK
<2.32> set comm idletimer 3
AOK
<2.32> set ip host 10.10.200.3
AOK
<2.32> set ip remote 8000
AOK
<2.32> join IHRE_WLAN-SSID
DeAuth
Auto-Assoc IHRE_WLAN-SSID chan=3 mode=WPA2 SCAN OK
Joining IHRE_WLAN-SSID now..
<2.32> Associated!
DHCP: Start
DHCP in 15ms, lease=1200s
IF=UP
DHCP=ON
IP=10.10.200.139:2000
NM=255.255.255.0
GW=10.10.200.1
<2.32>

Erklärungen zur Konfiguration

Das Modul ist nun am Netzwerk angemeldet und hat eine IP-Adresse vom DHCP Server bezogen (10.10.200.139).

Das WiFly hört auf Port tcp/2000 und verbindet sich bei Erhalt des open-Befehls mit dem Server bei 10.10.200.3 auf Port tcp/8000.

Der Befehl set comm idletimer 3 bewirkt, dass das Modul offene TCP-Verbindungen nach 3s ohne Datenverkehr wieder schliesst und damit für neue Verbindungen bereit ist.

Mit dem Befehl set wlan rate 0 wir die Datenrate auf 1Mbit/s gesetzt, dies ausreichend für die meisten Zwecke und erhöht die Zuverlässigkeit/Reichweite des Moduls.

Mehr Informationen zu den Konfigurationsmöglichkeiten finden Sie im aktuellen WiFly User Manual.

Konfiguration speichern

Wichtig: Die Konfiguration ist nun noch nicht auf dem WiFly Modul dauerhaft gespeichert, dies geschieht erst mit dem Kommando save:

<2.32> save
AOK

Es ist auch möglich, die Konfiguration unter einem eigenen Namen zu speichern und diese wiederum mit dem Befehl load <config-name> zu laden:

<2.32> save HOMENET
AOK
<2.32> load HOMENET
AOK

Factory Reset

Um die Default Werte nach Auslieferung des Moduls wieder herzustellen kann der Befehl factory RESET verwendet werden.

Konfiguration des WiFly Moduls aus dem Arduino Sketch

Manchmal will man vermeiden des Modul je wieder ausbauen zu müssen nur weil z.B. das WLAN Passwort geändert hat. In so einem Fall kann man mit einigen Tricks das WiFly Modul auch über Software Serial beim Start konfigurieren.

Fallstricke

In unseren Tests hat sich gezeigt, dass bei der Verwendung von SoftwareSerial bei 9600 immer wieder Zeichen verloren gehen und dies einen zuverlässigen Start verunmöglicht. Mit der AltSoftSerial von PJRC dagegen hatten wir sofort sehr gute Resultate und nach etwas Feintuning der Delays nun sogar äusserst zuverlässigen Betrieb mit Adhoc Konfiguration aus dem Arduino Sketch. Einziger Nachteil dabei ist, dass die zu verwendenden Pins fest vorgegeben sind (TX: 9, RX: 8) und mit der Verwendung der Library kein PWM mehr auf Pin 10 zur Verfügung steht.

Beispielcode

Konfiguration WiFly Moduls aus der setup() Funktion heraus:

# Konfiguration eines WiFly Moduls 'on-the-fly'
# 2013 boxtec internet appliances
 
#include <AltSoftSerial.h>
// TX: 9, RX: 8, Unusable PWM: 10
// see http://www.pjrc.com/teensy/td_libs_AltSoftSerial.html
 
#define CMD_DELAY 540
#define ESC_DELAY 685
 
AltSoftSerial mySP;
 
void setup() {
  mySP.begin(9600);
  delay(CMD_DELAY);
  sendESC("$$$", ESC_DELAY); 
  sendCMD("reboot",1600);
  sendCMD("factory RESET", 1800);
  sendESC("$$$", ESC_DELAY); 
  sendCMD("set wlan rate 0", CMD_DELAY);
  sendCMD("set wlan ssid IHRE-WLAN-ID", CMD_DELAY);
  sendCMD("set wlan phrase Ihr-WLAN-Passw0rt", CMD_DELAY);
  sendCMD("set ip dhcp 1", CMD_DELAY);
  sendCMD("set comm idletimer 1", CMD_DELAY);
  sendCMD("set comm remote 0", CMD_DELAY);
  sendCMD("set comm match 13", CMD_DELAY);
  sendCMD("set ip host 192.68.1.100", CMD_DELAY);
  sendCMD("set ip remote 8000", CMD_DELAY);
  sendCMD("join IHRE-WLAN-ID", 6000);
  sendCMD("exit",100);
}
 
void loop() {
  //
}
 
void sendESC(char esc[], int _delay) {
  mySP.print(esc);
  delay(_delay);
}
 
void sendCMD(char cmd[], int _delay) {
  long _wait = 0;
  mySP.println(cmd);
  delay(1);
}

Praktische Anwendung des WiFly mit Arduino

Wir bauen uns einen Kontroller welche in der Garagenbox angebracht wird, Ziele sind folgende:

  • Messung der Aussentemperatur mit 2 DS18B20 Aussenfühler
  • Messung der Luftfeuchtigkeit (und Innentemperatur) mit DHT22
  • Steuerung eines Lüfters zur Entfeuchtung bei Kondenswasser
  • Erfassen von Bewegungen
  • Schalten eines 12V LED Streifens zur automatischen Beleuchtung
  • Erreichbarkeit und Abfrage der Messwerte und Zustände über Wireless LAN
  • Möglichkeit Grenzwerte für die Lüftreglung remote zu setzen

Unser kleines Projekt umfasst:

  1. Arduino Uno Board
  2. XBee Shield
  3. WiFly
  4. DHT22
  5. 2x DS18B20
  6. Protonly
  7. PIR Sensor
  8. 12V LED Streifen weiss ca. 150cm
  9. MOSFET RFD1405
  10. Solid State Relay zur Lüftersteuerung
  11. einige Widerstände
  12. 12V Netzadapter
  13. wasserfestes Gehäuse
  14. ein blaues LED mit Vorwiderstand für I-Effekt und weil wir es können und noch PWM I/O frei hatten :-)
 
wireless/wifi.1358284083.txt.gz · Last modified: 2013/01/15 22:08 by boxtec
 
 

zum Seitenanfang

Letzte Aktualisierung: © boxtec internet appliances · the better security products