Unterrichts- und Lernmaterial für Mikrocontroller
Unterrichts- und Lernmaterial fürMikrocontroller

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.

 

 

 

 

 

 

 

 

 

 

 

 

 

Abbildung 1 - Für die erste Übung ist keine Verkabelung notwendig. Der Arduino UNO mit XBee Shield und XBee Modul kann direkt verwendet werden. Der DIP-Schalter auf dem Shield steht auf Position USB.

1 - API Pakete versenden

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.

Abbildung 1 - asynchrone serielle Datenübertragung mit 8 Datenbits, ungerader Parität sowie einem Start- und einem Stoppbit

2 - Das Empfängermodul konfigurieren

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
  • 1x  Arduino UNO mit USB-Verbindungskabel
  • 1x  Arduino XBee Shield Modul
  • 1x  XBee 802.15.4 Modul - Serie 1
Aufgaben
  • Verbinde den Arduino UNO (mit XBee Shield Modul und XBee-Modul) mit dem PC.
  • Starte das Programm XCTU und lade die Konfigurationsdaten des aktuellen XBee-Moduls.
  • Übertrage aus dem Ordner Networking & Security unter SH Serial Number High und SL Serial Number Low die dort eingetragenen Zeichen in die unten stehende Tabelle.
  • Trage im Ordner Networking & Security unter DL Destination Address Low die Adresse 4711 ein.         
  • Trage im Ordner Networking & Security unter MY 16-bit Source Address die Adresse 0815 ein.
  • Trage im Ordner I/O Line Passing unter IA I/O Input Address die Zeichenfolge FFFF ein.
  • Wähle im Ordner Serial Interfacing unter AP API Enable den Eintrag API enabled [1].
  • Schließe die Änderungen mit einem Klick auf das Icon Write ab und übertrage die Änderungen an das XBee-Empfängermodul.
  • Notiere dir die 1-1 Seriennummer des XBee Empfängermoduls. Normalerweise kann man sie direkt ablesen; sie befindet sich auf der Unterseite des Moduls. Im fest eingebauten Zustand lässt sie sich aber auch über die Konfigurationsdaten im Ordner Networking & Security unter SH Serial Number High und SL Serial Number Low des Programms XCTU ablesen.

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.

3 - Die AT Befehlssequenz ermitteln

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

  • 0x7E 0x?? 0x?? 0x08 0x49 S L 0x??

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.

  • 0x7E 0x00 0x04 0x08 0x49 0x53 0x4C 0x??

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.

  • 0x7E 0x00 0x04 0x08 0x49 0x53 0x4C 0x0F

Die Befehlssequenz ist jetzt komplett und kann in das Editor-Fenster von XCTU eingegeben werden.

4 - Die AT Befehlssequenz an das Modul senden

Die Befehlssequenz an das Modul senden
Aufgaben
  • Verbinde das Arduino UNO Board mit dem XBee Shield über das USB-Kabel mit einem PC.
  • Starte das Programm XCTU.
  • Öffne das Terminalfenster
Abbildung 3 - Eine neue AT-Befehlssequenz eingeben
  • Klicke auf das + Zeichen, gib im Fenster Frame name ein: Seriennummer LOW auslesen und gib die ermittelte Bytefolge im darunter liegenden Fenster ein.
Abbildung 4 - Sobald die Bytefolge als fehlerfrei erkannt wird, erscheint der grüne Haken oberhalb des Eingabefensters.
  • Mit dem Hinweis, dass das XBee API 1 Paket keine Fehler aufweist, kann die Übertragung an das Modul mit einem Klick auf Send selected frame eingeleitet werden.
  • Ist die Übertragung abgeschlossen, wird im Fenster Frames log - Frame details die Antwort des XBees angezeigt (AT Command Response). Die Bytefolge muss etwas genauer untersucht werden.
Abbildung 5 - Die Antwort des XBees auf die AT-Befehlssequenz. Im Fenster "Frame details" wird die Antwort als Bytefolge angezeigt. Unterhalb der Antwortzeile wird die Bedeutung der einzelnen Bytes kurz erklärt.
  • Die AT Antwort des XBees wird durch die Bytefolge in der folgenden Tabelle dargestellt. In der linken Spalte stehen untereinander die übertragenen Bytes und rechts daneben eine kurze Erklärung dazu.

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.

5 - XBee Module mit API Paketen fernsteuern

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).

Abbildung 6 - XBee Sendermodul auf USB-Adapter. Das S markiert das Modul als Sender.

5.1 - Sendermodul konfigurieren

Sendermodul konfigurieren
Material
  • 1x  XBee USB Adapter
  • 1x  USB-Verbindungskabel
  • 1x  XBee 802.15.4 Modul - Serie 1
Aufgaben
  • Trenne die elektrische Spannungsversorgung vom Adapter Board
  • Stecke das XBee Sendermodul (S) in den Steckplatz auf dem Adapter Board und verbinde es mit dem PC. 
  • Starte das Programm XCTU und setze das Modul über den Befehl Restore auf die Werkseinstellungen zurück.
  • Trage die Ziffernfolgen im Ordner Networking & Security unter SH Serial Number High und SL Serial Number Low sowie den Zahlenwert von SC  Scan Channels in Tabelle 2 ein.

Eintragung der ermittelten Seriennummer und der Scan Channels, so wie sie das Programm XCTU für das eingesetzte XBee-Sendermodul anzeigt.

Tabelle 2 - Notiere in dieser Tabelle die Seriennummer und den Scan Channels Wert, den das Programm XCTU anzeigt.
Sendermodul konfigurieren - Teil 2
Aufgaben
  • Trage im Ordner Networking & Security unter DL Destination Address Low die Adresse des Empfängers 4711 ein.         
  • Trage im Ordner Networking & Security unter MY 16-bit Source Address die Adresse des Senders 0815 ein.
  • Trage im Ordner I/O Line Passing unter IA I/O Input Address die Zeichenfolge FFFF ein.
  • Wähle im Ordner Serial Interfacing unter AP API Enable den Eintrag API enabled [1].
  • Schließe die Änderungen mit einem Klick auf das Icon Write ab. Die Änderungen werden an das XBee-Sendermodul übertragen.

Damit ist die Installation für den Sendermodul abgeschlossen. Nimm das Sendermodul aus der Fassung des USB-Adapters.

5.2 - Empfängermodul konfigurieren

Abbildung 7 - XBee Empfängermodul auf USB-Adapter. Das E markiert das Modul als Empfänger.
Empfängermodul konfigurieren
Aufgaben
  • Trenne die elektrische Spannungsversorgung vom Adapter Board
  • Stecke das XBee Empfängermodul (E) in den Steckplatz auf dem Adapter Board und verbinde es mit dem PC.
  • Starte das Programm XCTU und setze das Modul über den Befehl Restore auf die Werkseinstellungen zurück.
  • Trage im Ordner Networking & Security unter DL Destination Address Low die Adresse des Empfängers 0815 ein.         
  • Trage im Ordner Networking & Security unter MY 16-bit Source Address die Adresse des Senders 4711 ein.
  • Trage im Ordner I/O Line Passing unter IA I/O Input Address die Zeichenfolge FFFF ein.
  • Wähle im Ordner Serial Interfacing unter AP API Enable den Eintrag API enabled [1].
  • Schließe die Änderungen mit einem Klick auf das Icon Write ab. Die Änderungen werden an das XBee-Empfängermodul übertragen.

6 - Datenaustausch via API

Der Schaltungsaufbau

Abbildung 8 - Sender- und Empfängermodul mit Seriennummern. Das Empfänger-Modul ist mit einem PC verbunden.

Ü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

  • 00 00 00 00 00 00 FF FF

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.

7 - Ein Datenpaket zusammenstellen

Mit Hilfe der Software XCTU ist der Aufbau eines Datenpaketes sehr einfach und vollzieht sich in acht Schritten.

  1. Wechsele im Programm XCTU in den Consoles Working Mode.
  2. Klicke auf das Pluszeichen (+ Add new frame) im Fenster Send frames und wähle dort Create frame using "Frames Generator" Tool.
  3. Wähle als Frame type 0x17.
  4. Wähle als Frame ID 49.
  5. Gib die 64-Bit dest. address ein. In meinem Fall wäre das 00 00 00 00 00 00 FF FF.
  6. Als 16-Bit dest. address wähle 08 15 .
  7. Wähle als Remote cmd. options 02.
  8. Im letzten Feld AT command gib im Fenster ASCII die Buchstaben S und C ein.

Der komplette Datenrahmen erscheint ganz unten im Fenster Generated frame. Mit OK wird die Arbeit abgeschlossen und über Apply changes beendet.

Abbildung 9 - Eintragungen in den XBEES API Frame Generator. Die rot markierten Stellen wurden bearbeitet.

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.

Abbildung 10 - Im linken Fenster erscheint die Fernanfrage und die Antwort des XBee Moduls. Markiert man die Antwortzeile mit einem Mausklick, erscheint im rechten Fenster das komplette Datenpaket des antwortenden Moduls mit Erklärung.

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).

8 - Auswertung des Datenpaketes einer Fernanfrage

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.

Tabelle 1 - FernANFRAGE durch das XBee-Modul 4711 beim XBee-Modul 0815.

Auswertung des Datenpaketes FernANTWORT des XBees 0815

Tabelle 2 - FernANTWORT des XBee-Moduls 0815 auf die Anfrage des Moduls 4711.

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!

Druckversion | Sitemap
© Reinhard Rahner - Gettorf