HC-05 Modul
Bluetooth Modul HC-05

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

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 RFCOMM Protokoll aus dem SPP-Profil zum Einsatz.

Mit chinesischen Bluetooth Modulen habe ich mehrfach schlechte Erfahrung gemacht, und das gute BTM-222 ist nur noch schwer zu bekommen. Außerdem unterstützen die mobilen Geräte von Apple das RFCOMM Protokoll nicht. Daher ist der ESP-8266 Chip mit WLAN eventuell eine bessere Alternative für dein Projekt.

HC-05

Das HC-05 aus China ist für 3,3V gedacht, man kann es allerdings auch zusammen mit einer Adapterplatine für 5V kaufen. Bei meinen Tests erreichte es weniger als 5 Meter Reichweite mit weitgehend fehlerfreier und zügiger Datenübertragung. Auch bei kurzer Distanz schlägt der Verbindungsaufbau zum PC oder Smartphone sporadisch fehl. Mangels Abschirmung wird dieses Modul wohl auch nie eine Zulassung für kommerzielle Anwendungen erhalten.

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.

Die Pinbelegung ist folgende:

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

BTM-222

Das Modul BTM-222 von Rayson hat ein geschlossenes Gehäuse und schafft schon mit einem simplen Stück Draht als Antenne eine gute Reichweite. 5 Meter quer durchs Wohnzimmer sind gar kein Problem. Es arbeitet auch viel zuverlässiger, als die HC-05 und HC-06 Module.

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 BTM-222 an einen Mikrocontroller mit 5V Spannungsversorgung anzuschließen, brauchen Sie einen Spannungsregler, der kurzzeitig 300mA liefern kann (z.B. 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.

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 RFCOMM Protokoll leider gar nicht.