BTM-222 in geöffnetem Zustand
Bluetooth Modul BTM-222

HC-05 Modul
Bluetooth Modul HC-05

Startseite

Bluetooth Module

Die hier vorgestellten Bluetooth Module ermöglichen es, serielle Geräte drahtlos mit einem PC oder Smartphone zu verbinden. Dabei kommt das Bluetooth SPP-Profil zum Einsatz.

BTM-222

Das Modul BTM-222 hat ein geschlossenes Gehäuse und ermöglicht durch eine externe Antenne gute Reichweite.

Solange das Modul keine Funkverbindung hat, kann es (an den Anschlüssen Rxd und TxD) mit AT-Befehlen konfiguriert werden. Nach dem Verbindungsaufbau überträgt es serielle Daten transparent zum Verbindungspartner.

Man schließt nur wenige Pins an:

Um das Modul an einen Mikrocontroller mit 5V Spannungsversorgung anzuschließen, brauchen Sie einen Spannungsregler (z.B. LP2950-3.3 oder LF33CV) und ein paar Kleinteile:

Schaltplan

Die wichtigsten Befehle, sie gehen nur am seriellen Port:

Befehle werden mit einem Zeilenumbruch (CRLF oder \r\n) abgeschlossen. Wenn Du mehrere Befehle nacheinander an das Modul sendest, musst Du ihm nach jedem einzelnen Befehl genug Zeit geben, den Befehl auszuführen. Das Modul kann den nächsten Befehl erst empfangen, wenn der vorherige Befehl abgearbeitet wurde.

Im Datenblatt des BTM222 werden zahlreiche spannende Features genannt, wie programmierbare I/O Pins, USB Interface, Voice Funktionen, etc. All diese Funktionen werden von der gewöhnlichen "SPP" Firmware aber nicht unterstützt.

Auf dem (seriellen Port erscheint die Meldung CONNECT  '001D-D9-F71C7E', wenn eine Funkverbindung aufgebaut wurde, und es erscheint die Meldung DISCONNECT  '001D-D9-F71C7E', wenn die Funkverbindung getrennt wurde. Außerdem erscheinen in nicht-verbundenem Zustand ab und zu Statusmeldungen, wie AT+GCAP. Wenn Sie für den angeschlossenen Mikrocontroller eine Firmware schreiben, könnte es nützlich sein, zu wissen, daß diese Meldungen niemals Kleinbuchstaben enthalten.

HC-05

Ein ähnliches Bluetooth Modul ist das HC-05 aus China, welches eine Leiterschleife als Antenne auf der Platine hat.

Die Reichweite ist deutlich geringer (einmal quer durchs Wohnzimmer geht schon nur noch eingeschränkt) und häufig schlägt der Verbindungsaufbau aus unerklärlichen Gründen fehl. Mangels Abschirmung wird dieses Modul wohl auch nie eine Zulassung für kommerzielle Anwendungen erhalten. Immerhin ist es billiger, als das BTM-222.

Solange das Modul keine Funkverbindung hat, kann es (an den Anschlüssen Rxd und TxD) mit AT-Befehlen konfiguriert werden. Nach dem Verbindungsaufbaun überträgt es serielle Daten transparent zum Verbindungspartner.

Das HC-05 Modul kann ebenfalls mit dem oben genannten Spannunsgregler und den Widerständen an 5V betrieben werden. Die Pinbelegung ist allerdings anders (siehe das Bild am rechten Rand).

Der Pin 34 kann benutzt werden, um (auch während einer Verbindung) in den Befehlsmodus zu wechseln:

Standardmäßig hat der serielle Port 9600 Baud und das Modul ist bereit, Verbindungen von jedem Master (PC oder Smartphone) anzunehmen. Am seriellen Port kann das Modul mit Befehlen konfiguriert werden, Das sind die wichtigsten Befehle für den Slave Modus:

Weitere Befehle sind:

Alle Befehle werden mit einem Zeilenumbruch (CRLF oder \r\n) abgeschlossen. Wenn Du mehrere Befehle nacheinander an das Modul sendest, musst Du ihm nach jedem einzelnen Befehl genug Zeit geben, den Befehl auszuführen. Das Modul kann den nächsten Befehl erst empfangen, wenn der vorherige Befehl abgearbeitet wurde.

Um das Modul in den Master Modus zu versetzen und mit einem Slave zu verbinden, sind folgende Befehle zu verwenden:

Nach diesen Befehlen verbindet sich das Modul zukünftig automatisch mit dem Slave. Mit AT+ROLE=0 gefolgt von AT+RESET kommt man zurück in den Slave Modus.

Die folgenden Befehle können benutzt werden, um nach erreichbaren Slaves zu suchen:

In manchen Dokumentationen werden Befehle genannt, mit denen man einzele I/O Pins direkt ansteuern kann. Dieses Feature ist aber offensichtlich optional und wird nicht von jeder Firmware unterstützt.

Hier ist eine unvollständige englische Beschreibung vom HC-05 und HC-06, sowie der Befehllsatz.

Der kleine Bruder HC-06

Das HC-06 Modul wird in zwei Varianten verkauft: Master und Slave, wobei nur sehr wenige Händler die Master Variante verkaufen. Die Betriebsart kann nicht umkonfiguriert werden. Äußerlich sehen die Module HC-05, HC-06-M und HC-06-S identisch aus. Das HC-06 hat die gleichen funktionalen Einschränkungen, wie das HC-05 (siehe oben).

Die Anschlussbelegung des HC-06 ist allerdings etwas anders:

Und auch der Befehlssatz ist anders:

Beim HC-06 dürfen die Befehle nicht mit Zeilenumbruch abgeschlossen werden, sonst ignoriert es sie einfach!

Hinweise zur Programmierung

Verwendung unter Windows

Stromversorgung einschalten, auf das Bluetooth Symbol in der Startleiste klicken. Man muss das Passwort des Moduls eingeben und es wird ein virtueller Serieller Port installiert.

Danach kann man die Verbindung benutzen, z.B. mit einem Terminal Programm. Windows baut die Funkverbindung erst auf, wenn der virtuelle serielle Port geöffnet wird, und die Verbindung wird beim Schließen des seriellen Portes wieder getrennt.

Falls das Modul zwar gefunden wird, aber beim Öffnen des virtuellen seriellen Port immer eine Fehlermeldung erscheint, versuche einen anderen Bluetooth Treiber. Bei mir funktionierte es mit dem Treiber aus Windows Vista nicht, wohl aber mit dem Treiber von Widcomm, den ich auf der Support-Seite meines Notebook-Herstellers downloaden konnte.

Um das Modul mit einem Java Programm anzusprechen, benötigst du die RxTx Library.

Für erste Tests empfehle ich das Programm Hammer Terminal.

Verwendung unter Linux

Auch unter Linux richtet der Gerätetreiber einen virtuellen seriellen port ein, allerdings nur, wenn man folgende Konfiguration vornimmt:

Stromversorgung einschalten, dann mit dem Befehl hcitool scan Die Hardware-Adresse des Moduls herausfinden. In meinem Falls erscheint "00:12:6F:08:98:90".

Diese Adresse trägt man in /etc/bluetooth/rfcomm.conf ein:

rfcomm0 {
    bind yes;
    device 00:12:6F:08:98:90;
    channel 1;
    comment "BTM-222";
}

Wenn das Modul beim Booten des Rechner erreichbar ist, wird ein virtuelles serielles Gerät mit dem Namen /dev/rfcomm0 erstellt. Ansonsten kann man das auch manuell auslösen, mit dem Befehl:

sudo rfcomm bind 0

Beim ersten mal erscheint ein Pop-Up Fenster, in dem man das Passwort des Moduls eingeben muss.

Die Funk-Verbindung wird erst aufgebaut, wenn der serielle Port geöffnet wird. Beim Schließen wird die Funk-Verbindung wieder abgebaut.

Um das Modul mit einem Java Programm anzusprechen, benötigst du die RxTx Library.

Erste Tests kann man prima mit Cutecom und mit Hammer Terminal durchführen.

Verwendung unter Android

Das Android SDK enthält spezielle Klassen für Bluetooth Kommunikation, welche nach dem Verbindungsaufbau einen InputStream und einen OutputStream bereitstellen. Einen virtuellen seriellen Port erhält man bei Android nicht.

Zum Verbindungaufbau benötigt man die UUID "00001101-0000-1000-8000-00805F9B34FB". Das Beispielprogramm "Bluetooth Chat" vom Android SDK funktioniert erst nach Anpassung der UUID im Quelltext.

Sie dürfen gerne von meiner minimalen Beispiel-App BtTest abgucken, wie man die Bluetooth Klassen des Android SDK benutzt.

Wer Apps in C++ programmiert, muss die Bluetooth API über das Java Native Interface (JNI) ansprechen. Die Qt Anwendung AndroidBluetooth demonstriert, wie das geht. Ab Version 5.3 unterstützt Qt Bluetooth die selbe Technik. Trotzdem bevorzugen manche Programmierer mein Beispiel, da es angeblich zuverlässiger funktioniert.

Verwendung unter iOS

Apples iOS Geräte unterstützen das SPP Protokoll leider gar nicht.