Labortagebuch - Arduino - Raspberry Pi
22.03.2021 - Das Bluetooth-Modul HC-05
Bluetooth ist ein in den 1990er Jahren durch die Bluetooth Special Interest Group entwickelter Industriestandard gemäß IEEE 802.15.1 für die Datenübertragung  zwischen Geräten über kurze Distanz per Funktechnik (WPAN). Dabei sind verbindungslose sowie verbindungsbehaftete Übertragungen von Punkt zu Punkt und Ad-hoc-oder Piconetze möglich. Der Name „Bluetooth“ leitet sich vom dänischen König Harald Blauzahn (engl. Harald Bluetooth) ab, der verfeindete Teile von Norwegen und Dänemark vereinte. Das Logo zeigt ein Monogramm der alt-nordischen Runen.
Die Funkverfahren für Bluetooth wurden ursprünglich in wesentlichen Teilen durch den niederländischen Professor Jaap Haartsen und den Schweden Sven Mattisson für Ericsson entwickelt. Andere Teile wurden vor allem von Nokia und Intel ergänzt. Bluetooth bildet eine Schnittstelle, über die sowohl mobile Kleingeräte wie Mobiltelefone  und PDAs als auch Computer und Peripheriegeräte miteinander kommunizieren können. Hauptzweck von Bluetooth ist das Ersetzen von Kabelverbindungen zwischen Geräten.
Für den Arduino hat sich das HC-05 Modul für den Einsatz im Bluetooth-Bereich durchgesetzt. Dieser ist relativ preiswert (ca. 8 Euro) zu bekommen. Neben dem HC-05 Modul gibt es noch das HC-06 Modul. Während das HC-05 Modul sowohl im Master- als auch im Slave-Modus betrieben werden kann, ist beim HC-06 nur der Slave Modus möglich.

Einsatz der Module
1.Verbindet man das HC-05/HC-06 Modul mit dem Arduino, so kann man dieses mit einer Android-App ansteuern.
2.Zwei Arduinos können über jeweils ein HC-05 Modul miteinander kommunizieren.
HC-05 Verbindung mit einem anderen HC-05
Dazu müssen als erstes die beiden Module vorbereitet werden. Das eine als Master, das andere als Slave. Um diese Einstellungen vornehmen zu können, muss man in den sog. AT-Modus (AT steht für Attentation) wechseln.
1. Zunächst muss der Sketch für die Eingabe der Befehle geladen werden. Dazu wird die Arduino-IDE aufgerufen und der Sketch hochgeladen. Achtung: Das HC-05 Modul darf beim Hochladen nicht angeschlossen sein.
2. Nachdem das Hochladen abgeschlossen ist, wird das HC-05 Modul angeschlossen (siehe Abbildung).

Code für den Sketch
#include <SoftwareSerial.h>
#define tx 2
#define rx 3
SoftwareSerial configBt(rx,tx);
void setup() {
Serial.begin(38400);
configBt.begin(38400);
pinMode(tx,OUTPUT);
pinMode(rx,INPUT);}
void loop(){
if(configBt.available())
{Serial.print(configBt.readString());}
if(Serial.available())
{configBt.write(Serial.read());}}
3. Nachdem das Modul angeschlossen wurde, wird die Verbindung (USB-Kabel) mit dem PC unterbrochen.
4. Dann wird diese mit dem PC wiederhergestellt - dabei wird der Pin am HC-05 Modul gleichzeitg gedrückt bis die Verbindung hergestellt ist. Jetzt leuchtet die LED am Modul ca. alle 2 Sekunden.
5. Man ruft jetzt in der Arduino-IDE den seriellen Monitor auf und stellt dort folgendes ein: Sowohl NL als auch CR und 38 400 Baud. Im oberen Eingabefeld können dann die AT-Befehle eingegeben werden. Um zu überprüfen ob alles richtig eingerichtet wurde, gibt man AT ein. Als Ausgabe sollte dann OK erscheinen.
AT-Befehle zum Einstellen
AT+ORGL Alle Einstellungen werden auf die Vorgabewerte gesetzt
AT+PSWD=1234 Passwort ändern, die Voreinstellung ist 1234
AT+RMAAD Löscht die Einstellungen des Pairing
ALT+ROLE=1 Setzen als Master
ALT+ROLE=0 Setzen als Slave
AT+CMODE=0 Setzen, um mit einem bestimmten HC-05 verbunden zu werden
AT+CMODE=1 Erlaube Verbindung mit beliebigen anderen Modulen – ist die Voreinstellung
AT+BIND=0020,10,000BEC Adresse des Slave, statt der Doppelpunkte müssen hier Kommata gesetzt werden. Gibt man den AT-Befehl AT+BIND? ein, so wird die Adresse ausgegeben aber ohne die führenden Nullen, also: 20:10:BEC. Hier werden die einzelnen Bereiche wieder durch Doppelpunkte getrennt.
AT+UART=38400,0,0 Die Baudrate wird auf 38400 gesetzt.
Abfrage der Einstellungen
AT+PSWD? Passwort abfragen
ALT+NAME? Eigenen Namen abfragen
ALT+ROLE? Master/Slave Modus abfragen
AT+CMODE? Verbindungsmodus abfragen
AT+BIND? Angabe der Adresse des Moduls, an das gebunden wurde
AT+UART? Angabe der derzeitigen Baudrate
Einrichten des HC-05 Moduls als Master
AT+RMAAD Löscht die Einstellungen des Pairing
AT+ROLE=1 Setzen als Master
AT+RMAAD Löscht die Einstellungen des Pairing
ALT+CMODE=0 Setzen als Master
AT+BIND=0020,10,000BEC Adresse des Slave, statt der Doppelpunkte müssen hier Kommata gesetzt werden. Gibt man den AT-Befehl AT+BIND? ein, so wird die Adresse ausgegeben aber ohne die führenden Nullen, also: 20:10:BEC. Hier werden die einzelnen Bereiche wieder durch Doppelpunkte getrennt.
AT+UART=38400,0,0 Die Baudrate wird auf 38400 gesetzt.
Einrichten des HC-05 Moduls als Slave
AT+RMAAD Löscht die Einstellungen des Pairing
ALT+ROLE=0 Setzen als Slave
AT+ADDR? Die Adresse des HC-05 Moduls wird angezeigt
AT+UART=38400,0,0 Die Baudrate wird auf 38400 gesetzt.
Arduino to Arduino - Bluetooth Verbindung mit Master - Slave
Im folgenden Beispiel soll eine Übertragung von einem Arduino auf den anderen über zwei HC-05 Module erfolgen, die als Master und Slave eingerichtet sind. Die Verkabelung bei Master und Slave sind gleich. Die Programme für Sender und Empfänger sind verschieden und müssen entsprechend der Einrichtung der Module als Master und Slave hochgeladen werden. Beim Hochladen müssen die HC-05 Module vom Arduino getrennt sein. Beim Arduino mit dem HC-05 Modul als Slave muss man den seriellen Monitor aufrufen, um die übertragenden Daten sichtbar zu machen.
Sketch für den Empfänger

#include <SoftwareSerial.h>
#define tx 2
#define rx 3
SoftwareSerial Bt(rx,tx);

void setup() {
Serial.begin(9600);
Bt.begin(38400);
pinMode(tx,OUTPUT);
pinMode(rx,INPUT);}

void loop(){
if(Bt.available()>0)
{Serial.println(Bt.read());}
}
Sketch für den Sender

#include <SoftwareSerial.h>
#define tx 2
#define rx 3
SoftwareSerial Bt(rx,tx);

void setup() {
Serial.begin(9600);
Bt.begin(38400);
pinMode(tx,OUTPUT);
pinMode(rx,INPUT);}

void loop(){
Bt.write(i);
Serial.println(i);
delay(100);
i=i+1;
if(i>255)
{i=0;}
}
Übertragen werden die Zahlen von 0 bis 255.