Bluetooth-Anwendungen selbst gemacht
Aus ELVjournal
04/2006
0 Kommentare
Die
letzten beiden Ausgaben beschreiben einige Grundlagen über den
Kurzstreckenfunk Bluetooth und ein Modul, welches eigene Anwendungen um
eine drahtlose serielle Schnittstelle mit dem Funkprotokoll Bluetooth
erweitert. Die spannende Frage, wie Bluetooth selbst programmiert wird,
klärt dieser Artikel.Drahtlose Alleskönner
Die
Java-Plattform Micro Edition (Java ME) und der Kurzstreckenfunk
Bluetooth sind zwei herausragende Technologien in der drahtlosen Welt.
Das „write once run anywhere“ (zu Deutsch: einmal schreiben, überall
ausführen) -Konzept der Java Micro Edition verschafft dem Programmierer
eine sehr hohe Produktivität. Bluetooth lässt sowohl mobile Endgeräte
wie Mobilfunktelefone als auch Computer über einheitliche Protokolle
weltweit miteinander kommunizieren. Was liegt näher, als diese
erfolgreichen Konzepte zu vereinen und auf bequeme Art über ein
Mobilfunktelefon ein Garagentor, den PC oder die Außenbeleuchtung
fernzubedienen. Auch der Sicherheitsaspekt spielt bei diesem Unterfangen
eine nicht unerhebliche Rolle, welcher bei einer Bluetooth-Verbindung
schon eingebaut ist. Die mittlerweile sehr große Vielfalt mobiler
Endgeräte würde den Entwickler vor die unlösbare Aufgabe stellen, eine
speziell angepasste Version für jedes einzelne Gerät zu erstellen – doch
hier setzt das Konzept von Java ME an und stellt eine einheitliche
Umgebung mit standardisiertem Zugriff auf die Hardware zur Verfügung. Um
dieses Vorhaben in die Tat umsetzen zu können, erklärt Ihnen dieser
Artikel den Kommunikationsablauf einer Bluetooth-Verbindung anhand von
Ausschnitten aus Quelltexten. Dazu stellen wir eine passende
Entwicklungsumgebung vor, die vollkommen kostenfrei aus dem Internet zu
beziehen ist.Entwicklungsumgebung
![Bild 1: Hello-World-MIDlet in der Entwicklungsumgebung NetBeans 5.0 Bild 1: Hello-World-MIDlet in der Entwicklungsumgebung NetBeans 5.0](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_009.jpg)
|
Bild 1: Hello-World-MIDlet in der Entwicklungsumgebung NetBeans 5.0 |
Bluetooth
wird standardmäßig nicht direkt von Java ME oder Java SE unterstützt.
Einige Firmen erkannten bereits früh das Potenzial mobiler Anwendungen
mit Bluetooth und formierten schon im Jahre 2000 im so genannten JCP
(Java Community Process) die JSR 82 (Java Specification Request): „Java
APIs for Bluetooth“. Viele Hersteller von Mobilfunktelefonen haben
heutzutage diese Spezifikation bereits umgesetzt, genaue Informationen
sind beim jeweiligen Hersteller abzurufen. Als Entwicklungsumgebung wird
hier NetBeans 5.0 der Firma Sun verwendet, die hier genannten
Beschreibungen beziehen sich auf diese Version, wobei viele andere
Entwicklungsumgebungen wie z. B. Eclipse oder der JBuilder von Borland
ebenso verwendet werden können. NetBeans 5.0 wird zusammen mit dem JDK
5.0 auf der Internetseite http://java.sun.com zum Download angeboten.
Dort ist ebenfalls das NetBeans Mobility Pack 5.0 erhältlich, welches
noch nachzuinstallieren ist, damit NetBeans auch Anwendungen für Java ME
erstellt. Eine Installation des Sun Java Wireless Toolkit ist ebenso
empfehlenswert, da dieses einige Beispiele enthält, welche für Java ME
geschrieben sind. Abbildung 1 zeigt ein Bildschirmfoto der
Entwicklungsumgebung mit einer Hello-World-Anwendung für ein so
genanntes MIDlet. MIDlets sind Anwendungsprogramme für mobile Geräte,
die in der Programmiersprache Java geschrieben sind.Kommunikationswege
Die
Aufgabe, einen PC von einem Mobil telefon aus fernzusteuern, hört sich
zunächst einfach an. Auf dem Mobiltelefon läuft ein MIDlet, welches
Eingaben von der Tastatur entgegennimmt und diese über eine
Bluetooth-Verbindung an den PC sendet. Der PC ist dazu mit einem
Bluetooth-USB-Adapter ausgestattet und empfängt die Tastendrücke –
allerdings wird die PC-seitige Anwendung in Java SE geschrieben, welche
ohne eine Bluetooth- Unterstützung ausgeliefert wird. Hier gibt es zwei
Auswege, zum einen kann man vom Mobiltelefon aus eine serielle
Datenverbindung über Bluetooth anlegen. Der Treiber des
Bluetooth-USB-Adapters stellt auf dem PC eine virtuelle serielle
Schnittstelle bereit. Mit dem Open-Source-Projekt RxTx (Internetseite:
http://www.rxtx.org) steht eine plattformübergreifende Erweiterung von
Java SE bereit, welche den Zugriff auf serielle Schnittstellen erlaubt.
Falls man sich auf das Betriebssystem Windows XP mit Service-Pack 2
beschränkt, gibt es auch eine Erweiterung namens BlueCove, welche eine
JSR-82-Umsetzung auf Java SE vornimmt. Das Projekt wurde ursprünglich
von Intel begonnen, ist mittlerweile Open Source und auf der
Projektseite http://bluecove.sourceforge.net verfügbar. Anleitungen zum
Einbinden der Erweiterungen in die Java SE finden sich auf den
jeweiligen Projektseiten.Ablauf eines Verbindungsaufbaus
![Bild 2: Eigenschaften der Bluetooth-Geräte Bild 2: Eigenschaften der Bluetooth-Geräte](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_005.jpg)
|
Bild 2: Eigenschaften der Bluetooth-Geräte |
Eine
Bluetooth-Anwendung verhält sich entweder wie ein Client oder wie ein
Server, bietet also einen Dienst an oder nimmt einen Dienst wahr. In der
Abbildung 2 sind die verschiedenen Rollen, die ein Gerät wahrnimmt, in
einer Übersicht dargestellt.
Initialisierung: Jede Bluetooth-Anwendung, ob Client oder Server, muss als ersten Schritt den Bluetooth-Stack initialisieren.
Client:
Ein Client nimmt einen Dienst eines Servers wahr. Dazu sucht er
zunächst nach nahen Bluetooth-Geräten (Device Discovery). Anschließend
ruft er die verfügbaren Dienste der einzelnen Geräte ab. Falls einer der
Dienste gewünscht ist, kann eine Verbindung aufgebaut werden.
![Bild 3: Detaillierter Verbindungsaufbau zweier Bluetooth-Geräte Bild 3: Detaillierter Verbindungsaufbau zweier Bluetooth-Geräte](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_004.jpg)
|
Bild 3: Detaillierter Verbindungsaufbau zweier Bluetooth-Geräte |
Server:
Der Server stellt dem Client Dienste zur Verfügung. Die Dienste werden
in der Datenbank SDDB (Service Discovery Database) lokal auf dem Gerät
abgelegt. Der Server ist sichtbar für andere Bluetooth-Geräte und wartet
auf Verbindungsanfragen. Werden angebotene Dienste nicht mehr
gebraucht, entfernt sie der Server aus der Datenbank.
Ein
Ablaufschema, welches mehr Detailinformationen enthält, zeigt die
Abbildung 3. Beide Geräte bereiten zunächst den Bluetooth-Stack vor. Die
Anwendung auf dem Server stellt einen Dienst bereit und wartet auf
eingehende Verbindungsanfragen. Der Client sucht nach nahen
Bluetooth-Geräten und ermittelt die angebotenen Dienste. Wenn ein
passender Dienst gefunden wird, verbindet sich der Client mit dem
Server.
Initialisierung
![Bild 4: Die Initialisierung des Bluetooth-Stacks Bild 4: Die Initialisierung des Bluetooth-Stacks](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_008.jpg)
|
Bild 4: Die Initialisierung des Bluetooth-Stacks |
Jede
Bluetooth-Anwendung verschafft sich zu Beginn eine Referenz auf den
Bluetooth-Manager über die Klasse „Local Device“. Während eine
Server-Anwendung sich nur „discoverable“ (auffindbar) markiert, besorgt
sich der Client eine Referenz auf den „DiscoveryAgent“. Dieser stellt
die Dienste zur Verfügung, um andere Geräte zu suchen und dessen Dienste
zu erkunden. Der Quelltext in Abbildung 4 illustriert dieses Beispiel.Verbindungen erstellen
Damit
eine Server-Anwendung einen Dienst anbieten kann, lauscht sie auf
spezielle Verbindungsanfragen. Serielle Datenverbindungen werden über
das SPP (Serial Port Profile) abgewickelt. Die allgemeine Form einer URL
(Verbindungen werden als URL realisiert) lautet:
btspp://hostname:[CN|UUID]; parameters
Die Parameter bedeuten im Einzelnen:
- btspp ist das URL-Schema für eine serielle Datenverbindung
- hostname ist entweder „localhost“ für eine Server-Verbindung oder eine Bluetooth-Adresse für eine Client-Verbindung
- CN ist die Kanalnummer und wird vom Client beim Verbindungsaufbau verwendet.
- UUID ist eine universelle eindeutige Kennung, deren Eindeutigkeit im Rahmen der Wahrscheinlichkeit garantiert wird
- parameters beschreiben den Dienst, enthalten Sicherheitseinstellungen.
Ein konkretes Beispiel für eine solche URL wäre damit:
btspp://localhost:3f564545 634eb5433a5b48ff04234bc2; authenticate=true;encrypt= true;name=serialVCP
Falls
eine Verbindung von einem Client zu einem Server aufgebaut wird,
verwendet man anstelle von „localhost“ eine Verbindung, die im
„ServiceRecord“ enthalten ist. Im Quelltext in Abbildung 5 wird das
Erstellen der Verbindung gezeigt. Wenn ein Client eine passende
Gegenstelle gefunden hat, verbindet er sich mit dem Server wie in
Abbildung 6 gezeigt.
![Bild 5: Erstellen einer Server-Verbindung Bild 5: Erstellen einer Server-Verbindung](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_007.jpg)
|
Bild 5: Erstellen einer Server-Verbindung |
![Bild 6: Ein Client verbindet sich mit einem Server Bild 6: Ein Client verbindet sich mit einem Server](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic.jpg)
|
Bild 6: Ein Client verbindet sich mit einem Server |
Geräte und Dienste finden
![Bild 7: Auffinden von Geräten und Diensten Bild 7: Auffinden von Geräten und Diensten](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_002.jpg)
|
Bild 7: Auffinden von Geräten und Diensten |
Ein
eigener Bereich der Bluetooth API beschäftigt sich ausschließlich mit
dem Auffinden anderer Bluetooth-Geräte und dem Ermitteln der angebotenen
Dienste. Die Klasse „DiscoveryAgent“ enthält hierfür drei Methoden:
- retrieveDevices() – ruft bereits bekannte Geräte ab
- startInquiry() – beginnt eine aktive Suche nach Bluetooth-Geräten in Reichweite
- cancelInquiry() – beendet den Suchlauf.
Beim Auffinden von Geräten werden automatisch folgende Methoden im Interface „DiscoveryListener“ aufgerufen:
- deviceDiscovered() – wird aufgerufen, sobald ein neues Gerät gefunden wird
- inquiryCompleted() – wird aufgerufen, sobald die Suche beendet ist.
Analog
zum Auffinden von Geräten funktionieren die Methoden der Klasse
„DiscoveryAgent“ zum Suchen nach bereitgestellten Diensten.
- searchServices() – startet die Suche nach Diensten
- cancelServiceSearch() – beendet den Suchlauf.
Auch
hier gibt es ein Interface, dessen Methoden jeweils beim Auffinden
eines Dienstes gestartet werden. Folgende Methoden des Interfaces
„DiscoveryListener“ sind dabei zu implementieren:
- serviceDiscovered() – wird aufgerufen, wenn ein Dienst gefunden wird
- serviceSearchCompleted() – wird aufgerufen, sobald die Suche beendet ist.
Komfortabel testen
![Bild 8: Simulieren von Mobiltelefonen im Sun Java Wireless Toolkit Bild 8: Simulieren von Mobiltelefonen im Sun Java Wireless Toolkit](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_006.jpg)
|
Bild 8: Simulieren von Mobiltelefonen im Sun Java Wireless Toolkit |
Im
Sun Java Wireless Toolkit sind Emulatoren für Mobiltelefone enthalten,
damit die Anwendungen sehr komfortabel getestet werden können, ohne sie
jedes Mal umständlich auf ein reales Mobiltelefon zu kopieren. Der
Emulator kann sogar über Bluetooth (simuliert über TCP) zwischen
mehreren Instanzen Daten austauschen. Das Bildschirmfoto in der
Abbildung 8 zeigt ein mit dem Wireless Toolkit ausgeliefertes Beispiel.
Das Mobiltelefon links dient als Server und stellt Bilder zum
Herunterladen zur Verfügung, während die beiden Mobiltelefone auf der
rechten Seite als Client konfiguriert sind und jeweils ein Bild des
Servers geladen haben und anzeigen.Ausblick
![Bild 9: Bildschirm unter Windows XP unter Java sperren Bild 9: Bildschirm unter Windows XP unter Java sperren](Bluetooth-Anwendungen%20selbst%20gemacht%20_%20ELVjournal-Dateien/journal_pic_003.jpg)
|
Bild 9: Bildschirm unter Windows XP unter Java sperren |
Ein
hilfreicher Tipp für eigene Entwicklungen ist die Klasse Robot im Paket
„java.awt.Robot“. Diese Klasse kann Tastendrücke simulieren und damit
verschiedene Aktionen ausführen. Der Beispielcode in Abbildung 9 sperrt
unter Windows XP den Bildschirm. Obwohl der Quellcode zur Kommunikation
mit Bluetooth sehr kompakt und übersichtlich ausfällt, ist zum
Verständnis Hintergrundwissen zu Bluetooth erforderlich. Mit den
vorgestellten Konzepten sollten Sie jetzt in der Lage sein, eine
Anwendung zu schreiben, welche Ihren PC vom Mobiltelefon aus
fernsteuert.Fachbeitrag online und als PDF-Download herunterladen
Inhalt
Sie erhalten den Artikel in 2 Versionen:
als Online-Version
als PDF (4 Seiten)
Sie erhalten folgende Artikel:
- Bluetooth-Anwendungen selbst gemacht
Hinterlassen Sie einen Kommentar: