Die Sensoren des Seeed-Kits liefern maximal 3,3 Volt – an sich kein Problem für die Datenports des XBee-Moduls, jedoch nutzen einige Module einen internen Referenzwert von 1,2 Volt, auf den sich die analogen Messwerte beziehen. Analoge Messungen liefern Werte zwischen 0 und 1023, wobei 0 einer anliegenden Spannung von 0 Volt und 1023 einer anliegenden Spannung in Höhe des Referenzwerts entspricht. Übersteigt also die anliegende Spannung den Referenzwert, liefert die Messung 03 FF zurück, also 1023.
Um die 3,3 Volt auf 1,2 Volt abzubilden, benötigen Sie einen Spannungsteiler. Der besteht im einfachsten Fall aus zwei Widerständen. Um die Spannung von 3,3 Volt in 2,1 und 1,2 Volt zu unterteilen, löten Sie zwei Widerstände mit den Werten 10 kOhm und 5 kOhm zusammen und bauen sie zwischen den Sensorausgang und GND. An der Kontaktstelle liegen dann maximal 1,1 Volt an. So hält das Modul mit einiger Genauigkeit den Referenzwert ein, den Messfehler gleicht eine Software-Korrektur aus.
RasPi auf Empfang
Zum Empfang der Daten verbinden Sie das Koordinator-Modul mithilfe eines XBee-USB-Adapters mit dem USB-Anschluss des Raspberry Pi. Die empfangenen Datenpakete lesen Sie anschließend über die serielle USB-Schnittstelle des RasPi aus. Dazu öffnen Sie eine Konsole. Das spezielle Terminalprogramm Screen installieren Sie via sudo apt-get install screen nach. Die Eingabe von sudo screen /dev/ttyUSB0 9600 liefert einen ersten Eindruck, ob alles funktioniert. Da die Daten im API-Modus keine druckbaren Zeichen enthalten, erscheinen lediglich wirre Zeichen auf dem Bildschirm.
Das Python-Skript aus Listing 2 liest die serielle USB-Schnittstelle aus, interpretiert die Länge des Datenpakets sowie den analogen Messwert und gibt die Daten aus. Der Aufbau des Datenpakets ist in der Zeichenkette '>BHBBBBBBBBBBBBBBBBBBHB' entsprechend dem Paketaufbau für ein I/O-Frame kodiert. Der Buchstabe B steht für eine 1 Byte, H für eine 2 Bytes lange Zahl.
Listing 2
#!/usr/bin/python
import serial
import struct
port = serial.Serial('/dev/ttyUSB0', baudrate=9600, rtscts=True, timeout=0.75)
data_struct = struct.Struct('>BHBBBBBBBBBBBBBBBBBBHB')
while True:
buf = port.read(24)
if len(buf) == 24:
frm = data_struct.unpack(buf)
if frm[0] == 0x7E:
print "Datenpaket ist %i Bytes lang" % frm[1]
print "Analoger Messwert: %i (von 1023)" % frm[20]
port.close
Das Python-Skript bringt die am seriellen USB-Port eingelesenen Daten grundsätzlich in jede Form und verarbeitet sie weiter. Abbildung 10 zeigt zum Beispiel die Ausgabe auf einem kleinen Display an, wie es bei Amazon schon für knapp 10 Euro zu haben ist [10]. Das Ansteuern regelt die C-Bibliothek von Charles Hallard [11], von der es auch eine Portierung für den Raspberry Pi gibt.
Fazit
Die Arbeit mit XBee-Modulen erfordert etwas Einarbeitung. Als Lohn der Arbeit verwalten Sie damit auch große, verteilte Sensornetzwerke mit einem RasPi. Dieser Artikel zeigt nur die Grundlagen und das Prinzip des Auslesens entfernter Sensoren mithilfe von XBee-Modulen. Das spannende Thema hält aber noch viel mehr Möglichkeiten bereit. Eine gute Einführung gibt das englischsprachige Buch von Robert Faludi [12]. Programmierbare XBee-Module können zum Beispiel die Sensordaten schon vor dem Absenden aufbereiten. Mit stärkeren Antennen erhöhen Sie die Reichweite des Sensornetzwerks auf mehr als 100 Meter.
Glossar
- PCB
-
Printed Circuit Board. (Bestückbare) Leiterplatte für die mechanische Befestigung und elektrische Verbindung von elektronischen Bauteilen.
- Wine
-
Eine Windows-kompatible Laufzeitumgebung für unixoide Betriebssysteme, mit der sich viele Windows-Programme auch unter Linux/Unix mit dem X-Window-System ausführen lassen. Wine kann DLLs einer vorhandenen Windows-Version verwenden.
Infos
- Adapterplatine für XBee: http://www.watterott.com/de/Adapterplatine-fuer-XBee-Module
- USB-zu-TTL-Konverter-Modul: http://www.amazon.de/FT232RL-FTDI-USB-auf-TTL-Serienadapter-Arduino/dp/B00HSXDGOE
- XBee-USB-Adapter: http://www.amazon.de/Quality-Serial-Adapter-Bluetooth-Arduino/dp/B00PC9FC2K
- XBee Explorer USB: http://www.watterott.com/de/XBee-Explorer-USB
- XBee-PRO 868 OEM Development Kit: http://www.exp-tech.de/xbee-pro-868-oem-development-kit-w-2-xbee-pro-modules
- XCTU für XBee : http://www.digi.com/products/wireless-wired-embedded-solutions/zigbee-rf-modules/xctu
- Einführung in XCTU (englisch): http://youtu.be/EA-2Xa5OAY8
- Seeed Studio Wireless Sensor Node Solar Kit: http://www.exp-tech.de/seeed-studio-wireless-sensor-node-solar-kit
- Handbuch XBee ZNet 2.5: http://ftp1.digi.com/support/documentation/90000866_G.pdf
- 0,96-Zoll-OLED-Modul für Arduino: Art. Nummer B00NHKM1C0 bei Amazon.de
- ArduiPi_SSD1306: https://github.com/hallard/ArduiPi_SSD1306
- Robert Faludi, “Building Wireless Sensor Networks”: http://www.amazon.de/Building-Wireless-Sensor-Networks-Processing/dp/0596807732







