Im Grundzustand arbeiten XBee-Module im sogenannten Transparentmodus, was soviel bedeutet, dass alle über DI empfangenen Daten ohne zusätzliche Informationen über DO weitergesendet werden. Alternativ dazu gibt es sogenannte API (Application Programming Interface) Operationen. Sie verlangen, dass ein Datenaustausch zwischen den Modulen über sogenannte Frames in einer bestimmten festgelegten Weise ausgeführt wird. Das API legt fest, wie Befehle, Antworten auf Befehle und Statusmeldungen von einem Modul, das ein UART Datenframe benutzt, versandt und empfangen werden.
Im XBee-Datasheet finden sich unter dem Stichwort API Operations alle von einem XBee unterstützten Rahmenspezifikationen.
Bisher haben wir die XBees über die sogenannten Modem-Konfigurationseinstellungen den Anwendungen angepasst. Deutlich flexibler geschieht dies aber mit sogenannten application programming interface packets (API), die mit AT-Befehlen (Hayes Befehlssatz) ein XBee Modul steuern. Das ist nicht neu; wir haben es bereits im Kapitel XBee konfigurieren im Abschnitt 4 kurz angesprochen.
Die bisherige Kommunikation über die XCTU Software lief über einen virtuellen COM-Port oder auch serielle Schnittstelle genannt. Dahinter verbirgt sich eine elektronische Schaltung, die das Senden und Empfangen von Daten über eine Datenleitung regelt; sie wird als universal asynchronous receiver transmitter (UART) bezeichnet und ist in älteren Computern noch als eigenständiger IC-Baustein zu finden (z. B. INS8250). Asynchron ist die Kommunikation, da sie kein eigenes Taktsignal auf der Übertragungsleitung benötigt; der Empfänger synchronisiert sich über die Länge des übertragenen Rahmens, der durch Start- und Stopp-Bit vorgegeben ist. Das Startbit ist dabei logisch 0 und das Stoppbit logisch 1; dazwischen liegen in der Regel 8 Datenbits und ein Paritätsbit zur Fehlererkennung.
Bei einer Übertragungsrate von eingestellten 9600 Bit/Sek hat jedes Bit eine Signallänge von 1/9600 Sekunde oder ca. 104 µs. Damit die Übertragung fehlerfrei klappt, müssen Sender und Empfänger auf dieselbe Übertragungsrate eingestellt sein.
In einem USB-XBee-Adapter-Baustein ist ein IC eingebaut, das die USB Signale in Signale für den im XBee-Modul vorhandenen UART umwandelt.
In einem ersten Versuch wird das Empfänger-Modul mit Hilfe von API-Paketen über das Terminal der Software XCTU konfiguriert. Jedes Datenpaket enthält AT-Steuerbefehle, die sich aus jeweils zwei Buchstaben zusammensetzen.
Das Empfängermodul konfigurieren | |
Material |
|
Aufgaben |
|
Notiere hier deine Ergebnisse. Die Seriennummer meines eingesetzten XBee Empfängermoduls lautet
Die Seriennummern sind eindeutig und werden vom Hersteller Digi nur einmal vergeben. Sie sind damit ein Identifizierungsmerkmal.
Über das XCTU Terminal lassen sich jetzt AT-Befehle über das mit dem Arduino UNO verbundene USB-Kabel an das Empfängermodul auf dem Shield übertragen. Das einzuhaltende Paketformat ist einfach aufgebaut und muss strikt eingehalten werden.
Wer sich bereits in die Kapitel Digitale Signale übertragen oder Analoge Signale übertragen unter der Rubrik XBees eingelesen hat, dem kommt diese Struktur nicht fremd vor. Wir wissen, dass jede Datenübertragung an ein XBee-Modul Hersteller bedingt mit der Sequenz 0x7E beginnt und das nachfolgend die Anzahl der übertragenen Bytes angegeben wird.
Die Anzahl der übertragenen Bytes ergibt sich immer aus der Anzahl der in Abb. 2 grün markierten Rechtecke; die andersfarbigen Rechtecke werden bei der Zählung nicht berücksichtigt.
Mit dem AT SL Befehl lässt sich die gewünschte Seriennummer (lower byte) ausgeben. Da das XBee Modul direkt mit dem PC verbunden ist, ist die Datenpaketstruktur für lokale XBee-Module anzuwenden. Die Befehlssequenz lautet
Die Buchstaben S und L müssen nach der ASCII-Tabelle in die entsprechenden Hexadezimalwerte umgewandelt werden. Für S ergibt sich ein Wert von 0x53 und für L ein Wert von 0x4C. Die Anzahl der zu übertragenden Bytes liegt damit bei 4. Immer daran denken, dass alle Werte hexadezimal angegeben werden. Das wird immer dann wichtig, wenn die Zahlen größer als 9 werden.
Die Berechnung der Prüfsumme ergibt sich ebenfalls aus den grün markierten Hexadezimalzahlen. Bilde dazu die Summe: 0x08 + 0x49 + 0x53 + 0x4C = 0xF0, subtrahiere sie von 0xFF und trage das Ergebnis am Ende der Zeile ein: 0xFF - 0xF0 = 0x0F.
Die Befehlssequenz ist jetzt komplett und kann in das Editor-Fenster von XCTU eingegeben werden.
Die Befehlssequenz an das Modul senden | |
Aufgaben |
|
Vergleicht man die im Terminal ausgegebenen Bytes der Seriennummer mit der vorher abgelesenen und im Abschnitt 2 in der Tabelle notierten Bytefolge, ist Übereinstimmung festzustellen.
Mit Hilfe von API Paketen lassen sich AT-Befehle per Funk auf Module übertragen und fernsteuern. In der vorherigen Übung haben wir schon gesehen, dass ein Empfänger-Modul auch Sender-Modul sein kann. Eine klassische Trennung in einen reinen Sender- und einen Empfängerbaustein gibt es jetzt nicht mehr. Trotzdem wird die Beschriftung beibehalten, damit wir nicht durcheinandergeraten, wenn es darum geht, einen Baustein zu konfigurieren. Mit einem Aufkleber S auf dem Sender-Modul und einem E auf dem Empfänger-Modul werden beide Module markiert und sind fortan voneinander zu unterscheiden (Abb. 6).
Sendermodul konfigurieren | |
Material |
|
Aufgaben |
|
Eintragung der ermittelten Seriennummer und der Scan Channels, so wie sie das Programm XCTU für das eingesetzte XBee-Sendermodul anzeigt.
Sendermodul konfigurieren - Teil 2 | |
Aufgaben |
|
Damit ist die Installation für den Sendermodul abgeschlossen. Nimm das Sendermodul aus der Fassung des USB-Adapters.
Empfängermodul konfigurieren | |
Aufgaben |
|
Der Schaltungsaufbau
Über das XCTU Terminal lassen sich jetzt AT-Befehle über das mit dem XBee-USB-Adapter Modul verbundene USB-Kabel an das Sendermodul auf dem XBee Adapter per Funk übertragen. Der prinzipielle Aufbau des Paketformates wurde bereits in Abschnitt 2 besprochen. Jetzt haben wir es mit AT-Befehlen zu tun, die per Funk an ein Sendermodul übertragen werden. Ein Datenpaket muss dazu die folgenden Informationen bereithalten:
Mein Sendermodul, bei dem die Fernanfrage erfolgt, hat die Seriennummer 0013A200 40A9A7E3; es ist das Modul, von dem die Scan Channels (SC Scan Channels) in der folgenden Übung abgefragt werden sollen. Gehen wir mal davon aus, dass die 64-Bit lange Seriennummer nicht bekannt aber die 16-Bit Zieladresse 0815, dann kann eine sogenannte Rundfrage an alle Module erfolgen. Dazu gibt man die 64-Bit Zieladresse
und die 16-Bit Zieladresse 0815 ein.
Führende Nullen werden vom Programm XCTU nicht angezeigt. Die Zieladresse ist aber immer 64-Bit lang; wenn also die angezeigte Seriennummer nur aus 14 statt aus 16 Hex-Zeichen besteht und sie als Zieladresse benutzt wird, dann sind die restlichen Stellen immer mit Nullen aufzufüllen.
Mit Hilfe der Software XCTU ist der Aufbau eines Datenpaketes sehr einfach und vollzieht sich in acht Schritten.
Der komplette Datenrahmen erscheint ganz unten im Fenster Generated frame. Mit OK wird die Arbeit abgeschlossen und über Apply changes beendet.
Mit einem Klick auf Send selected frame wird die Anfrage per Funk abgeschickt und im Fenster Frames log werden alle Aktivitäten der Module aufgezeichnet.
Markiert man im Fenster links den Datenrahmen der Fernanfrage (blau), dann erscheinen alle näheren Informationen dazu rechts im Fenster Remote Command Response. Entsprechendes gilt für den Datenrahmen der Fernantwort (rot).
Die Bytefolgen unterscheiden sich in den beiden Datenpaketen Fernanfrage und Fernantwort. Wer dieses Beispiel mit seinen XBees ausprobiert, wird natürlich andere Werte vorfinden, da sowohl die Ziel- als auch die Quelladresse andere Werte enthalten; damit ändert sich in der Regel auch die Prüfsumme.
Das Datenpaket für die Fernanfrage wurde über das "Frames Generator" Tool der Software XCTU entworfen. Die Bedeutung der einzelnen Bytes ist der nachfolgenden Tabelle zu entnehmen. Der Pakettyp FernANFRAGE mit AT Befehlen wird vom Hersteller durch das Zeichen 17 symbolisiert. Die Rahmen-ID habe ich willkürlich auf 49 festgesetzt.
Anstelle der Seriennummer kann über das XBee-Modul auch eine Rundabfrage erfolgen, die dann über die in der Tabelle dargestellte 64-Bit Zieladresse erfolgt; alternativ kann auch die Seriennummer des Zielmoduls eingegeben werden.
Auswertung des Datenpaketes FernANFRAGE durch das XBee-Modul 4711 beim XBee-Modul 0815.
Auswertung des Datenpaketes FernANTWORT des XBees 0815
Bei einer Fernanfrage wurde bisher bei der Befehlsoption die Einstellung 02 (Tabelle 1) gewählt; sie sieht vor, dass das Empfängermodul den gesendeten AT-Befehl sofort ausführt. Will man das nicht, sondern zunächst alle AT-Befehle und die damit verbundenen Einstellungen beim Empfängermodul vornehmen und in einem abschließenden Apply Changes Befehl (AC) ausführen lassen, dann muss die Option 00 eingestellt werden.
Nachdem gezeigt wurde, wie eine Datenfernabfrage formuliert und anschließend das Ergebnis interpretiert wird, lassen sich mit dem aus Abb. 8 gezeigten Versuchsaufbau weitere API Abfragen formulieren. Probiere es aus!