Es ist schon eine Weile her (7 Jahre) seit ich eine preiswerte Bluetooth Anbindung für Mikrocontroller wie den Arduino vorgestellt habe. Höchste Zeit für ein Update.
aktuelle Bluetooth Module
Prinzipiell hat sich seit 2008 wenig geändert, allerdings hat sich die Anzahl der verfügbaren Module deutlich erhöht. Nach wie vor benötigen die meisten Module 3,3V Stromversorgung und benötigen eine Anpass-Schaltung zum Anschluss an 5V Mikrocontroller.
Zu den beliebtesten, weil sehr preiswert, zählen die Bluetooth Module des chinesischen Hersteller Wave Sense. Dazu gehören die Module HC-05, HC-06.
HC-05 Modul mit Trägerboard
Es gibt das HC-05 Modul als SMD Version oder mit Trägerboard, wie z.B. von Aukru bei Amazon.
[pe2-image src=“http://lh3.googleusercontent.com/-f16GtpTDvUs/VopqY_im5GI/AAAAAAAAOwg/fJI0U3TdVOg/s144-c-o/IMG_5684.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235913611653866594″ caption=““ type=“image“ alt=“IMG_5684.JPG“ ]
Das oben abgebildete Modul verfügt über:
- einen 6-poligen Pfostenstecker im 0.1″ Raster
- benötigt 3.6-6V Stromversorgung, läuft nicht mit 3,3V
- 3.3V Logikpegel für die Signal Leitungen (Pegelwandler notwendig)
- Taster zum Wechsel in den AT-Mode
HC-05 Modul (5V tolerant)
Ich habe mir auch das SMD Modul besorgt und ein eigenes Trägerboard mit Fritzing erstellt.
[pe2-image src=“http://lh3.googleusercontent.com/-1B1yyLdeUV0/VdzrzgyYbII/AAAAAAAAOjc/P6Vy8u9-wsI/s144-c-o/IMG_0456.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6187079258307325058″ caption=““ type=“image“ alt=“IMG_0456.JPG“ ]
Schaltplan und Layout Files sind auf Github zu finden. Die Leiterplatte kann per Jumper auch für HC-06 und HM-10 Module verwendet werden.
Das oben abgebildete Modul verfügt über:
- einen 5-poligen Buchsenleiste im 0.1″ Raster
- benötigt 3.3V Stromversorgung, läuft nicht mit 5V
- hat 5V tolerante Logikpegel für die Signal Leitungen
Hier wird 3,3V als Stromversorgung benötigt, das Modul verfügt über keinen eingebauten Spannungswandler. Dafür ist ein Spannungsteiler für die Arduino TXD Leitung vorhanden.
HC-05 Modul (nur für3.3V)
Eine weitere Variante des HC-05 Moduls ist für reinen 3,3V Betrieb ausgelegt. Besitzt keinen Spannungswandler und keine Pegelwandler. Das SMD-Modul sitzt hier auf einer Lochrasterplatte. Das Modul verfügt über eine 6-polige Buchsenleiste mit FTDI kompatiblen Pinbelegung.
[pe2-image src=“http://lh3.googleusercontent.com/-_MXKz3yCIsE/VdzqAJel5zI/AAAAAAAAOio/AV-_UiX1fUw/s144-c-o/IMG_3675.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6187077276365350706″ caption=““ type=“image“ alt=“IMG_3675.JPG“ ]
[pe2-image src=“http://lh3.googleusercontent.com/-75G-vBzT6uU/VdzqBpT3gFI/AAAAAAAAOiw/IWvFqdkJ2hE/s144-c-o/IMG_3676.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6187077302090170450″ caption=““ type=“image“ alt=“IMG_3676.JPG“ ]
So sieht der Schaltplan zu dem 3,3V Träger-Modul aus:
[pe2-image src=“http://lh3.googleusercontent.com/-x7X53d7B__I/Vol7FqakIPI/AAAAAAAAOvM/3fxUsWtHyIU/s144-c-o/hc-05-FTDI_Schaltplan.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235650496286433522″ caption=““ type=“image“ alt=“hc-05-FTDI_Schaltplan.jpg“ ]
HC06 Modul mit Trägerboard
Rein äußerlich unterscheiden sich das HC-06 kaum vom HC-05 Modul. Lediglich der Taster fehlt, und es gibt nur einen 4-poligen Steckverbinder. Die Anschlüsse sind auf 0.1″ Steckerleiste herausgeführt. Das Modul ist ebenfalls von Aukru bei Amazon erhältlich.
Beim HC-06 gibt es im Gegensatz zum HC-05 keine Umschaltung zwischen Master und Slave. Stattdessen gibt es verschiedene Module mit unterschiedlicher Firmware. Das Problem dabei ist, dass ein Master Modul nicht zum Anschluss an ein Mikrocontroller taugt. Man muss hier schon den Angaben des Händlers trauen um nicht das falsche Modul geliefert zu bekommen.
[pe2-image src=“http://lh3.googleusercontent.com/-vERhohKI4F0/Ve4FP5_5xiI/AAAAAAAAOoA/SG7uKBzCQ6c/s144-c-o/IMG_5629.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6191892308506035746″ caption=““ type=“image“ alt=“IMG_5629.JPG“ ]
[pe2-image src=“http://lh3.googleusercontent.com/-Vjniq3VfB6Y/Ve4FRLS4DvI/AAAAAAAAOoI/7JtBv8xkV0w/s144-c-o/IMG_5630.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6191892330328887026″ caption=““ type=“image“ alt=“IMG_5630.JPG“ ]
Das oben abgebildete Modul verfügt über:
- einen 4-poligen Pfostenstecker im 0.1″ Raster
- benötigt 3.6-6V Stromversorgung, läuft nicht mit 3,3V
- 3.3V Logikpegel für die Signal Leitungen (Pegelwandler notwendig)
Im Datenblatt zum HC-05/06 findet man die komplette Befehlsübersicht
HM-10 Modul (BLE 4.0)
Bluetooth 4.0 oder BLE (Bluetooth Low Energy) ist die neueste Bluetooth Version und verspricht Geräte mit niedrigen Stromverbrauch. Insbesondere bei Smartphones erwies sich eingeschaltes Bluetooth als wahrer Stromfresser. Das soll nun mit BLE ein Ende finden.
Mit dem HM-a0 gibt es ein preisgünstiges Bluetooth Modul. Als SMD Modul oder mit Trägerboard erhältlich, z.B. bei Amazon.
[pe2-image src=“http://lh3.googleusercontent.com/-VXXYzz5jn7k/Ve4FNaMaJ-I/AAAAAAAAOnw/Eaa5UpUVYkc/s144-c-o/IMG_5627.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6191892265608816610″ caption=““ type=“image“ alt=“IMG_5627.JPG“ ]
[pe2-image src=“http://lh3.googleusercontent.com/-xPQrJpAOfO4/Ve4FO22gCTI/AAAAAAAAOn4/f5iDIrWPSCo/s144-c-o/IMG_5628.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6191892290481424690″ caption=““ type=“image“ alt=“IMG_5628.JPG“ ]
Das oben abgebildete Modul verfügt über:
- einen 6-poligen Pfostenstecker im 0.1″ Raster
- benötigt 3.6-6V Stromversorgung, läuft nicht mit 3,3V
- hat 5V tolerante Logikpegel für die Signal Leitungen
Im Datenblatt zum HM-10 findet man die Befehlsübersicht
Vorsicht Falle:
Ein Falle lauert bei Verwendung von Bluetooth Modulen nach BLE 4.0 Standard. Denn hier muss auch die Gegenstelle (PC, Smartphone Tablett) BLE 4.0 unterstützen. Zwar sind die gängigen Bluetooth 4.0 USB Dongles abwärts kompatibel zu BT 3.0, 2.0 und 1.1, das gilt aber nicht für die Bluetooth Module wie das HM-10. Diese sind nur zu BT 4.0 kompatibel.
Das nächste Problem ergibt sich bei der Anbindung an einen PC. Im BT 4.0 Standard gibt es kein Serial Port Profile (SPP) mehr. Somit wird das Bluetooth Module nicht erkannt, bzw es wird kein Virtual Com Port dafür eingerichtet. Mir ist es nicht gelungen eine Verbindung von Windows PC zum HM-10 Modul herzustellen.
In diesem Fall kann ich für das HM-10 keine Empfehlung aussprechen, wenn man eine Bluetooth Verbindung zwischen PC und Arduino benötigt.
Fazit:
BLE 4.0 Module taugen derzeit nur für Android/IOs Anwendungen, nicht für Desktop Anwendungen. Es sei denn, man schreibt seine eigenen Programme. Auf der Adafruit Seite gibt es dazu einige Quellen.
Adafruit Bluefruit EZ-Link
Das Beste kommt zum Schluss. Mein absolutes Lieblings Modul ist das Adafruit Bluefruit Modul. Hier gibt es nichts zu meckern. Das Modul ist einfach perfekt und funktioniert tadellos.
- FTDI kompatibles Pinout (direkter Anschluss an Arduino Pro oder Pro Mini)
- 3.5-16V Eingangsspannungsbereich
- 3.3 und 5V tolerante Logigsignale
- Arduino Sketch Upload über Bluetooth möglich (mit AutoReset
- Auto Baudrate Erkennung
[pe2-image src=“http://lh3.googleusercontent.com/-OLuWs377JQU/VdzqEtxMvxI/AAAAAAAAOjA/4KCH2eBgOiE/s144-c-o/IMG_0460.JPG“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6187077354826546962″ caption=““ type=“image“ alt=“IMG_0460.JPG“ ]
Übersicht
Eine Übersicht der wichtigsten Parameter der hier vorgestellten Bluetooth Module:
[table id=6 /]
Verbindung
Zur Verbindungsaufnahme zu einem Bluetooth Modul sind zunächst einige Schritte notwendig.
Pairing
Das Pairing ist der erste notwendige Schritt bei der Verbindungsaufnahme zu einem Bluetooth Modul. Dazu muss das Modul im Discovery Mode sein. Es reicht die Stromversorgung am Modul anzuklemmen. Dann kann über die Bluetooth Systemsteuerung nach neuen Geräten gesucht werden. Wird das Modul erkannt, taucht dieses in der Liste der verfügbaren Geräte aus. Jedes Modul hat einen bestimmte BT-Kennung (siehe Übersichtstabelle). Klickt man auf das erkannte Modul wird man zur Eingabe des Kopplungscode aufgefordert. Der Kopplungscode ist normalerweise ‚1234‘. Danach ist die Verbindung hergestellt und es sollten die zur Verfügung stehenden Dienste bereitstehen.
[pe2-image src=“http://lh3.googleusercontent.com/-xa_v9qo_II8/VopqWeKU-aI/AAAAAAAAOwM/ARDCPv-yNeY/s144-c-o/bluetooth-geraete.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235913568333920674″ caption=““ type=“image“ alt=“bluetooth-geraete.jpg“ ]
Das Pairing ist nur einmalig beim ersten Erkennung eines Bluetooth Moduls notwendig.
virtueller COM Port
Bei einem Bluetooth Modul mit SPP-Unterstützung sollten nach erfolgreichem Pairing verschiedene virtuelle COM-Ports im Geräte Manager auftauchen. Doch welches davon ist der richtige Port? Es tauchen nämlich gleich 8 virtuelle COM-Ports auf.
[pe2-image src=“http://lh3.googleusercontent.com/-NNcZeT_8OVo/VopqXnpJ4AI/AAAAAAAAOwY/Z_CfmIE_kLw/s144-c-o/bluetooth-com-ports.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235913588059004930″ caption=““ type=“image“ alt=“bluetooth-com-ports.jpg“ ]
Hier hilft ein Blick auf die Dienste des Bluetooth Moduls in der Bluetooth Geräte Übersicht.
[pe2-image src=“http://lh3.googleusercontent.com/-d51Sacl7q-k/VopqWtdc0vI/AAAAAAAAOwU/71VVRdFtOyA/s144-c-o/bluetooth-dienste.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235913572440658674″ caption=““ type=“image“ alt=“bluetooth-dienste.jpg“ ]
In diesem Fall wäre COM114 die richtige Wahl. Zu einem ersten Test verbinden wir RX und TX auf dem Bluetooth Modul. Dadurch haben wir ein Loopback vom Ausgang zum Eingang und können die Verbindung mit einem Terminalprogramm testen. Alle eingegebenen Zeichen sollten ausgegeben werden. Jetzt ist das Modul bereit zum Verbinden mit dem Arduino Board.
Arduino Verbindungstest
zum Test mit dem Arduino kann ein beliebiges Programm verwendet werden das die serielle Schnittstelle verwendet. Dazu wird das Modul wie folgt angeschlossen.
[pe2-image src=“http://lh3.googleusercontent.com/-Rty7DNCXIGc/Vop8G8QkQtI/AAAAAAAAOxA/Ih9zjPBltfU/s144-c-o/HC-06-Arduino_Steckplatine.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235933092744544978″ caption=““ type=“image“ alt=“HC-06-Arduino_Steckplatine.jpg“ ]
[pe2-image src=“http://lh3.googleusercontent.com/-9LdrjHI5kh0/Vop8IChlh5I/AAAAAAAAOxI/-ZsVA5V-ToA/s144-c-o/HC-06-Arduino_Schaltplan.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235933111606413202″ caption=““ type=“image“ alt=“HC-06-Arduino_Schaltplan.jpg“ ]
Als Beispiel Sketch wird das ‚SoftwareSerialExample‘ aus dem Beispiele Ordner verwendet.
Als Baudrate muss die Default Rate des Bluetooth Moduls gewählt werden. In den meisten Fällen 9600 Baud. Das muss im Sketch angepasst werden.
/* Software serial multple serial test Receives from the hardware serial, sends to software serial. Receives from software serial, sends to hardware serial. The circuit: * RX is digital pin 10 (connect to TX of other device) * TX is digital pin 11 (connect to RX of other device) Note: Not all pins on the Mega and Mega 2560 support change interrupts, so only the following can be used for RX: 10, 11, 12, 13, 50, 51, 52, 53, 62, 63, 64, 65, 66, 67, 68, 69 Not all pins on the Leonardo support change interrupts, so only the following can be used for RX: 8, 9, 10, 11, 14 (MISO), 15 (SCK), 16 (MOSI). created back in the mists of time modified 25 May 2012 by Tom Igoe based on Mikal Hart's example This example code is in the public domain. */ #include <SoftwareSerial.h> SoftwareSerial mySerial(10, 11); // RX, TX void setup() { // Open serial communications and wait for port to open: Serial.begin(9600); while (!Serial) { ; // wait for serial port to connect. Needed for native USB port only } Serial.println("Goodnight moon!"); // set the data rate for the SoftwareSerial port mySerial.begin(9600); mySerial.println("Hello, world?"); } void loop() { // run over and over if (mySerial.available()) { Serial.write(mySerial.read()); } if (Serial.available()) { mySerial.write(Serial.read()); } }
Bluetooth Modul Einstellungen ändern
Will man die Einstellungen des Bluetooth Moduls ändern, z.B. die Baudrate, dann muss man das Bluetooth Modul seriell mit dem PC verbinden. Einstellungsänderungen über Bluetooth sind bei diesen preiswerten Modulen leider nicht möglich. Zur Anbindung des Bluetooth Modul an den PC ist ein USB seriell Wandler, wie. z.B. ein FTDI Modul und ein Spannungsteiler notwendig.
[pe2-image src=“http://lh3.googleusercontent.com/-Vecw8DPo8dI/VoqJeTBQrKI/AAAAAAAAOyA/Lc0QOWCId0Y/s144-c-o/Bluetooth-Kabel_Steckplatine.jpg“ href=“https://picasaweb.google.com/100614490999857774768/BluetoothModule#6235947787642514594″ caption=““ type=“image“ alt=“Bluetooth-Kabel_Steckplatine.jpg“ ]
Nun kann über das Terminalprogramm eine Verbindung über den USB Seriell Wandler zum Bluetooth Modul hergestellt werden. Eine bestehende Bluetooth Verbindung muss zuvor geschlossen werden. Beim HC-05 Modul muss zudem der Taster am Modul gedrückt werden, um in den AT-Mode zu gelangen.
Die Einstellung der Parameter erfolgt von der seriellen Seite mittels AT-Befehle. Zunächst testen wir die Verbindung mit dem Befehl:
AT
Als Antwort sollte:
OK
vom Modul gesendet werden.
Baudraten Änderung beim HC-05
Das HC-05 Modul kann sowohl als Master als auch Slave betrieben werden. Die Umschaltung erfolgt über AT-Befehle. Im Datenblatt zum HC-05/06 findet man die komplette Befehlsübersicht. Die Einstellung im Terminalprogramm sind 9600 Baud, no parity, 8 Data, 1 Stopp Bit. CR und LF als Zeilenende senden.
Beim HC-05 erfolgt eine Änderung der Baudrate auf 38400, no parity, 1 Stopp Bit mit dem Befehl:
AT+UART=38400,0,0
Danach wird die Baudratenumschaltung aktiv und muss auch im Terminalprogramm geändert werden. Diese Einstellung bleiben im Modul auch nach dem Abschalten der Stromversorgung gespeichert,
Baudraten Änderung beim HC-06
Die Einstellung im Terminalprogramm sind 9600 Baud, no parity, 8 Data, 1 Stopp Bit. Kein Zeilenende senden.
Denn beim HC-06 Modul gibt es eine Besonderheit. Während beim HC-05 jeder Befehl mit Zeilenende abgeschlossen wird, darf beim HC-06 kein Zeilenende gesendet werden. Der Befehl wird sofort nach kurzem Timeout Zeit ausgeführt.
Zum Ändern der Baudrate auf 38400 Baud wird der Befehl:
AT+Baud6
gesendet. Als Antwort sendet das Modul dann:
OK38400
Danach wird die Baudratenumschaltung aktiv und muss auch im Terminalprogramm geändert werden. Diese Einstellung bleiben im Modul auch nach dem Abschalten der Stromversorgung gespeichert.
Toll gemacht! Hast meine Hochachtung! Werd ich meinem Neffen sagen dass er hier mal auf deine Seite guckt. ist sein „Spezialgebiet“ Herzlichste Grüße Reinhard
Super Projekt und handwerklich einwandfrei! Viel Erfolg weiterhin!
Gruß
Holger
‚Vielen herzlichen Dank für die Veröffentlichung des Datenblattes“
Kann mich nur anschließen! Bin noch in Ausbildung daher sind deine Blogbeiträge für mich Gold wert. Vielen dank fürs teilen!
Hey, sehr umfangreicher Beitrag, habe extre viel davon mitgenommen. Du scheinst echt Ahnung vom Thema zu haben, mach bitte weiter so viele informative Beiträge über Elektronik.