HC-05 und HC-06 Bluetooth Module

Über den Beitrag

Über Bluetooth, Arduino und die HC-05 und HC-06 Bluetooth Module ist schon ausgesprochen viel geschrieben worden. Trotzdem hat es mich ziemlich viel Zeit gekostet mir diese Bauteile voll zu erschließen, da die  Informationen, die ich benötigt habe, z. T. in vielen verschiedenen Beiträgen verteilt waren. Hier nun der Versuch alles an einem Ort zu vereinigen. Folgende Themen möchte ich in diesem Beitrag behandeln:

  • Bluetooth vs. 433 MHz Funk
  • gängige Bluetooth Module
  • Schaltplan zum Ansteuern der Module
  • Einrichten der Bluetooth Module mittels AT Kommandos über:
    • Arduino IDE
    • Putty
    • DSD Tech Tool
  • Pairing von Bluetooth Modulen miteinander
  • Stromverbrauch und Reichweite

Welche Möglichkeiten sich über das Smartphone ergeben, werde ich wegen des Umfangs dieses Themas in einem separaten Beitrag später behandeln. 

Bluetooth vs. 433 MHz Funk

Für die kabellose Übertragung gibt es eine Reihe verschiedener Techniken. Neben Bluetooth kommen vor allem W-LAN, Infrarot und die (433 MHz) Funktechnik in Frage. Für die Kommunikation von Arduino zu Arduino wird man am ehesten zur 433 MHz Technik oder Bluetooth greifen. Dabei hat die 433 MHz Technik den Vorteil einer höheren Reichweite und die Module sind etwas günstiger zu haben. Es gibt durchaus auch Bluetooth Technik mit höherer Reichweite, aber die Standard Module sind eher auf Entfernungen von 10-20 Metern ausgelegt. Die Vorteile der Bluetooth Technik sind aus meiner Sicht die exklusiveren Verbindungen (d.h. man kann die Kopplung auf ein bestimmtes Modul beschränken) und vor allem die Möglichkeit mit Smartphones zu kommunizieren. Wer sich mehr mit den Details der Bluetooth Technik an sich beschäftigen möchte, der kann das z.B. auf Wikipedia tun. 

Gängige Bluetooth Module

In der Welt der Microcontroller haben sich vor allem die HC-05 und HC-06 Bluetooth Module etabliert. Sie sind für ca. 8 Euro bei Amazon oder Online Elektronikshops erhältlich. Neben HC-05 und HC-06 trifft man noch auf HC-08 und HM-10 Module. Letztere sind auch für IOS Betriebssysteme geeignet. Die HC-08 Module, die ich mir mal gekauft habe, konnte ich zwar über AT-Kommandos programmieren, aber weder mit meinem Android Smartphone noch untereinander koppeln. Insofern kann ich diese Teile nach meiner Erfahrung nicht empfehlen.

Die hier behandelten HC-05 und HC-06 Bluetooth Module (siehe Bild unten) sind im Grunde genommen Module von Modulen. Das jeweilige „Tochtermodul“ ist das grüne Teil auf dem blauen „Muttermodul“. Sucht man für HC-05 und HC-06 Bluetooth Module nach Datenblättern, beziehen sich diese meistens auf die „Tochtermodule“. Die Muttermodule nehmen einem Einiges an Verkabelungsarbeit ab, aber auch an Flexibilität.

Beispiele für HC-05 und HC-06 Bluetooth Module
links: HC-05 Modul von vorne und hinten, rechts: HC-06 Modul

Es gibt nicht das eine HC-05 oder HC-06 Modul, sondern verschiedene Versionen, die sich in der Handhabung leicht unterscheiden können. In einigen Beiträgen werden Module beschrieben, die noch einen „KEY“ Pin haben, mir sind diese aber noch nicht zwischen die Finger gekommen. 

HC-05 und HC-06 Bluetooth Module programmieren

Die Schaltung

Bevor man HC-05 und HC-06 Bluetooth Module für die Kommunikation verwenden kann, muss man gegebenenfalls einige Einstellungen über die sogenannten „AT-Befehle“ vornehmen. Dafür gibt es unterschiedliche Methoden. Zunächst möchte ich zeigen wie man das mittels Arduino bewerkstelligt.

3.3 Volt Beschränkung am RX-Pin

Die HC-05 und HC-06 Bluetooth Module werden seriell über ihren RX- und TX-Pin angesprochen. Die Stromversorgung der Module kann 3.3 bis 6 Volt betragen. Der RX-Pin hingegen ist eigentlich nur für 3.3 Volt ausgelegt. In meiner Schaltung weiter unten habe ich das mit einem Spannungsteiler gelöst. Alternativ kann man auch einen Level Konverter (gibt’s für < 1 Euro) nehmen.  Oder man nimmt einen Arduino Due oder arbeitet mit den „nackten“ Microcontrollern und lässt alles mit 3.3 Volt laufen. Aber ganz ehrlich, normalerweise ignoriere ich die Forderung einfach und arbeite mit 5 Volt. Und mir ist noch kein Modul kaputtgegangen. 

Die Schaltung ist für die HC-05 und HC-06 Bluetooth Module identisch. Der „State-“ und der „Enable-Pin“ am HC -05 bleiben unangeschlossen. Als Beispiel habe ich hier einen Arduino Nano verwendet. Pin 10 und Pin 11 des Arduinos sind mittels Software Serial als RX bzw. TX eingestellt.

Schaltung auf dem Breadboard zur Programmierung der HC-05 und HC-06 Bluetooth Module

Einstellung des HC-06 Moduls mittels AT-Kommandos

Vorbereitung

Ich beginne mit dem HC-06, da dieses etwas leichter einzustellen ist als das HC-05 Modul. Zunächst wird dazu der folgende Sketch auf den Arduino hochgeladen. 

#include <SoftwareSerial.h>
SoftwareSerial mySerial(10, 11);

void setup() {
  Serial.begin(9600);
  Serial.println("Los geht's");
  mySerial.begin(9600); //38400 für hc-05
}

void loop() { // run over and over
  if (mySerial.available()) {
    Serial.write(mySerial.read());
  }
  if (Serial.available()) {
    mySerial.write(Serial.read());
  }
}

Spätestens dann wird das HC-06 Modul entsprechend der oben abgebildeten Schaltung mit dem Arduino verbunden. Wenn das Modul mit Spannung versorgt wird, sollte eine rote LED relativ hektisch blinken (mehrfach pro Sekunde). Es gibt Versionen, die zusätzlich eine blaue LED haben (z.B hc01.comV2.0) und eben diejenigen ohne (z.B. linvorV1.8).

Dann kann man über den seriellen Monitor die Einstellungen an den Modulen mit den AT-Kommandos vornehmen. Wichtig ist, dass am seriellen Monitor die Baudrate 9600 und „Kein Zeilenende“ eingestellt ist. Außerdem ist zu beachten, dass das HC-06 Modul im gepairten Zustand nicht mit AT-Befehlen ansprechbar ist, also wenn eine Bluetooth Verbindung besteht. 

Einstellungen für den HC-06 im seriellen Monitor

AT-Kommandos für den HC-06

Als ersten Test kann man dem Modul ein einfaches „AT“ senden. Als Antwort erhält man ein freundliches „OK“. Sendet man weitere „AT“-Kommandos so erkennt man, dass alle Antworten ohne Leerzeichen oder Zeilensprung aneinandergehängt werden. 

Dann möchte man vielleicht den Namen des Moduls ändern. Soll es zum Beispiel Karl-Heinz heißen, so sendet man ein

AT+NAMEKarl-Heinz    –>    Antwort: OKsetname  

Für die Änderung des Pins sendet man ein

AT+PIN<dein vierstelliger PIN>    –>    Antwort: OKsetPIN

Voreingestellt ist eine Baudrate (Datenübertragungsrate) von 9600. Will man diese ändern, kann man das über den folgenden Schlüssel ändern:

Schlüssel für die Baudrateneinstellung des HC-06 Moduls.

Zur Einstellung einer Baudrate von beispielsweise 9600 lautet der Befehl:

AT+BAUD4    –>    Antwort: OK9600

Aber VORSICHT – es könnte sein, dass man nicht mehr zurück kann wenn man eine zu hohe Baudrate wählt. So kann z. B. ein PC nur eine Baudrate von maximal 115200 liefern. Hat man eine höhere Baudrate auf HC-06 eingestellt, kann man dem guten Stück nicht mehr mitteilen, dass man eine niedrigere Rate möchte. Einen Hardware Reset gibt es auch nicht. Das kann das HC-05 Modul besser. 

Eine wichtige Einstellung ist die Rolle des Moduls, nämlich entweder Master („M“) oder Slave („S“). Hier die Einstellung als Slave: 

AT+ROLE=S    –>    Antwort: OK+ROLE:S

Wer die blaue LED aktivieren- oder deaktivieren möchte, kann das über das folgende Kommando tun:

AT+LED1    –>    Antwort: LED ON  / AT+LED0    –>    Antwort: LED OFF

Die Version seines HC-06 Moduls erhält man mit dem Befehl:

AT+VERSION    –>    Antwort: hc01.comV2.0 (Beispiel)

Schließlich kann man noch – auch wenn das die meisten nicht benötigen werden – das Paritätsbit einstellen. Das ist entweder „N“ für no check, „O“ für ODD (ungerade) oder „E“ für EVEN (gerade), z. B.:

AT+PN    –>    Antwort: OK None

Einstellung des HC-05 Moduls mittels AT-Kommandos

Vorbereitung

Das HC-05 Modul wird entsprechend der oben abgebildeten Schaltung mit dem Arduino verbunden. Der Sketch für die Kommunikation mittels AT Kommandos muss leicht abgeändert werden, da der HC-05 im AT-Modus immer die Baudrate 38400 hat. Entsprechend ist in Zeile 7 die 9600 durch eine 38400 zu ersetzen. Der Vorteil ggü. dem HC-06 ist, dass man sich nicht durch eine unglückliche Baudratenwahl ausschließen kann. Ein weiterer Unterschied ist, dass der HC-05 erst vom Pairingmodus in den AT-Modus gebracht werden muss, indem man die Stromversorgung trennt und den kleinen Taster oberhalb der Pinleiste gedrückt hält während man die Stromversorgung wieder herstellt. Dann kann man den Taster loslassen. Den erfolgreichen Wechsel in den AT-Modus erkennt man daran, dass aus dem hektischen Blinken der roten LED ein langsames Blinken im 2 Sekundentakt wird.

Zweiter AT-Modus

Aber leider ist die Sache noch ein wenig komplizierter, da es zwei AT-Modi gibt. Es gibt AT-Kommandos, die man nur im zweiten Modus ausführen kann. Dazu gehört z.B. das Kommando für die Abfrage des Namens. Den zweiten Modus erreicht man, indem man den Taster dauerhaft gedrückt hält – was natürlich denkbar unhandlich ist.  Alternativ legt man HIGH an den PIN 34 des Tochtermoduls. Dazu kann man ein Kabel anlöten (s. u.) oder man benutzt eine Miniklemme.

Ich habe auch HC-05 Module bei denen man in den zweiten AT Modus geht, wenn man den Pin „EN“ auf HIGH setzt. Bei anderen HC-05 Modulen bringt das hingegen nichts. Dort wiederum kann der Pin „EN“ genutzt werden um das Modul auszuschalten indem man ihn auf „LOW“ setzt. Ziemliches Durcheinander – ich kann nichts dafür! Probiert es aus mit Euren Modulen. Die gute Nachricht ist, dass man die Befehle aus dem zweiten AT-Modus normalerweise nicht vermisst. Den Namen des Moduls beispielsweise kann man auch im ersten Modus ändern, man kann ihn nur nicht abfragen.

HC-05 mit Anschluss für Pin 34
HC-05 mit Anschluss für Pin 34

Umsetzung

Hat man alles verkabelt, den Sketch hochgeladen und den HC-05 in den AT-Modus gebracht, kann man ihn über den seriellen Monitor mit AT-Kommandos programmieren. Dabei stellt man dort die Baudrate auf 9600 (nicht 38400!) und „Sowohl NL als auch CR“ ein. Zum Testen kann man wieder ein „AT“ senden und erhält wieder ein freundliches „OK“ als Antwort. Im Gegensatz zum HC-06 wird jede Antwort in einer neuen Zeile ausgegeben. Außerdem ist der Befehlssatz größer, die Schreibweise etwas anders und der HC-05 ist gesprächiger. So kann man alle Einstellungen auch abfragen. Ein gewisser Komfort sind auch die Error Codes, die bei fehlerhaften Eingaben zurückgemeldet werden. Eine Liste der Error Codes findet sich weiter unten. 

AT-Kommandos für das HC-05 Modul

Kommen wir zu den wichtigsten AT-Kommandos. Der Pin heißt hier Password und wird wie folgt eingestellt:

AT+PSWD=<deine 4stellige PIN>    –>    Antwort: OK

Da die Antwort außer bei Abfragen immer „OK“ lautet, lasse ich diese Angabe von nun an weg. Der Pin wird folgendermaßen abgefragt:

AT+PSWD?    –>    Antwort: +PSWD:<deine 4stellige Pin>

Die Rolle (Master=1 oder Slave=0 oder Slave-Loop=2)  des Moduls stellt man so ein:

AT+ROLE=<0, 1 oder 2>  –>    Abfrage: AT+ROLE?

Im Slave-Loop Modus werden alle per Bluetooth empfangenen Daten wieder zurückgeschickt. 

Die Baudrate wird zusammen mit dem Paritätsbit und dem Stoppbit eingestellt, die ich beide auf „0“ lassen würde. Das Kommando für eine Baudrate von 38400 sieht dann so aus:

AT+UART=38400,0,0    –>    Abfrage: AT+UART?

Beim HC-05 gibt es verschiedene Connection Modes (CMODEs).  Im CMODE 0 (Default) koppelt sich das Modul nur dem Bluetooth Gerät  das die BIND Bluetooth Adresse besitzt (Erklärung folgt). Im CMODE 1 hingegen koppelt sich der HC-05 mit jedem verfügbaren Gerät,  vorausgesetzt (unter anderem) der HC-05 ist als Master und das Partnergerät als Slave eingestellt. 

AT+CMODE=<0 oder 1>    –>    Abfrage: AT+CMODE?

Ist die BIND Adresse beispielsweise 12:23:34:45:56:67 bzw. 1223:34:4556 in der NAP:UAP:LAP (non-significant, upper, lower address part) Schreibweise, erhält man bei Abfrage:

AT+BIND?    –>    Antwort: +BIND:1223:34:455667

Eingestellt werden kann die BIND Adresse folgermaßen:

AT+BIND=1223,34,455667 

Die eigene Adresse wird abgefragt mit:

AT+ADDR?   

Zum Schluss noch ein sehr sinnvolles Kommando, nämlich für das Zurücksetzen des Moduls auf Werkseinstellungen:

AT+ORGL

Weitere AT-Kommandos und Fehlercodes findet Ihr hier: 

AT-Kommandos und Error Codes für den HC-05

Und eine gute Beschreibung zu den Kommandos findet man hier.

Alternative Methoden zum Einstellen der HC-05 und HC-06 Bluetooth Module

Mit Arduino ohne SoftwareSerial Sketch

Dazu den BareMinimum Sketch aus den Beispielen hochladen, RX am Modul an RX (Pin 0) am Arduino, TX am Modul an TX (Pin 1) am Arduino. Dabei ist im Serial Monitor für den HC-06 die eingestellte Baudrate zu wählen, beim HC-05 immer die Baudrate 38400.  Der HC-05 ist natürlich auch hier in den AT-Modus zu bringen. Das schreibe ich jetzt nicht mehr jedesmal dazu. 

Ohne Arduino, mit Arduino IDE und USB-zu-TTL Adapter

USB-zu-TTL Adapter sind für wenige Euros erhältlich. Nimmt man ein Modell bei dem man die Spannung auf 3.3 Volt regeln kann, so braucht man auch keinen Spannungsteiler o.ä. mehr am RX Eingang. 

Verschiedene USB-zu-TTL Adapter zur Programmierung der HC-05 und HC-06 Bluetooth Module.
USB-zu-TTL Adapter

Hier ist die Verkabelung wieder „über Kreuz“, also RX an TX und TX an RX. Dann den Adapter an den PC anschließen und den entsprechenden Port in der Arduino IDE wählen. Die richtige Baudrate und das richtige „Zeilenmanagement“ einstellen und das war’s. Einen Sketch braucht man nicht.

Mit USB-zu-TTL Adapter und Putty

Wenn man die beliebte Terminal Software Putty verwendet, muss man zunächst die richtigen Einstellungen vornehmen. 

Putty Einstellungen (Session) für dieProgrammierung der HC-05 und HC-06 Bluetooth Module

Putty Einstellungen (Terminal) für dieProgrammierung der HC-05 und HC-06 Bluetooth Module
Putty Einstellungen (Serial) für die Programmierung der HC-05 und HC-06 Bluetooth Module

Beim HC-05 wird die Antwort permanent ausgegeben, was sich mit einem „Enter“ stoppen lässt.

Es gibt natürlich auch viele andere, ähnliche Programme wie Putty. Ich habe z.B. USR-TCP232 Test probiert und das funktionierte auch. 

Mit USB-zu-TTL Adapter und dem DSD TECH Tool

Mit dem DSD-TECH Tool lassen sich nur wenige Einstellungen vornehmen, aber dafür muss man sich nicht mit AT-Kommandos herumschlagen.

DSD TECH Tool Programmoberfläche  für die Programmierung der HC-05 und HC-06 Bluetooth Module

HC-05 und HC-06 Bluetooth Module miteinander pairen

Im letzten großen Abschnitt will ich zeigen, wie man die Bluetooth Module miteinander koppelt (paired) um z.B. zwei Arduinos miteinander kommunizieren zu lassen. Ich habe bei den folgenden Versuchen ein Modul mit einem Arduino UNO angesteuert und das andere mit einem Arduino Nano. Die Schaltung ist prinzipiell dieselbe wie die oben abgebildete.

Noch interessanter ist eigentlich, dass man über Bluetooth seinen Arduino auch bequem mit einem Smartphones ansprechen kann. Da das aber diesen ohnehin schon langen Beitrag endgültig sprengen würde, hebe ich mir das Thema für einen separaten Beitrag auf. 

HC-06 mit HC-06 pairen

HC-06 Module zu pairen ist denkbar einfach. Man muss lediglich das eine Modul als Master und das andere als Slave einstellen und beide Module müssen denselben PIN haben. Und beide Module müssen natürlich dieselbe Baudrate eingestellt haben. Nachdem man die Einstellungen vorgenommen hat, muss man die Module evtl. noch einmal kurz vom Strom trennen. Dann aber sollten sie innerhalb weniger Sekunden pairen, was man daran erkennt, dass die rote und die blaue LED (sofern letztere vorhanden ist) auf den Modulen  durchgehend leuchten. 

„Ping-Pong“ Testsketch 

Mit dem folgenden Sketch kann man die Verbindung testen und „Ping-Pong“ spielen. Im Setup wird ein Gruß losgeschickt. Je nachdem, welcher Arduino zuerst gestartet wurde, läuft der eine Gruß ins Leere, der andere wird von der Gegenseite empfangen. Dieses hier ist die Version für den UNO. Auf den Nano spielt man dann eine Version mit einem Gruß an den UNO. Und dann geht es munter hin und her. Wird eine Nachricht empfangen, so wird diese am seriellen Monitor ausgegeben und die eigene Grußnachricht verschickt. 

#include <SoftwareSerial.h>
SoftwareSerial hc_06(10, 11);
String sendMsg = "Hallo HC-06 am Nano";
String receiveMsg = "";

void setup() {
  Serial.begin(9600);
  Serial.println("Los geht's");
  hc_06.begin(9600);
  hc_06.print(sendMsg);
}

void loop() { 
  if (hc_06.available()) {
    receiveMsg = hc_06.readString();
    Serial.println(receiveMsg);
    delay(1000);
    hc_06.print(sendMsg);
  }
}
Kommunikationstest - Ausgabe am Serial Monitor
So sieht’s dann am UNO aus

HC-05 mit HC-05 pairen

Zwei HC-05 Module zu pairen ist ein bisschen komplizierter, da es verschiedene Möglichkeiten gibt. Beide Module müssen natürlich wieder dieselbe Baudrate eingestellt haben. Zudem sollten beide Module denselben PIN (hier: PSWD) haben. Ich habe das Pairing teilweise auch ohne denselben PIN hinbekommen, allerdings kann ich nicht mit Bestimmtheit sagen, welchen Regeln das folgte. Die Einstellungen werden im AT-Modus vorgenommen, das Pairing erfolgt im Pairing Modus. Wenn man das Modul mit Spannung versorgt ist man automatisch im Pairing Modus.  

Pairing im Connection Mode 1

HC-05 Modul Nr. 1:

  • CMODE: egal, ROLE=0 (Slave), PSWD wie Modul Nr. 2

HC-05 Modul Nr. 2:

  • CMODE: 1, ROLE=1 (Master), PSWD wie Modul Nr. 1

Hat man diese Einstellungen gewählt und bringt beide Module in den Pairing Modus, sollten nach ein paar Sekunden die LEDs beider Module im Gleichtakt blinken. Sie tun das ca. alle zwei Sekunden mit einem kurzen Doppelblinken. Dann kann man die Verbindung mit dem o. a. Sketch testen. 

Pairing im Connection Mode 0

HC-05 Modul Nr. 1:

  • CMODE: egal, ROLE=0 (Slave), PSWD wie Modul Nr. 2

HC-05 Modul Nr. 2:

  • CMODE: 0, ROLE=1 (Master), PSWD wie Modul Nr. 1

Im Connection Mode 0 muss das Master Modul als BIND Adresse die Adresse des Slave Moduls haben. Es gibt zwei Möglichkeiten das zu bewerkstelligen.

  1. Man liest die Adresse des Slave Moduls aus und trägt sie im Master Modul ein (so wie weiter oben beschrieben).
  2. Man paired die Module zunächst im Connection Mode 1. Dadurch wird automatisch die richtige BIND Adresse eingetragen, denn das ist automatisch die letzte verbundene Adresse. Dann wechselt man im Master Modul auf Connection Mode 0 und friert damit die BIND Adresse sozusagen ein. 

Durch den Connection Mode 0 kann man sicher gehen, dass sich das Master Modul wirklich nur mit einem bestimmten Modul verbindet.  

HC-05 mit HC-06 pairen

Das ist – Gott sei Dank – wieder einfach. Man muss nur sehr aufpassen, dass man nicht durcheinander kommt mit den verschiedenen AT-Befehlen, Baud Raten (sie müssen natürlich abgestimmt sein), usw. 

HC-06 Modul:

  • ROLE=S (Slave), PIN wie PSWD des HC-05

HC-05 Modul:

  • CMODE: 1, ROLE=1 (Master), PSWD wie Modul Nr. 1

Stromverbrauch und Reichweite

Ich habe sowohl für den HC-05 wie auch für den HC-06 einen Stromverbrauch von ca. 4 mA gemessen. Dieser ging beim Senden kurzfristig auf 40 mA hoch. Diese Bluetooth Module sind gut geeignet für die Datenübertragung innerhalb eines Raums.  Im Nachbarzimmer hatte ich bei offener Tür nur noch teilweise Empfang. Ich würde schätzen, dass auf freier Strecke 15, vielleicht 20 m möglich sind, aber nicht mehr. 

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.