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.

 

 

Verschaltung

Teile

1x ESP32
1x Arduino
1x HC-05 Bluetooth Modul
3x Verbindungskabel

Bibliotheken

BluetoothSerial.h

Code Download

 
 

Übersicht + Projektaufbau – ESP32 + Bluetooth + Arduino + HC-05

 




 

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) Bluetooth

Nochmal zur Übersicht den gesamten Programmier-Code aufgezeigt.


#include <OneWire.h>
#include <DallasTemperature.h>

// Data wire is plugged into pin 23 on the Arduino
#define ONE_WIRE_BUS 23

// Setup a OneWire instance to communicate with any OneWire devices
OneWire oneWire(ONE_WIRE_BUS);

// Pass OneWire reference to Dallas Temperature
DallasTemperature sensors(&oneWire);


void setup()
{
  Serial.begin(9600); //Initialize serial monitor
  pinMode(ONE_WIRE_BUS, OUTPUT);
  sensors.begin(); //Start up the library
}

void loop()
{
  sensors.requestTemperatures(); //Call sensor to request the Temperature
  Serial.println("Temperature is: " + String(sensors.getTempCByIndex(0)) + "°C"); //Output the values on the monitor
  delay(1000);
}

 

Ausführung – Temperatursensor ( DS18B20 ) + ESP32

Nachdem der Code nun in die IDE eingegeben ist, muss dieser noch ausgeführt werden und auf den Arduino übertragen werden.
Hierzu geht man wie folgt vor:
Schritt 1: Überprüfen (Haken)
Schritt 2: Hochladen (Pfeil)
Schritt 3: Serieller Monitor öffnen
Schritt 4:

Nachdem der ESP32 nun programmiert ist, wird die Temperatur auf dem Monitor ausgegeben. Jede Sekunde die aktuelle Temperatur.