Table of ContentsZigbee Netzwerke mit ArduinoAuf diesen Seiten möchten wir die aktuellen Erfahrungen und das Wissen zu XBee und ZigBee Netzwerken dokumentieren. Das Dokument wird laufend überarbeitet, sollten Sie Fehler finden oder Anregungen haben, senden Sie bitte eine Email an playground@boxtec.ch. EinführungLeider gibt es eine Vielzahl von XBee-Modulen und die Bezeichnungen der unterschiedlichen Module sind teilweise sehr verwirrend. Wir versuchen im folgenden etwas Übersicht in den Bienenstock zu bringen: XBee Hardware FamilienEs gibt insgesamt 2 XBee Hardware Hauptmodellreihen:
Die Series 1 Modelle wurden zum Teil auch 802.15.4 resp. DigiMesh genannt. Diese Modelle werden nun wieder weiter unterschieden nach Standard und Pro, d.h. es gibt:
Die Pro Modelle verfügen jeweils über mehr Sendeleistung als die Standard Module verwenden aber grundsätzlich die gleichen Features Jedes Modell gibt es auch wiederum mit verschiedenen Antennen, von On-Board über integriert bis extern. Daneben gibt es OEM Module die sich ZNet 2.5 nennen, diese Module sind mit den XBee Series 2 Hardware-kompatibel und können auch auf die entsprechende Firmware gehoben werden. Firmware Versionen
Für die Series 1 existieren verschiedenste Firmware Versionen, die bekanntesten sind dabei die DigiMesh und 802.15.4.
XBee Modul KonfigurationFür die weitere Betrachtung konzentrieren wir uns auf die uns zur Verfügung stehenden ZNet 2.5 Modulen mit 1mW Chip Antenne. Voraussetzungen
Um die Module zu konfigurieren wird ein USB- oder RS232- zu TTL-Wandler benötigt, das kann ein USB-TTL Adapter sein oder aber auch ein Bee-Shield (dabei wird dann der USB-TTL Adapter des Arduino Boards verwendet).
Am einfachsten und komfortabelsten war die Arbeit jedoch mit dem Foca v2.1. Konfigurations-Software X-CTU
Einerseits können die Module mit jedem beliebigen Terminal Programm über AT Kommandos konfiguriert werden.
Installation der SoftwareWindows
Stellen Sie vorab sicher, dass Sie die Treiber für Ihren USB-TTL Adapter installiert haben und dass diese funktionieren.
LinuxDie Software X-CTU läuft nach unseren ersten Erfahrungen einwandfrei unter Linux mit der Windows Laufzeitumgebung wine, es ist allerdings ein kleiner Trick nötig um der Software die für die Windows Welt üblichen COM-Ports zur Verfügung zur stellen.
Unter Linux werden diese Geräte z.B. über /dev/ttyUSB0 (für einen USB-TTL Adapter) oder /dev/ttyS0 (für einen RS232-TTL Adapter) angesprochen.
ln -s /dev/ttyUSB0 ~/.wine/dosdevices/com10 Aktualisieren der Firmware Images von X-CTUStarten Sie X-CTU und wählen Sie den Reiter Modem Configuration, klicken Sie nun auf Download new versions…. Der Download kann einige Minuten in Anspruch nehmen ist aber durchaus empfehlenswert.
Laden Sie nun die Datei xbee_zb.zip mit der Funktion Download new versions… über File in X-CTU - die aktuellen Firmware Images sollten Ihnen nun ebenfalls zur Verfügung stehen. Verbinden des ZigBee ModulsVerbinden Sie Ihr ZigBee Modul über einen USB-Adapter oder Shield mit Ihrem PC. Starten Sie nun X-CTU welches Sie vorher heruntergeladen haben und wählen Sie den COM-Port unter welchem Ihr USB-Adapter im System bekannt ist, z.B. COM5 etc. [Wenn Sie Linux verwenden sehen Sie weiter oben unter Konfigurations-Software nach wie Sie den COM Port für Linux sichtbar machen]. Die Geschwindigkeit ist bei neuen Modulen auf 9600bps voreingestellt, kann aber jederzeit verändert werden:
Wenn dies soweit funktioniert hat, können Sie nun die Konfiguration des Moduls auslesen, verändern und/oder neue Firmware einspielen. Konfiguration auslesenNachdem Sie Ihre Kommunikationseinstellungen erfolgreich geprüft haben können Sie nun die Konfiguration und Firmware Version Ihres Moduls auslesen. Wechseln Sie dazu nun auf den Reiter Modem Configuration, wählen Sie optional in der Auswahl Modem Ihren Modemtyp - in unserem Fall ein XB24-B - und klicken Sie auf Read: Nach einigen Sekunden sollten Sie die ausgelesene Konfiguration und Firmware Version angezeigt erhalten:
Einfache Mesh KonfigurationÜbersicht ZigBee Mesh NetzwerkeDas spannende an den ZigBee Modulen ist, dass die Mesh Netzwerk sich vollkommen automatisch organisieren. Kritiker monieren zwar, dass grössere Netzwerke mit mehr als 100 Modulen mehrere Minuten zum Organisieren benötigen können. Bei weniger Modulen sinkt diese Zeit aber massiv und kann mit ein paar Sekunden bei weniger als 10 Stk. auch durchaus vernachlässigt werden. Bei grösseren Projekten empfiehlt es sich aber dennoch diese Tatsache im Auge zu behalten - so steht das Netzwerk ev. nach einem Stromausfall erst Minuten später wieder zur Verfügung. ZigBee Netzwerk Rollen (Functions)Jedes ZigBee Modul kann eine oder mehrere Rollen im Netzwerk ausüben. Diese Rollen oder Function wie sie in X-CTU genannt werden können entweder Coordinator, Router, End Device resp. Router/End Device sein. Ein ZigBee Netzwerk besteht in der Regel aus einem Coordinator und einem bis vielen Router resp. End Devices welche alle direkt oder indirekt Verbindung mit dem Coordinator halten. Der Coordinator ist insofern auch ein SPOF (Single Point of Failure für das gesamte Netzwerk, ist dieser ausgefallen können Teilnehmer nicht mehr kommunizieren. Digi hält zwar Lösungen für Redundanz vor, trotzdem bleibt dies aber eine Schwachstelle des ZigBee Designs. ZigBee Device Konfigurationen
ZigBee Modul Modi (API/AT)Jede der obenerwähnten Functions oder Rollen gibt es jeweils in zwei Betriebsmodi:
Im AT-Modus können alle an das Modul gesendete Daten transparent bei allen Teilnehmern des Netzwerks wiedergegeben werden. Das kann man sich so in etwa vorstellen wie ein IRC Chatroom bei dem alle jederzeit reden dürfen und alle Nachrichten allen angezeigt werden. Der AT Modus kann aber auch mit Punkt-zu-Punkt resp. Punkt-zu-Mehrpunkt Verbindungen arbeiten. Im Gegensatz dazu wird im API-Modus das Modul bewusst von der MCU/Software gesteuert, d.h. Datenpakete müssen vom Sender mit einer Zieladresse und Payload versehen werden und dem Modul zum Versand übergeben werden. Dieser Ansatz ist aufwendiger zu handhaben, bietet aber natürlich offensichtliche Vorteile in der Skalierung gegenüber dem Broadcast-ähnlichen AT. Für den Arduino ist eine Library für den API Modus verfügbar. Wir bauen nun ein kleines ZigBee Mesh Netzwerk mit 3 Knoten auf, wobei einer davon der Coordinator ist und die anderen beiden als Router fungieren. Wählen der FirmwareDa wir hier mit XBee 2 Modulen arbeiten kommt die ZNet- resp. ZigBee-Firmware Familie als Alternativen in Frage. Auf jeden Fall sollte auf allen Modulen die gleiche Firmware Familie und auch Firmware Version eingesetzt werden. Die ZigBee Firmware ist etwas neuer und bietet mehr Funktionalität aber es wird verschiedentlich davon berichtet, dass bessere Resultate mit der ZNet Firmware erzielt wurden. Wenn Verschlüsselung gewünscht wird, muss entweder die ZNet Firmware verwendet werden, oder aber das Modul auf XB24-ZB upgedatet werden - die dort verfügbare Zigbee Protokoll Version bietet ebenfalls Verschlüsselung. Da wir ZNet OEM Module zur Verfügung haben, werden wir deren ZNet Firmware nun auf ZigBee upgraden und dabei die einige Einstellungen vornehmen. Übersicht Hardware XBee Typen und mögliche Firmware Versionen
Firmware UpgradeStellen Sie sicher, dass Sie Ihr Modul wie unter Konfiguration auslesen beschrieben ansprechen können und lesen Sie entsprechend die Konfiguration mit Read aus. Wählen Sie nun unter Function Set die entsprechende Firmware / Funktion (wir verwenden den AT Modus für unser Beispiel, da wir damit schneller zu Resultaten kommen):
Anmerkung: Wir spielen hier bewusst die aktuellere ZigBee Firmware (EmberZnet 2.5 [XB24-B]) auf, es kann aber sein, dass Sie in Ihrer Umgebung mit ZNet2.5 oder ZigBee (EmberZnet Pro 3.1) bessere Werte erzielen. Hier ist auch Testen angesagt, wichtig ist nur, dass alle Module die exakt gleiche Firmware aufweisen. Stellen Sie sicher, dass bei Ihrem Modul je nach Rolle die folgenden Parameter eingestellt wurden bevor Sie die Firmware hochladen: Coordinator Parameter
Router/End Device Parameter
Die Option Always update firmware muss unbedingt gewählt sein bevor Sie die Firmware und Einstellungen mit Klick auf Write auf das Modul übertragen: Wiederholen Sie diesen Vorgang für alle Module mit den entsprechenden Einstellungen. Wechseln des SoftwarestacksGehen Sie dazu vor wie beim Updaten, d.h. stellen Sie sicher, dass Always Update Firmware angeschaltet ist und wechseln Sie zusätzlich den Modem Typ je nach Wunsch von -B auf -ZB oder umgekehrt von -ZB auf -B (um zu ZNet 2.5 zurückzukehren). Wenn sich die Einstellungsmöglichkeiten zwischen den Firmwaren stark unterscheiden, kann es nötig sein, dass Update-Prozedere mehrmals durchzuführen, da unter Umständen die Einstellungen nicht geschrieben werden können. ZigBee Modul TestEs stehen einige Methoden zur Verfügung um die grundsätzliche Konnektivität erstmal zu prüfen bevor weiterentwickelt wird: Shield Status LEDsWenn Sie Shields verwenden, die eine Status Anzeige mit LEDs haben können Sie nun natürlich so Ihre Module testen. Mehrere USB-AdapterWenn Sie über die Möglichkeit verfügen, mehr als ein Modul gleichzeitig über USB-Adapter oder Shields an Ihrem PC zu betreiben können Sie die Funktion Range Test in X-CTU verwenden um die Verbindung zu testen. Shields und USB-AdapterAnsonsten können Sie auch Ihr Shield mit dem Modul bestücken und jedes Modul etwas anderes regelmässig senden lassen - diese Daten empfangen Sie dann am Coordinator. Verbinden Sie dazu das Coordinator Modul via USB-Adapter mit Ihrem PC, verbinden Sie sich mit X-CTU und wählen Sie Terminal. Laden Sie nun folgenden Sketch auf Ihren mit einem Router Modul und Shield bestückten Arduino oder ein kompatibles Board und passen Sie bei mehreren Modulen auf jedem Board die Variable XBEE_ID an: #define XBEE_ID 1 void setup() { Serial.begin(9600); } void loop() { Serial.print("This is XBEE: "); Serial.println(XBEE_ID); } Wenn Ihr Shield nicht die Pins D0 und D1 verwendet resp. Sie dies geändert haben, können Sie die SoftwareSerial Library auf diesen Pins verwenden: #include <SoftwareSerial.h> #define XBEE_ID 1 #define rxPin 2 #define txPin 3 #define ledPin 13 SoftwareSerial mySerial = SoftwareSerial(rxPin, txPin); void setup() { pinMode(rxPin, INPUT); pinMode(txPin, OUTPUT); mySerial.begin(9600); } void loop() { mySerial.print("This is XBEE: "); mySerial.println(XBEE_ID); } An Ihrem PC im Terminal des X-CTU sollten Sie nun die Module senden sehen: Mesh Konfiguration mit VerschlüsselungÜbersicht Verschlüsselung XBeeUm Verschlüsselung mit Ihren XBee Modulen zu nützen müssen Sie zurzeit die ZNet Firmware Reihe (mit EmberZnet2.5) auf Koordinator und Router/Endgeräten einsetzen. Mit EmberZNet Pro 3.1 steht Verschlüsselung ebenfalls zur Verfügung. Folgen Sie zuerst der Anleitung Einfache Mesh Konfiguration. Setzen der Verschlüsselungs-OptionenVerschlüsselung mit ZNet 2.5Setzen Sie nun die folgenden zwei Parameter auf allen beteiligten Geräten sowohl dem Koordinator als auch allen Endgeräten/Routern identisch:
Speichern Sie nun die Konfiguration auf Ihren Modulen, Sie sollten nun über das Terminal oder den Range Test Daten verschlüsselt zwischen den Modulen übertragen können. Verschlüsselung mit ZNet Pro 3.1Setzen Sie einfach den Parameter Encryption Enable auf allen angeschlossenen Geräten (Koordinator, Router und End Devices). Der Koordinator wählt dann bei jedem Start selber einen zufälligen Schlüssel. Bei Bedarf kann noch ein Netzwerk Schlüssel gesetzt werden, der die Module vor dem Zugriff auf das Netzwerk authentisiert. ReferenzenFolgende Ressourcen waren bei der Erstellung dieses Dokuments sehr hilfreich: |
|||||||||||||||||||||||||||||||||||||||||||||||||||||
Letzte Aktualisierung: © boxtec internet appliances · the better security products |