ESP32 Bluetooth mit Arduino HC-05 verbinden Tutorial
Einleitung
Der ESP32 verfügt über eine integrierte Bluetooth-Funktion. Somit benötigt es kein HC-05-Modul, um Bluetooth mit einem ESP32 zu verwenden.
In diesem Artikel möchten wir den ESP32 mit einem HC-05 Bluetooth Modul an einem Arduino verbinden.
Am Ende dieses Artikels wird man zwischen dem ESP32 und dem Arduino drahtlos kommunizieren können.
Übersicht + Projektaufbau – ESP32 + Bluetooth + Arduino + HC-05
1x ESP32
1x Arduino
1x HC05 Bluetooth Modul

Hardware Aufbau – Verkabelung – Bluetooth + ESP32
Bevor wir uns mit der Programmierung beschäftigen, bereiten wir zunächst den Hardware-Aufbau vor.
Beim ESP32 benötigen wir hier keine Verbindung. Denn wie beschrieben ist das Bluetooth-Modul bereits integriert.
Die Verbindung zwischen Arduino und HC-05 Modul müssen erstellt werden.
Für den Aufbau benötigen Sie 5 Verbindungen:
Arduino 3,3V Pin → EN
Arduino 5V Pin → VCC
Arduino GND → GND
Arduino Pin 2 → TXD
Arduino Pin 3 → HV Pegelwandler LV → RXD
Nun sind die Hardware Voraussetzungen gegeben. Im folgenden beschäftigen wir uns mit der Programmierung.
Software Programmierung – ESP32 (Master) Bluetooth
Der Hardware-Aufbau ist nun erfolgreich abgeschlossen. Zudem haben wir den Namen und die Adresse des HC-05 ermittelt. Nun können wir uns nun der ESP32-Programmierung zuwenden. In diesem Abschnitt werden wir ausführlich die essenziellen Schritte zur Codeerstellung behandeln.
Schritt 1: Initialisierung
Öffnen der Arduino-IDE und Erstellen eines neuen Projekts.
Um mit der Arduino-IDE zu arbeiten, öffnen Sie zunächst die Anwendung auf Ihrem Computer. Falls Sie die Arduino-IDE noch nicht installiert haben, können Sie unter folgendem Link eine Anleitung hierzu finden:
⇨ ESP32 in Arduino IDE erste Schritte
Nachdem Sie die Arduino-IDE geöffnet haben, erstellen Sie ein neues Projekt, indem Sie auf „Datei“ klicken und dann auf „Neu“. Dadurch wird ein neues Sketch-Fenster geöffnet, in dem Sie Ihren Code eingeben können.
// Hier kommt dein Code
void setup()
{
// Initialisierung
}
void loop()
{
// Schleife
}
Schritt 2: Bibliothek einbinden
Um das Bluetooth Modul auf dem ESP32 verwenden zu können, müssen wir zunächst die Bibliothek einbinden. Hierzu binden wir die Bibliothek BluetoothSerial.h ein.
So erhält man die erforderlichen Funktionen, um das Bluetooth Modul zu verwenden.
#include "BluetoothSerial.h";
Schritt 3: Initialisierung + Variablen definieren
Mit „BluetoothSerial SerialBT;“ initialisieren wir das Bluetooth.
Danach definieren wir in Variablen, welche die HC-05 Daten beinhalten.
Dabei handelt es sich um den Namen und die Adresse des Slaves. Diese haben wir bereits oben herausgefunden.
Am Ende können wir noch einen Namen für das ESP32 Modul (Master) definieren.
BluetoothSerial SerialBT;
//Slave Daten
String slaveName = "Slave1"; //Change this to reflect the real name of your slave BT device
String MACadd = "AA:BB:CC:11:22:33"; //This only for printing
uint8_t address[6] = {0x98, 0xDA, 0x50, 0x02, 0x76, 0xAA}; //Change this to reflect real MAC address of your slave BT device 98da:50:0276aa
String myName = "ESP32-BT-Master";
Schritt 4: Void Setup
Im Void Setup-Teil des Codes führen Sie die Initialisierungen durch, die nur einmal am Anfang des Programms ausgeführt werden müssen. Fügen Sie den folgenden Code hinzu:
void setup()
{
bool connected;
Serial.begin(115200);
SerialBT.begin(myName, true);
Serial.printf("The device \"%s\" started in master mode, make sure slave BT device is on!\n", myName.c_str());
//connect(address) is fast (up to 10 secs max), connect(slaveName) is slow (up to 30 secs max) as it needs
//to resolve slaveName to address first, but it allows to connect to different devices with the same name.
//Set CoreDebugLevel to Info to view devices Bluetooth address and device names
connected = SerialBT.connect(address);
Serial.print("Connecting to slave BT device with MAC ");
Serial.println(MACadd);
if(connected) {
Serial.println("Connected Successfully!");
}
else
{
while(!SerialBT.connected(10000)) {
Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
}
}
}
Der Serial.begin(115200) Befehl initialisiert den seriellen Monitor mit einer Baudrate von 115200, sodass Sie die empfangenen Werte später auf dem Monitor angezeigt werden können.
ESP32 im Master Mode starten.
Danach der Befehlt um den ESP32 (Master) mit dem HC-05 (Slave) zu verbinden.
Ist dies erledigt, wird eine If-Abfrage gestartet. Hier wird geprüft, ob das Verbinden funktioniert hat oder nicht.
Wenn es funktioniert hat, wird eine entsprechende Nachricht ausgegeben.
Falls es nicht funktioniert hat, wird dies alle 10 Sekunden überprüft und ebenfalls ausgegeben.
Schritt 5: Loop Setup
Der Loop-Teil des Codes wird kontinuierlich wiederholt, solange der ESP32 eingeschaltet ist. Hier erfolgt die eigentliche Verarbeitung der Temperaturwerte des Temperatursensors.
void loop()
{
if(Serial.available()) {
SerialBT.write(Serial.read());
}
if(SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
Im Loop-Teil wird alle 20ms geprüft, ob eine Nachricht vom Arduino HC-05 (Slave) zum ESP32 (Master) gesendet wurde. Falls ja, wird diese Nachricht ausgegeben.
Und es wird auch geprüft, ob eine Nachricht vom ESP32 (Master) herausgesendet werden soll. Ist dies der Fall, wird die Nachricht gesendet.
Schritt für Schritt – Zusammenfassung
→ Schritt 1: Initialisierung
Arduino-Board anschließen,
IDE öffnen
Datei -> Neu
Werkzeug -> Board -> Arduino Uno
Port -> Arduino Uno
→ Schritt 2:
Bibliothek einbinden.
→ Schritt 3:
Initialisierung + Variablen definieren
→ Schritt 4: Void Setup
Serial Monitor Initialisierung ausführen.
ESP32 (Master) Master-Mode starten
ESP32 (Master) mit HC-05 (Slave) verbinden
→ Schritt 5: Void Loop
1. If-Abfrage: Prüft, ob das HC-05 Bluetooth Modul etwas gesendet hat.
2. If-Abfrage: prüft, ob der Serielle Monitor etwas ausgegeben hat.
Gesamter Programmiercode – ESP32 (Master / Empfänger) Bluetooth
Nochmal zur Übersicht den gesamten Programmier-Code aufgezeigt. Wichtig: Ändere die Adresse ab. Je nachdem welche Adresse dein HC-05 Bluetooth-Modul (Slave) hat.
#include "BluetoothSerial.h";
BluetoothSerial SerialBT;
//Slave Daten
String slaveName = "Slave1"; //Change this to reflect the real name of your slave BT device
String MACadd = "AA:BB:CC:11:22:33"; //This only for printing
uint8_t address[6] = {0x98, 0xDA, 0x50, 0x02, 0x76, 0xAA}; //Change this to reflect real MAC address of your slave BT device 98da:50:0276aa
String myName = "ESP32-BT-Master";
void setup()
{
bool connected;
Serial.begin(115200);
SerialBT.begin(myName, true);
Serial.printf("The device \"%s\" started in master mode, make sure slave BT device is on!\n", myName.c_str());
//connect(address) is fast (up to 10 secs max), connect(slaveName) is slow (up to 30 secs max) as it needs
//to resolve slaveName to address first, but it allows to connect to different devices with the same name.
//Set CoreDebugLevel to Info to view devices Bluetooth address and device names
connected = SerialBT.connect(address);
Serial.print("Connecting to slave BT device with MAC ");
Serial.println(MACadd);
if(connected) {
Serial.println("Connected Successfully!");
}
else
{
while(!SerialBT.connected(10000)) {
Serial.println("Failed to connect. Make sure remote device is available and in range, then restart app.");
}
}
}
void loop()
{
if(Serial.available()) {
SerialBT.write(Serial.read());
}
if(SerialBT.available()) {
Serial.write(SerialBT.read());
}
delay(20);
}
Arduino + HC-05 (Slave / Sender)
Im Folgenden Artikel findest du eine genaue Erklärung, wie man das HC-05 Bluetooth-Modul mit dem Arduino programmiert.
->LINK
Hier zusammengefasst, nur der Programmiercode.
#include <SoftwareSerial.h>
#define tx 3
#define rx 2
SoftwareSerial configBt(rx, tx); // RX , TX
void setup()
{
Serial.begin(38400); //Initialize serial monitor
configBt.begin(38400); //Initialize serial monitor
pinMode(tx, OUTPUT); //Define TX Pin as output
pinMode(rx, INPUT); //Define RX Pin as input
}
void loop()
{
configBt.write("TESTNACHRICHT\n"); //Sende die Nachricht: "TESTNACHRICHT"
delay(1000); //Warte 1 Sekunde
if(configBt.available()) //if the HC05 is sending something…
{
//Serial.print(configBt.readString()); //print in serial monitor
}
if(Serial.available()) //if serial monitor is outputting something…
{
//configBt.write(Serial.read()); //write to Arduino’s Tx pin
}
}
Ausführung – Temperatursensor ( DS18B20 ) + ESP32
Schritt 1: Adresse des HC-05 Bluetooth-Modul ermitteln.
Schritt 2: Arduino + HC-05 (Slave) programmieren
Erstmal den Arduino + HC-05 (Slave) programmieren.
Hierfür die Arduino IDE öffnen.
Den Code hinein kopieren.
Das Board (Arduino UNO) + passenden Port auswählen.
Überprüfen (Haken)
Hochladen (Pfeil)
Das HC-05 Modul sendet nun im Abstand von 1 Sekunde „TESTNACHRICHT“ in die Luft.
(Man sieht aber noch nichts – Weil der Empfänger erst im nächsten Schritt programmiert wird)
(Bei Problemen: Serieller Monitor öffnen – Baud-Rate umstellen auf 38400. Steht hier ständig „TESTNACHRICHT“?)
Schritt 3: ESP32 programmieren
Eine neue Arduino IDE öffnen.
Den Code hinein kopieren.
Die Adresse des Slaves abändern.
Das Board (ESP32) + passenden Port auswählen.
Überprüfen (Haken)
Hochladen (Pfeil)
Serieller Monitor öffnen
Baud-Rate umstellen auf 115200
Auf dem seriellen Monitor (Display) wird die aktuelle Kommunikation anzeigt
ggf. Muss noch eine Nachricht geschrieben werden. Dann sollte die Kommunikation starten.
