Lost im XBee-Dschungel

XBee-Funknetzwerk mit 1 Coordinator und 1 End Node

Keine Angst, auch wenn der Titel eher nach Frustration tönt, handelt es sich in diesem Tutorial um ein vollständiges, lauffähiges Projekt.  Ich pfade Ihnen gewissermassen den Weg durch den Dschungel. Und wenn Ihnen der Artikel schlicht zu lang ist, für das Projekt selbst ist es nicht nötig, den Rest der Einleitung oder die Kapitel  „ZigBee-Ratgeber“ und „Grundlagen und Glossar“ zu lesen.

Zwar habe ich inzwischen einiges an Arduino-Projekten realisiert, aber zum Internet of Things fehlt mir noch das wichtigste Element, die Vernetzung. Bis jetzt bestanden alle meine Projekte aus einem per USB-Kabel mit dem PC verbundenen Arduino. Um meine Sensoren zur Überwachung von Licht, Feuchtigkeit und Temperatur auf dem Balkon realisieren zu können, liebäugelte ich deshalb mit dem Kauf eines Arduino mit integriertem Wifi. DiamondBack heisst das werte Teil. Allerdings scheiterte diese Idee an einem praktischen Problem: Auf unserem Balkon gibt es keine Steckdose. Wifi gilt aber als energiehungrig, so dass es kaum ratsam erschien, einen solchen Arduino mit Batterien zu betreiben.

Also hielt ich Ausschau nach Alternativen, denen als Stromversorgung Batterien oder Solarzelle genügen. Dabei stiess ich zuerst auf panStamp. Zuerst war ich enthusiastisch, diese Technologie versprach genau, was ich suchte, Sensornetzwerke mit stromsparenden, batteriegetriebenen Nodes. Aber als ich nach ausführlicher Lektüre des Websites und des Wikis immer noch keine genaue Vorstellung davon hatte, welche Komponenten ich den eigentlich für ein kleines Netzwerk benötigte, nahm ich von dieser Technologie wieder Abstand. Zu stark scheint panStamp mir von einer einzigen Person abzuhängen und zu proprietär ist die Technologie.

Bei meinen Recherchen tauchte natürlich immer wieder ZigBee auf. Im Buch „Making Things Talk„, einer Bibel des Internet of Things, gibt es mehrere ZigBee-Projekte. Als ich dann bei BoxTec ein Solar-Kit für einen wireless sensor node entdeckte, der auf der ZigBee-Technologie beruhte, packte ich zu. Das Kit kommt ohne ZigBee, also bestellte ich zwei Module dazu. Nichtsahnend hatte ich damit den ersten Schritt meiner Expedition in den XBee-Dschungel getan.

Denn ein Dschungel ist es: Es gibt inzwischen so viele Zigbee-Modelle, dass schon nur die genaue Typenbestimmung der zwei Module, die ich erhalten hatte, schwierig war. Und den genauen Typ zu kennen, ist für die Konfiguration unabdingbar, denn wenn man die  Firmware für ein falsches Modell lädt, dann verwandelt man das Modul in Elektroschrott. Es zeigte sich auch, dass meine Bestellung grenzenlos naiv war: XBees kommen mit Zweimillimeter-Pins und passen damit auf keinen Arduino und kein Steckbrett, denn dort arbeitet man mit 2.54 mm.

Um ein XBee-Modul mit dem Arduino zu kombinieren, benötigte man anscheinend ein XBee-Shield und für die Arbeit mit dem Steckbrett muss es zumindest eine XBee-Adapterplatine sein, die den Abgrund zwischen 2-mm und 2.54-mm-Pins überbrückt. Mein toller Sensor Node war angeblich nur mit Grove-Sensoren zu verwenden und ausserdem passte der zum Kit gehörende Akku nicht wie vorgesehen in die Schachtel. Um ein ZigBee zu konfigurieren, nimmt man besser nicht den Arduino (wofür mir sowieso der passende Shield fehlt), denn dann müsste den Chip entfernen, sondern ein spezielles Kabel oder ein Trägermodul (das ich natürlich nicht hatte). Und habe ich schon erwähnt, dass die Pins des XBee zu dünn für den Female-Anschluss eines Jumperkabels sind? Und, und, und… Wenn man den einschlägigen ZigBee Tutorials Glauben schenkt, dann müsste ich erst einmal 100 bis 200 Franken zusätzlich investieren, um überhaupt irgend etwas mit meinen zwei Modulen anfangen zu können. Und natürlich hat kein Anbieter alles Notwendige im Angebot, so dass ich mindestens zwei oder sogar drei Bestellungen machen müsste. Auf diese Materialschlacht hatte ich keine Lust, ich fand, es müsse doch möglich sein, diese Technologie mit dem auszuprobieren, was ich schon hatte (siehe Abschnitt Komponenten). Die gute Nachricht ist: Das geht tatsächlich! Aber der Weg dorthin erwies sich als ziemlich steinig. Und er verlief auch ganz anders, als ursprünglich gedacht. Kein Arduino, kein C, dafür Java, X-CTU, Schaltungen auf dem Steckbrett und etwas Improvisation.

Übrigens, ich verwende im ganzen Artikel die Begriffe XBee und ZigBee ziemlich synonym, was natürlich nicht ganz richtig ist. ZigBee ist ein Industriestandard für drahtlose Datenübertragung ähnlich wie WLAN oder Bluetooth. XBee ist dagegen ein Modul des Herstellers Digi, das oft in Selbstbauprojekten mit oder ohne Arduino eingesetzt wird.

Projektziel

Mit zwei XBee-Modulen und einem Solar-Kit für Funk-Sensor-Netzwerke ein kleines Funknetz aufzubauen, das den Befehl, eine LED ein- und auszuschalten, drahtlos übermittelt. Die Steuerung des Koordinator-Moduls erfolgt mit Java über das XBee-API. Eine LED anzuschalten, ist ja gewissermassen das „Hallo Welt“ des physical computing. Insofern ist das Projektziel von meinem Fernziel, ein Sensornetzwerk für meine Balkonpflanzen zu errichten oder sogar ein Treibhäuschen zu regeln, noch ein ganzes Stück entfernt.

ZigBee-Ratgeber

Bevor ich meine eigene Konfiguration beschreibe, versuche ich hier zusammenzustellen, welche Komponenten man für ein solches ZigBee-Netzwerk eigentlich braucht.

XBee-Modelle gibt unzählige (gemäss Parallax ca. 70), sie werden aber (bis jetzt) in zwei Generationen eingeteilt:

  • Series1: Einsteigermodule, meistens Punkt-zu-Punkt-Vernetzung
  • Series2 (auf den neueren Modulen steht S2): Mehr Funktionalität, aber es ist schwieriger, ein Netzwerk zu konfigurieren

Series1- und Series2-Module sind untereinander nicht kompatibel, d.h. ein Netz kann immer nur Module eines Typs vernetzen.
Innerhalb dieser zwei Generationen gibt es wiederum zahlreiche Modelle, die sich unter anderem darin unterscheiden, ob sie eine aufgesetzte Antenne oder eine als Chip haben. Es gibt noch zwei weitere Antennenvarianten, die ich hier unterschlage. Und nicht zuletzt gibt es zwei Varianten bezüglich Reichweite: Die low-power Module mit einer (illusorischen) Nennreichweite von 300 Metern müssten für ein Netzwerk zu Hause ausreichen, als Schloss- und/oder Parkbesitzer muss man dagegen zur energiehungrigeren PRO-Variante mit Nennreichweiten von (ebenso illusorischen) 1.6 km greifen. Man kann das Problem der Reichweite aber auch mit Ketten von Routern lösen, deshalb würde ich für Sensornetzwerke auf jeden Fall zur low-power Variante greifen. Einen guten Überblick über die verschiedenen XBee-Varianten in Deutsch findet man im Elektronikladen. Eine weitere Zusammenstellung findet sich bei AdaFruit.

Zwei Module sind auf jeden Fall noch nicht genug, es braucht einiges an Zubehör, um die folgenden grundlegenden Aufgaben und Teilaufgaben zu erledigen

  • die Module konfigurieren
  • Module, die als autonome Knoten (z.B. als Sensoren) laufen sollen, mit Strom versorgen
    • eine stabile 3.3V-Gleichstromversorgung aufrechterhalten
  • Module an Sensoren oder Aktoren anschliessen (die v.a. im Falle von Aktoren eventuell zusätzlich mit Strom versorgt werden müssen)
  • ein Modul, das unter Series2 die Rolle des Koordinators hat, mit der übrigen Welt verbinden, z.B. direkt über einen PC oder indirekt über einen Arduino
    • eine direkte Verbindung zwischen PC und Modul oder
    • für die Arduino-Variante die Kluft zwischen 2.54 mm und 2 mm Pins überbrücken

Den letzten Punkt möchte ich noch etwas erläutern, denn er ist nicht zwingend. Ich kann mir ein ZigBee-Netzwerk vorstellen, die einmal konfiguriert wird, und dann völlig autonom „vor-sich-hinkommuniziert“, z.B. weil es in einer unzugänglichen Gegend irgendetwas ohne weiteren Kontakt zur Aussenwelt steuert oder regelt. Ein hübscher Ausgangsstoff für eine eine Science-Fiction-Erzählung: Es juckt mich richtig, mir auszumalen, was diesem armen, von Gott und der Welt verlassenen Netzwerkchen so alles einfällt!

Aber Spass beiseite, im Normalfall möchten sich diejenigen, welche das Netz errichtet haben, dauernd oder zumindest gelegentlich in das Netz einklinken, um Daten abzufragen oder Änderungen an der Konfiguration vorzunehmen. Normalerweise wird dies über einen PC erfolgen. Wenn es um ein Sensornetzwerk geht, ist es auch denkbar, dass ein mit Wifi ausgerüsteter Arduino die Schnittstelle bildet und Daten direkt an einen Server sendet.
Für jede dieser Aufgaben gibt es Varianten, wie man sie mit Hardware umsetzt. Viele Komponenten lösen dabei mehr als eine Aufgabe:

Konfiguration

  • Solar-Kit: mit dem USB-Kabel aus dem Kit den PC mit dem Carrier Modul verbinden und ZigBee auf Carrier aufstecken, ca. 24 SFr.
  • direkt über ein USB-FTDI-Kabel und ein XBee Adapter Kit (Kostenpunkt ca. 30 $)
  • Parallax XBee USB Adapter/Breakout und USB-Kabel USB A zu Mini B: liefert die notwendigen Pin-Leisten sowohl für 2 mm wie 2.54 mm mit, muss aber noch gelötet werden. Regelt Stromversorgung via USB
  • via Arduino und Arduino-XBee-Shield, aber dazu muss der Atmega-Chip entfernt und das Arduino-Board gejumpert werden!

Stromversorgung

  • Solar-Kit: kleines Solarpanel, Lithium-Akku und Carrier sollten das XBee im Freien mit genügend Strom versorgen
  • Arduino: 3.3V-Pin eines Arduino, der via USB-Kabel mit Strom vom PC versorgt wird. In „Making Things Talk“ und in Tutorials sieht man oft eine Schaltung mit Spannungsregler. Eine Stromversorgung direkt über den Arduino funktioniert gemäss „Making Things Talk“ erst ab Version UNO oder höher, bei älteren Arduinos ist der Spannungsregler zu schwach. Zumindest in der Variante mit PC hat diese Art der Stromversorgung mit einem Arduino MEGA 2560 problemlos funktioniert. Allerdings würde ich den Arduino exklusiv als Stromlieferant verwenden und nicht noch mit anderen Sensoren oder Aktoren verkabeln, damit möglichst nichts die gleichmässige Spannungsversorgung stört.
  • via Arduino und SparkFun XBee Explorer Regulated
  • Batterien, Steckbrett, Spannungsregler, Adapterplatine sowie ein paar Widerstände, Kondensatoren und Jumperkabel, um sich die XBee-Steckbrettschaltung selbt zu bauen. Eine genaue Beschreibung findet man im Buch „Making Things Talk„.

Verbindung mit Sensoren und Aktoren

Anschluss an PC/Microcontroller

Dafür eignen sich alle unter „Konfiguration“ aufgeführten Varianten, sowie diese zusätzlichen:

  • Drahtlos mit Arduino mit integriertem Wifi (WLAN), z.B. DiamondBack sowie XBee-Shield für Arduino
  • wie oben, aber statt der Wifi-Variante kommt ein normaler Arduino zum Einsatz, der über ein USB-Kabel mit dem PC verbunden ist

So, nun wissen Sie, was ich mit Materialschlacht gemeint habe! Inzwischen gibt es schon einen weiteren Blogeintrag, in dem ich eine übersichtliche Liste des zur Zeit erhältlichen XBee-Zubehörs zusammengestellt habe. Unter all diesen Varianten ist die gleich vorgestellte definitiv zu den Low-Cost-Minimalvarianten zu zählen. Das reicht für das erwähnte Hallo-Welt. Aber sobald ich meinen ersten Sensorknoten auf dem Balkon einrichten will, benötige ich entweder noch ein zweites Solarkit oder den Parallax-Adapter, da ich dann den Sensor-Node wegen der fehlenden Steckdose mit dem Carrier des Solarkits betreiben muss und dieser damit nicht mehr für den Anschluss an den PC bereitsteht. Angesichts dessen, dass der Parallax-Adapter fast gleichviel kostet wie das Solarkit, werde ich wohl zu letzterem greifen, denn erstens habe ich schon Erfahrung damit und zweitens erhalte ich zusätzlich eine kleine Solarzelle, einen Lithium-Polymerakku, eine (wenn auch verbesserungsfähige) Box als Gehäuse und ein USB-Kabel. Zwar wäre es möglich, den Sensorknoten direkt mit dem ungeregelten Lithium-Akku zu betreiben, aber dieser liefert 3.7V also etwas mehr als die verlangten 3.3V, was dem Modul im Dauerbetrieb möglicherweise schadet.

Komponenten

Nach all diesen Varianten nun meine Komponenten, mit denen sich das Projektziel realisieren lässt. Beginnen wir mit der Hardware:

  • 1 PC
  • 2 XBee-Module S2: XBee® RF Modules ZNet 2.5 – 1 mW, Chip Antenna (XB24-BCIT-004)
  • 1 Wireless Sensor Node Solar Kit von Seeedstudio mit 1 XBee-Carrier, 1 kleinen Solarzelle, 1 3.7V-500mA-Lithium-Polymer-Akku, 1 USB-Kabel, 2 Groove-Anschlusskabeln und 1 Plastikbox. Für das aktuelle Projekt wird davon nur der XBee-Carrier und das USB-Kabel verwendet
  • 1 Arduino (oder der geladene Lithium-Polymer-Akku) als 3.3V-Stromversorgung für den Sensor Node
  • 1 rote LED
  • 1 Widerstand irgendwo zwischen 300 und 600 Ohm
  • 1 Steckbrett
  • 3 Jumperkabel M/F
  • 3 Jumperkabel M/M
  • 3 ca 2 cm lange Stücke Isolierdraht 0.5 mm (läuft in der Migros unter Sonneriedraht). Wenn man einfach keinen 0.5mm-Draht zuhause hat oder bereit ist, 3 Jumperkabel zu opfern und deren Anschlüsse zu verbiegen, dann kann man sich diesen Draht sparen
  • 3 ca 1 cm lange abisolierte Isolierung von einem dickeren Isolierdraht mit Innendurchmesser ca 0.8 oder 1 mm als improvisierte Steckverbindung zwischen XBee-Pin, Sonneriedraht und Jumperkabel (auf was kommt man nicht alles, wenn man nachts um Zehn feststellt, dass einem das entscheidende Teil fehlt!)

Eine gute Nachricht für alle, die (noch) keinen Lötkolben besitzen: In meiner Version können alle Komponenten  zusammengesteckt werden, Löten ist nicht notwendig.

Die Arbeit mit XBee-Modulen stellt auch einige Anforderungen an die Software

  • Java JDK Version 1.6 32-Bit (oder mindesten 1.5): Die 32-Bit-Version muss man, falls nicht vorhanden, auch auf einem 64-Bit-PC installieren, da die verwendete Java-Library nur unter einem 32-Bit JDK läuft
  • Java-Entwicklungsumgebung Eclipse Indigo 3.7 (wahrscheinlich klappt es mit jeder neueren Version für Java-Entwickler)
  • Java XBee-API, zur Zeit in Version 0.9 zur Programmierung des Coordinator-Moduls
  • X-CTU zur erstmaligen Konfiguration beider XBee-Module

Bestückungsplan und Verkabelung

Da wir mit mindestens zwei XBee-Modulen arbeiten und Koordinator und Endpunkt nicht die gleiche Konfiguration aufweisen, gäbe es eigentlich zwei Bestückungspläne, nämlich einen für den Coordinator, d.h. Modul 1 und einen für den Sensor Node, d.h. Modul 2.  Allerdings existiert meine Carrier-Komponente in Fritzing nicht. Und weil der Coordinator neben dem auf den Carrier aufgesteckten XBee-Modul nur aus PC und USB-Kabel besteht, lohnt sich das Zeichnen auch nicht. Deshalb stattdessen ein Bild:

Das mit USB am PC hängende XBee-Coordinator-Modul

Was es mit diesen zwei Rollen auf sich hat, davon gleich im nächsten Abschnitt mehr. Nun zum Sensor Node, der im Moment noch kein Sensor Node, sondern ein End Node ist, weil er statt mit einem Sensor mit einem Aktor, sprich einer LED, verkabelt ist.

XBee End-Modul mit LED und Arduino als Stromversorgung

Und zuletzt möchte ich Ihnen natürlich meine Lösung dafür, wie man ein XBee-Modul ohne Adapterplatine und ohne Löten verkabelt, nicht vorenthalten:

XBee ohne Adapterplatine verkabeln

Schritt-für-Schritt-Vorgehen und Code

Schritt 0: Hardware bereitstellen

Als erstes wartet man, bis alle Pakete von allen Lieferanten eingetroffen sind (das kann dauern). Dann empfiehlt es sich, seine zwei ZigBee-Module zu kennzeichnen, z.B. mit 1 und 2 nummerieren, damit man sie später voneinander kennt.

Ausserdem laden Sie den Lithium-Akku aus dem Solar-Kit auf, indem Sie ihn auf dem Carrier in den mit BAT bezeichneten Anschluss stecken. Bei guter Wetterlage stecken Sie den Carrier in die zugehörige Box, ziehen das Kabel des Solarpanels durch die vorgesehene Öffnung und schliessen diesen Stecker unter CHARGE an. Verstauen Sie den Akku auf dem Carrier und schliessen Sie die Box mit dem Deckel. Dann legen Sie die Installation ein paar Stunden an die Sonne. Wem das zu unsicher ist, der kann den Carrier ohne Solarpanel mit USB an den PC anschliessen und den Lithiumakku so laden.

Schritt 1: X-CTU installieren

Als nächstes lädt man vom Digi-Website X-CTU, die Software zur Konfiguration der XBee-Module, herunter und installiert sie auf seinem PC.

Als Alternative könnte man die Module auch mit einem Terminalprogramm wie Putty konfigurieren, aber ich hatte keine Lust, mit +++ und einzelnen Befehlen herumzufummeln. In X-CTU lassen sich Konfigurationen speichern, so dass einfach zwischen verschiedenen Konfigurationen wechseln kann.

Schritt 2: XBee-Module konfigurieren

In ZigBee-Netzwerken vom Typ Series2 hängen die Module alle sternförmig an einem einzigen Modul. Daraus folgt, dasst es für die XBee-Module 3 Rollen gibt, wovon uns hier nur 2 interessieren:

  • Der Coordinator (ZC)kommt nur ein einziges Mal im Funknetzwerk vor. Er koordiniert alle anderen Module, gibt grundlegende Parameter des PAN vor und sorgt als Gateway für die Verbindung mit der restlichen Welt, z.B. via USB-Kabel und PC
  • Ein End Device (ZED) ist ein Endknoten, der mit Sensoren oder Aktoren verbunden ist und direkt oder indirekt über einen Router mit dem Coordinator kommuniziert
  • Ein im Projekt nicht vorkommender Router (ZR) verbindet den Coordinator mit einem Endknoten, z.B. um die Reichweite des Netzwerks zu erhöhen

COM-Port für XBee im Windows-Gerätemanager

Modul 1 wird bei mir Coordinator, Modul 2 End Device. Als erstes soll nun der End Device, d.h. Modul 2 konfiguriert werden. Dazu steckt man das Modul auf den Carrier Shield aus dem Solar-Kit und verbindet den Shield via USB-Kabel mit dem PC. Auf dem Carrier sollten nun ein paar LEDs aufleuchten.

Als nächstes startet man X-CTU. Unter dem ersten Register „PC Settings“ sollte im Fenster „Select COM Port“ ihr XBee-Modul als „USB Serial Port“ sichtbar sein. Dort findet man auch den zugeteilten COM-Port. Bei mir ist das aktuell COM14.

Falls dieser Eintrag fehlt,  öffnet man den Windows-Gerätemanager und sieht unter „Anschlüsse“ nach, ob das Modul wirklich an einem COM-Port angeschlossen ist. Falls nicht, steckt man es noch einmal aus und wieder ein. Falls es vorhanden ist, dann markiert man die Zeile und klickt im Menü Aktion auf Deaktivieren und anschliessend auf Aktivieren. Arduino-Profis kennen das ja. Wenn das alles nicht hilft und alle Anschlüsse überprüft sind, dann weiss ich auch keinen Rat mehr.

Falls X-CTU das Modul nun in der Liste hat, dann überprüft man, ob die Baud-Rate auf dem Defaultwert 9600 steht und wechselt ins letzte Register „Modem Configuration“. Am nächsten Schritt bin ich fast verzweifelt: Als ich auf die Schaltfläche „Read“ klickte, wurde mein Modul nämlich nicht erkannt, was mich zur irrigen Annahme führte, man müsse den Modem-Typ selbst eintragen. Worauf ich ziemlich viel Zeit mit dem Versuch verbraten habe, herauszufinden, welcher der im Kombinationsfeld vorkommenden Modemtypen denn eigentlich zu meinem Modul passt. Es geht definitiv einfacher: Mein Modem wurde nämlich nicht erkannt, weil es auf meinem Carrier-Shield seitlich einen klitzekleinen On-Off-Schalter gibt. Da fieserweise 2 der 4 LEDs auch leuchten, wenn der Schalter auf Off steht, habe ich erst nach langem Suchen gemerkt, dass ich den Schalter am Carrier auf On stellen muss (merkt man an den vier brennenden LEDs), damit das Modul erkannt wird. Damit klappte das Einlesen und die Software spuckte von selbst aus, dass es sich um ein XB24-B handelt. Bevor man die Konfiguration ändert, ist es sinnvoll, die Defaultkonfiguration mit Profile – Save zu speichern, um zumindest zu ihr zurückzugehen, falls etwas schief geht.

Nun wird das End-Modul mit folgenden Einstellungen konfiguriert:

  • Modem: XB24-B
  • Function Set: ZIGBEE ROUTER/END DEVICE API
  • ID: 192 (die allen Modulen gemeinsame ID des Netzwerks)
  • NI: SENSOR2 (ein Name, mit dem sich das Modul im Netzwerk identifizieren lässt)
  • BD: 6 (57600 Baud, es geht auch schneller als 9600, von noch höheren Geschwindigkeiten wird abgeraten)
  • AP: 2 (API enabled mit Escaping)

Alles andere lässt man auf den Default-Einstellungen. Dann setzt man das Häkchen bei „Always Update Firmware“, klickt auf „Write“ und betet. Wenn alles gut geht, erscheint ein Verlaufsbalken und nach dem erfolgreichen Abschluss eine Meldung mit OK. Keine Panik, falls Sie „Unable to communicate with modem“ erhalten. Überprüfen Sie die Konfiguration und versuchen Sie es noch einmal. Um die geänderte Konfiguration später mit Read wieder einlesen zu können, muss man die folgenden Einstellungen vornehmen:

Konfiguration des XBee-Coordinators-Moduls

  • das Häkchen bei „Always Update Firmware“ entfernen
  • im Register PC-Settings
    • die Baud-Rate auf 57600 einstellen
    • das Häkchen vor „Enable API“ setzen
    • das Häkchen vor „Use escape characters (ATAP = 2)“ setzen

Auch hier braucht es oft zwei bis drei Anläufe, bevor das wirklich klappt.

Für das Coordinator-Module sehen die Einstellungen nur wenig anders aus:

  • Modem: XB24-B
  • Function Set: ZIGBEE COORDINATOR API
  • ID: 192
  • NI: COORDINATOR1
  • BD: 6 (57600)
  • AP: 2

Auch hier setzt man wieder „Always Update Firmware“ und klickt mit viel Optimismus auf „Write„. Wenn man die OK-Meldung erhält, ist die Konfiguration der zwei ZigBee-Module erfolgreich abgeschlossen.

Der Umgang mit X-CTU erwies sich übrigens als nicht sehr zuverlässig: Oft benötigte ich sowohl für Schreib- wie für Leseoperationen zwei oder drei Wiederholungen bis es klappte, wobei ich meistens das USB-Kabel aus- und wieder einstecken sowie den Port deaktivieren und aktivieren musste.

Schritt 3: Schaltungen zusammenstecken

Wenn Sie genau in der vorgeschlagenen Reihenfolge vorgegangen sind, dann ist das Coordinator-Modul bereits vollständig verkabelt, d.h. es ist auf den Carrier aufgesteckt und hängt via USB am PC.

Im weiteren bauen Sie auf dem Steckbrett mit LED, Widerstand und Jumperkabeln die unter Bestückungsplan aufgezeigte Schaltung und versorgen diese entweder mit dem Lithium-Akku oder mit dem 3.3V- und dem GND-Pin eines Arduino mit Strom. Zwei normales Jumperkabel passen übrigens perfekt in den Stecker des Akkus. Rot ist wie immer Strom und Schwarz Masse (GND). Achtung: Vermeiden Sie unbedingt, dass sich die zwei freien Enden der Jumperkabel berühren, denn dies würde zu einem fatalen Kurzschluss des Akkus führen!

Nun muss man noch das End-Modul 2 verkabeln wie im letzten Bild unter „Bestückungsplan“ gezeigt. Verkabelt werden in dieser Minimalvariante nur die folgenden Pins

  • Pin 1: Stromversorgung
  • Pin 10: Masse (GND)
  • Pin 20: Digital Output, d.h auf dem Steckbrett mit jener horizontalen Reihe verbinden, in der sich auch das längere Beinchen des LED befindet

Eine vollständige Beschreibung aller Pins (und noch viel mehr, als man je über ein XBee wissen wollte) findet man übrigens im XBee-ZNet-2.5-Manual, das in der XBee-Api-Library (siehe nächster Schritt) enthalten ist.

Schritt 4: Eclipse installieren und XBee-API-Library laden

Es gibt diverse Programmiersprachen, die man einsetzen kann, um mit ZigBees zu kommunizieren unter anderem C (Arduino), und Processing. Als ich allerdings auf eine XBee-API-Library für Java stiess, war für mich klar, dass ich es damit probiere, denn mit Java habe ich jahrelange Erfahrung. Die Entwicklungsumgebung Eclipse war deshalb als Software schon vorhanden und zwar in der Version Indigo. Falls Eclipse nicht vorhanden ist, laden Sie es herunter und installieren Sie es.

Falls Sie unter Windows-64-Bit arbeiten, kommt ein weiterer Schritt dazu: Die Library läuft nämlich nur unter 32-Bit, d.h. es muss auf jeden Fall ein Java-JDK für 32-Bit vorhanden sein. Vergewissern Sie sich, ob Sie im Verzeichnis „Program Files (x86)\Java“ ein JDK 1.6 oder höher haben und installieren Sie eines nach, falls dies nicht der Fall sein sollte. Eine bestehende 64-Bit-Java-Version wird davon nicht tangiert, verschiedene Java-Versionen können koexistieren. Mit jdk-6u41-windows-i586.exe auf der Oracle-Java-Download-Seite müsste das eigentlich klappen.

Nun geht es daran, die API-Library einzubinden: Laden Sie die Library von dieser Adresse herunter. Entzippen Sie anschliessend die Datei in jenes Verzeichnis, in dem Sie ihre ihre Eclipse- (oder Java-) Projekte verwalten. Falls Sie bis jetzt nicht mit Java gearbeitet haben, nehmen Sie irgendein Verzeichnis. Starten Sie Eclipse. Wenn Sie das Projekt nicht im Default-Workspace haben möchten, wechseln Sie in einen geeigneten Workspace. Nun importieren Sie das soeben ausgepackte Verzeichnis mit „File – Import – Existing Projects into Workspace – Select root directory – Browse“.  Damit sollten Sie in Eclipse ein neues Projekt namens xbee-api mit allen Libraries, viel Beispielcode und ausführlicher Dokumentation sehen. Falls Probleme auftauchen, gibt es im Wiki zu der Library eine ausführlichere Dokumentation.

Unter Windows-64-Bit muss man das Projekt nun noch mit der 32-Bit-Version des JDKs verbinden. Dazu wählt man im Menü Run – Run Configurations – Register JRE – Alternate JRE, und wählt die JDK-Version mit 32 Bit aus. Eventuell muss man sie zuerst noch mit der Schaltfläche „Installed JREs“ und Add hinzufügen. Falls man auch debuggen möchte, muss man das gleiche für Run – Debug Configurations noch einmal machen.

Achten Sie darauf, dass Sie unter der Java- oder der Java-EE-Perspective arbeiten (die Tabs ganz oben rechts).

Schritt 5: Java-Testprogramme starten

Nun kommt der entscheidende Moment, in dem sich weisen wird, ob beide Module korrekt konfiguriert und verkabelt sind und ob die notwendige Software in der richtigen Version vorhanden ist.

Bevor wir das Hallo-Welt-Beispiel starten können, müssen wir allerdings die Adresse des Endknotens auslesen, die sich aus den Teilen SH und SL zusammensetzt. Dafür müssen Sie das Endknoten-Modul noch einmal entkabeln, den Carrier vom USB-Anschluss abziehen, und anstelle des Coordinators das End-Modul in den Carrier einsetzen. Dann stecken Sie das USB-Kabel wieder ein.

Suchen Sie sich im Eclipse-Projekt unter src – com.rapplogic.xbee.examples die Datei ApiAtExample. Im Code dieser Datei nehmen Sie die folgenden Änderungen vor:

  • Tragen Sie in der Zeile mit xbee.open Ihren COM-Port und die Baud-Rate 57600 ein, also z.B.
    xbee.open(„COM14“, 57600);
  • Suchen Sie die zwei Zeilen, die mit „log.info(„SH is“ und „log.info(„SL is“ beginnen, und entfernen Sie die zwei Schrägstriche (//) davor. Mit // wird unter Java Code auskommentiert. Diese zwei Zeilen möchten wir aber ausführen, weil damit SH und SL ausgelesen wird, die wir für das nächste Codebeispiel benötigen.

SH-Adresse aus dem Log auslesen

Starten Sie nun dieses Beispiel im Project Explorer mit einem Rechtsklick auf „ApiAtExample.java“ – Run As – Java Application. Falls sie im Fenster „Console“ unterhalb des Editors keine Exception sehen, hat es vermutlich geklappt. Klicken Sie nun in das Konsolenfenster und suchen Sie mit Ctrl F nach „SH is„. In dieser Zeile finden Sie 4 hexadezimale Werte. Markieren und kopieren Sie diese mit Ctrl C und wechseln Sie dann in die Datei RemoteAtExample.java direkt unterhalb der ersten Beispieldatei. Suchen Sie dort die Zeile „XBeeAddress64…“ und ersetzen Sie die ersten vier Werte in der Klammer durch ihre Adresse. Nun suchen Sie in der Konsole noch nach „SL is“, kopieren wiederum die vier hexadezimalen Werte und fügen sie in der XBeeAddress64 anstelle der Werte an Position 5 bis 8 ein. Das ergibt dann etwas in der Art von


XBeeAddress64 addr64 = new XBeeAddress64( 0x00,0x13,0xa2,0x00, 0x40,0x9c,0x66,0xa2);

Auch in diesem Codebeispiel muss COM-Port und Baud-Rate angepasst werden. Versichern Sie sich, dass von den Zeilen, die mit RemoteAtRequest beginnen, nur die erste mit D0 nicht auskommentiert ist, d.h.


RemoteAtRequest request = new RemoteAtRequest(addr64, "D0", new int[] {5});
...
request.setValue(new int[] {4});

Nun müssen Sie das Modul 2 auf dem Carrier wieder mit Modul 1 auswechseln und das Modul 2 noch einmal korrekt verkabeln. Dann starten Sie das Remote-Beispiel mit Rechtsklick und Run. Wenn die LED auf dem Steckbrett aufleuchtet und nach 5 Sekunden wieder abschaltet, dann haben Sie es geschafft. Gratuliere, Sie haben das XBee-Dschungel-Camp überlebt!

Demo

Im Video sieht man, wie die LED drahtlos ein- und wieder ausgeschaltet wird:

 

Grundlagen und Glossar

  • Mesh Network: in einem vermaschten Netzwerk ist jeder Knoten mit einem oder mehreren anderen verbunden
  • PAN: Personal Area Network
  • RSSI: Received Signal Strength Indicator
  • WPAN: Wireless Personal Area Network
  • ZigBee: Auf Radiofrequenzen beruhende Spezifikation für kleine Netzwerke (PANs) mit begrenzter Reichweite bis 100 m und geringem Stromverbrauch. Damit ist ZigBee für drahtlose Kommunikation eine Alternative zu Bluetooth oder Wifi. Der Industriestandard ZigBee wurde von der 2002 gegründeten ZigBee-Allianz aus der Taufe gehoben. Erste ZigBee-Produkte kamen 2005 auf den Markt.

Quellen

Comments are closed.