ESP32 Bluetooth Chat Beispiel - Bidirektionale Messaging-Schnittstelle Tutorial
Das Bluetooth Chat-Beispiel ermöglicht bidirektionale Textnachrichten zwischen Ihrem ESP32 und einem Smartphone über die DIYables Bluetooth STEM App. Entwickelt für ESP32-Boards mit Unterstützung für sowohl BLE (Bluetooth Low Energy) als auch Classic Bluetooth-Verbindungen. Senden und empfangen Sie Textnachrichten in Echtzeit, implementieren Sie benutzerdefinierte Befehlsbearbeitung und verbinden Sie Serial Monitor mit Bluetooth — perfekt für Debugging, Fernsteuerung und interaktive Projekte.
Dieses Beispiel unterstützt zwei Bluetooth-Modi:
ESP32 BLE (Bluetooth Low Energy): Funktioniert sowohl mit Android als auch iOS
ESP32 Classic Bluetooth: Funktioniert nur mit Android. iOS unterstützt Classic Bluetooth nicht. Verwenden Sie BLE, wenn Sie iOS-Unterstützung benötigen.
Bidirektionale Nachrichten: Senden und empfangen Sie Textnachrichten in Echtzeit
Echo-Modus: Automatische Rückgabe empfangener Nachrichten an die App
Befehlsbearbeitung: Verarbeitung benutzerdefinierter Textbefehle (ping, status, time, heap)
Periodische Nachrichten: Senden automatischer Status-Updates in konfigurierbaren Intervallen
Serial-zu-Bluetooth-Brücke: Tippen Sie Nachrichten im Serial Monitor ein und senden Sie sie an die App
BLE & Classic Bluetooth: Wählen Sie den Bluetooth-Modus, der zu Ihrem Projekt passt
Plattformübergreifend: BLE-Modus funktioniert mit Android und iOS; Classic Bluetooth funktioniert mit Android
Energiesparoption: BLE-Modus verbraucht weniger Energie als Classic Bluetooth
Oder Sie können die folgenden Kits kaufen:
Offenlegung: Einige der in diesem Abschnitt bereitgestellten Links sind Amazon-Affiliate-Links. Wir können eine Provision für Käufe erhalten, die über diese Links getätigt werden, ohne zusätzliche Kosten für Sie. Wir schätzen Ihre Unterstützung.
Folgen Sie diesen Anweisungen Schritt für Schritt:
Verbinden Sie das ESP32-Board über ein USB-Kabel mit Ihrem Computer.
Starten Sie die Arduino IDE auf Ihrem Computer.
Wählen Sie das entsprechende ESP32-Board und den COM-Port aus.
Navigieren Sie zum Libraries-Symbol in der linken Leiste der Arduino IDE.
Suchen Sie nach "DIYables Bluetooth" und finden Sie die DIYables Bluetooth-Bibliothek von DIYables
Klicken Sie auf Install, um die Bibliothek zu installieren.
Sie werden gefragt, ob Sie weitere Bibliotheksabhängigkeiten installieren möchten
Klicken Sie auf Install All, um alle Bibliotheksabhängigkeiten zu installieren.
Wählen Sie einen der beiden Bluetooth-Modi unten, je nach Ihren Anforderungen:
Hinweis: Classic Bluetooth wird von iOS NICHT unterstützt. Wenn Sie iOS-Unterstützung benötigen, verwenden Sie den BLE-Code unten.
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothChat.h>
#include <platforms/DIYables_Esp32Bluetooth.h>
DIYables_Esp32Bluetooth bluetooth("ESP32_Chat");
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothChat bluetoothChat;
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
int messageCount = 0;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 Chat Example");
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothChat);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothChat.send("Hello! ESP32 is ready to chat.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
messageCount = 0;
});
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
String response = "Echo: ";
response += message;
bluetoothChat.send(response);
if (message.equalsIgnoreCase("ping")) {
bluetoothChat.send("pong!");
} else if (message.equalsIgnoreCase("status")) {
bluetoothChat.send("ESP32 is running normally");
} else if (message.equalsIgnoreCase("time")) {
String timeMsg = "Uptime: ";
timeMsg += String(millis() / 1000);
timeMsg += " seconds";
bluetoothChat.send(timeMsg);
} else if (message.equalsIgnoreCase("heap")) {
String heapMsg = "Free heap: ";
heapMsg += String(ESP.getFreeHeap());
heapMsg += " bytes";
bluetoothChat.send(heapMsg);
}
});
Serial.println("Waiting for Bluetooth connection...");
Serial.println("Type 'ping', 'status', 'time', or 'heap' in the app to test commands");
}
void loop() {
bluetoothServer.loop();
if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) {
lastMessageTime = millis();
messageCount++;
String statusMsg = "Status update #";
statusMsg += String(messageCount);
statusMsg += " - All systems operational";
bluetoothChat.send(statusMsg);
Serial.print("Sent: ");
Serial.println(statusMsg);
}
if (Serial.available()) {
String serialMsg = Serial.readStringUntil('\n');
serialMsg.trim();
if (serialMsg.length() > 0 && bluetooth.isConnected()) {
bluetoothChat.send(serialMsg);
Serial.print("Sent from Serial: ");
Serial.println(serialMsg);
}
}
delay(10);
}
Klicken Sie auf Upload in der Arduino IDE, um den Code auf den ESP32 hochzuladen
Öffnen Sie den Serial Monitor
Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
DIYables Bluetooth - ESP32 Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
#include <DIYables_BluetoothServer.h>
#include <DIYables_BluetoothChat.h>
#include <platforms/DIYables_Esp32BLE.h>
const char* DEVICE_NAME = "ESP32BLE_Chat";
const char* SERVICE_UUID = "19B10000-E8F2-537E-4F6C-D104768A1214";
const char* TX_UUID = "19B10001-E8F2-537E-4F6C-D104768A1214";
const char* RX_UUID = "19B10002-E8F2-537E-4F6C-D104768A1214";
DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID);
DIYables_BluetoothServer bluetoothServer(bluetooth);
DIYables_BluetoothChat bluetoothChat;
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
int messageCount = 0;
void setup() {
Serial.begin(115200);
delay(1000);
Serial.println("DIYables Bluetooth - ESP32 BLE Chat Example");
bluetoothServer.begin();
bluetoothServer.addApp(&bluetoothChat);
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth connected!");
bluetoothChat.send("Hello! ESP32 BLE is ready to chat.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth disconnected!");
messageCount = 0;
});
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
String response = "Echo: ";
response += message;
bluetoothChat.send(response);
if (message.equalsIgnoreCase("ping")) {
bluetoothChat.send("pong!");
} else if (message.equalsIgnoreCase("status")) {
bluetoothChat.send("ESP32 BLE is running normally");
} else if (message.equalsIgnoreCase("time")) {
String timeMsg = "Uptime: ";
timeMsg += String(millis() / 1000);
timeMsg += " seconds";
bluetoothChat.send(timeMsg);
} else if (message.equalsIgnoreCase("heap")) {
String heapMsg = "Free heap: ";
heapMsg += String(ESP.getFreeHeap());
heapMsg += " bytes";
bluetoothChat.send(heapMsg);
}
});
Serial.println("Waiting for Bluetooth connection...");
Serial.println("Type 'ping', 'status', 'time', or 'heap' in the app to test commands");
}
void loop() {
bluetoothServer.loop();
if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) {
lastMessageTime = millis();
messageCount++;
String statusMsg = "Status update #";
statusMsg += String(messageCount);
statusMsg += " - All systems operational";
bluetoothChat.send(statusMsg);
Serial.print("Sent: ");
Serial.println(statusMsg);
}
if (Serial.available()) {
String serialMsg = Serial.readStringUntil('\n');
serialMsg.trim();
if (serialMsg.length() > 0 && bluetooth.isConnected()) {
bluetoothChat.send(serialMsg);
Serial.print("Sent from Serial: ");
Serial.println(serialMsg);
}
}
delay(10);
}
Klicken Sie auf Upload in der Arduino IDE, um den Code auf den ESP32 hochzuladen
Öffnen Sie den Serial Monitor
Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
DIYables Bluetooth - ESP32 BLE Chat Example
Waiting for Bluetooth connection...
Type 'ping', 'status', 'time', or 'heap' in the app to test commands
Installieren Sie die DIYables Bluetooth App auf Ihrem Smartphone:
Android |
iOS
Wenn Sie den ESP32 Classic Bluetooth Code verwenden, müssen Sie den ESP32 mit Ihrem Android-Telefon vor dem Öffnen der App koppeln:
Gehen Sie zu den Einstellungen > Bluetooth Ihres Telefons
Stellen Sie sicher, dass Bluetooth eingeschaltet ist
Ihr Telefon scannt nach verfügbaren Geräten
Finden und tippen Sie auf "ESP32_Chat" in der Liste der verfügbaren Geräte
Bestätigen Sie die Kopplungsanfrage (keine PIN erforderlich)
Warten Sie, bis "Gekoppelt" unter dem Gerätenamen angezeigt wird
Wenn Sie den ESP32 BLE Code verwenden, ist keine Kopplung erforderlich. Fahren Sie einfach mit dem nächsten Schritt fort.
Öffnen Sie die DIYables Bluetooth App
Beim ersten Öffnen der App werden Berechtigungen angefragt. Bitte gewähren Sie folgende:
Geräte in der Nähe-Berechtigung (Android 12+) / Bluetooth-Berechtigung (iOS) - erforderlich zum Scannen und Verbinden mit Bluetooth-Geräten
Standort-Berechtigung (nur Android 11 und früher) - erforderlich für ältere Android-Versionen zum Scannen nach BLE-Geräten
Stellen Sie sicher, dass Bluetooth auf Ihrem Telefon eingeschaltet ist
Tippen Sie auf dem Startbildschirm auf Connect. Die App scannt nach BLE- und Classic Bluetooth-Geräten.

Finden und tippen Sie auf Ihr Gerät in den Scan-Ergebnissen, um zu verbinden:
Nach der Verbindung kehrt die App automatisch zum Startbildschirm zurück. Wählen Sie die Chat-App aus dem App-Menü.
Hinweis: Sie können das Einstellungssymbol auf dem Startbildschirm antippen, um Apps auf dem Startbildschirm ein-/auszublenden. Weitere Details finden Sie im DIYables Bluetooth App Benutzerhandbuch.
Schauen Sie nun zurück zum Serial Monitor in der Arduino IDE. Sie werden sehen:
Bluetooth connected!
Received: Hello
Received: ping
Received: status
Sent: Status update #1 - All systems operational
Geben Sie Nachrichten in die App ein und beobachten Sie das Echtzeit-Feedback im Serial Monitor
Probieren Sie eingebaute Befehle aus: ping, status, time, heap
Sie können auch Nachrichten im Serial Monitor eingeben, die dann an die App gesendet werden
Verwenden Sie den onChatMessage()-Callback, um von der App empfangene Nachrichten zu verarbeiten. Sie können beliebige benutzerdefinierte Befehlswörter definieren, die für Ihr Projekt sinnvoll sind — der ESP32 reagiert entsprechend:
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Received: ");
Serial.println(message);
if (message == "LED_ON") {
digitalWrite(2, HIGH);
bluetoothChat.send("LED eingeschaltet");
} else if (message == "LED_OFF") {
digitalWrite(2, LOW);
bluetoothChat.send("LED ausgeschaltet");
} else {
bluetoothChat.send("Unbekannter Befehl: " + message);
}
});
Sie können so viele benutzerdefinierte Befehle hinzufügen, wie Sie benötigen, indem Sie weitere else if-Blöcke hinzufügen. Fügen Sie zum Beispiel RELAY_ON / RELAY_OFF zur Relais-Steuerung hinzu, oder READ zur Auslösung einer Sensor-Ablesung — jedes Wort, das Sie in der App eingeben, wird zu einem Befehl.
Sie können jederzeit Textnachrichten vom ESP32 an die App senden:
bluetoothChat.send("Hallo vom ESP32!");
float temperature = 25.3;
bluetoothChat.send("Temperatur: " + String(temperature) + "°C");
bluetoothChat.send("System bereit");
Sie können erkennen, wann sich die App mit dem ESP32 verbindet oder trennt:
bluetoothServer.setOnConnected([]() {
Serial.println("Bluetooth verbunden!");
bluetoothChat.send("Willkommen! ESP32 ist bereit zum Chatten.");
});
bluetoothServer.setOnDisconnected([]() {
Serial.println("Bluetooth getrennt!");
});
if (bluetoothServer.isConnected()) {
bluetoothChat.send("Immer noch verbunden!");
}
Leiten Sie im Arduino IDE Serial Monitor eingegebene Nachrichten an die Bluetooth-App weiter:
void loop() {
bluetoothServer.loop();
if (Serial.available()) {
String serialMsg = Serial.readStringUntil('\n');
serialMsg.trim();
if (serialMsg.length() > 0 && bluetooth.isConnected()) {
bluetoothChat.send(serialMsg);
Serial.print("Vom Serial gesendet: ");
Serial.println(serialMsg);
}
}
delay(10);
}
Die Chat-Schnittstelle in der DIYables Bluetooth App bietet:
Nachrichtenliste: Scrollbare Liste mit gesendeten und empfangenen Nachrichten
Texteingabe: Geben Sie Ihre Nachricht unten ein
Senden-Button: Tippen Sie, um die eingegebene Nachricht zu senden
Auto-Scroll: Scrollt automatisch zur neuesten Nachricht
Der Beispielcode enthält diese eingebauten Befehle:
ping → Antwortet mit "pong!"
status → Meldet ESP32-Laufstatus
time → Zeigt Betriebszeit in Sekunden
heap → Zeigt freien Heap-Speicher in Bytes
void setup() {
bluetoothChat.onChatMessage([](const String& message) {
Serial.print("Empfangen: ");
Serial.println(message);
bluetoothChat.send("Echo: " + message);
});
}
const int LED_PIN = 2;
const int RED_PIN = 16;
const int GREEN_PIN = 17;
const int BLUE_PIN = 18;
void setup() {
pinMode(LED_PIN, OUTPUT);
pinMode(RED_PIN, OUTPUT);
pinMode(GREEN_PIN, OUTPUT);
pinMode(BLUE_PIN, OUTPUT);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "LED ON") {
digitalWrite(LED_PIN, HIGH);
bluetoothChat.send("LED ist jetzt AN");
} else if (cmd == "LED OFF") {
digitalWrite(LED_PIN, LOW);
bluetoothChat.send("LED ist jetzt AUS");
} else if (cmd == "ROT") {
digitalWrite(RED_PIN, HIGH);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("Rote LED aktiviert");
} else if (cmd == "GRUEN") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, HIGH);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("Grüne LED aktiviert");
} else if (cmd == "BLAU") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, HIGH);
bluetoothChat.send("Blaue LED aktiviert");
} else if (cmd == "AUS") {
digitalWrite(RED_PIN, LOW);
digitalWrite(GREEN_PIN, LOW);
digitalWrite(BLUE_PIN, LOW);
bluetoothChat.send("Alle LEDs aus");
} else if (cmd == "HILFE") {
bluetoothChat.send("Befehle: LED ON, LED OFF, ROT, GRUEN, BLAU, AUS, HILFE");
} else {
bluetoothChat.send("Unbekannter Befehl. Geben Sie HILFE für Liste ein.");
}
});
}
#include <DHT.h>
DHT dht(4, DHT22);
void setup() {
dht.begin();
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "TEMP") {
float temp = dht.readTemperature();
if (!isnan(temp)) {
bluetoothChat.send("Temperatur: " + String(temp, 1) + " °C");
} else {
bluetoothChat.send("Fehler beim Lesen des Temperatursensors");
}
} else if (cmd == "FEUCHTIGKEIT") {
float hum = dht.readHumidity();
if (!isnan(hum)) {
bluetoothChat.send("Feuchtigkeit: " + String(hum, 1) + " %");
} else {
bluetoothChat.send("Fehler beim Lesen des Feuchtigkeitssensors");
}
} else if (cmd == "ALLE") {
float temp = dht.readTemperature();
float hum = dht.readHumidity();
bluetoothChat.send("Temp: " + String(temp, 1) + "°C | Feuchtigkeit: " + String(hum, 1) + "%");
} else if (cmd == "HILFE") {
bluetoothChat.send("Befehle: TEMP, FEUCHTIGKEIT, ALLE, HILFE");
}
});
}
const int RELAY_1 = 16;
const int RELAY_2 = 17;
bool relay1State = false;
bool relay2State = false;
void setup() {
pinMode(RELAY_1, OUTPUT);
pinMode(RELAY_2, OUTPUT);
digitalWrite(RELAY_1, LOW);
digitalWrite(RELAY_2, LOW);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "R1 AN") {
digitalWrite(RELAY_1, HIGH);
relay1State = true;
bluetoothChat.send("Relais 1: AN");
} else if (cmd == "R1 AUS") {
digitalWrite(RELAY_1, LOW);
relay1State = false;
bluetoothChat.send("Relais 1: AUS");
} else if (cmd == "R2 AN") {
digitalWrite(RELAY_2, HIGH);
relay2State = true;
bluetoothChat.send("Relais 2: AN");
} else if (cmd == "R2 AUS") {
digitalWrite(RELAY_2, LOW);
relay2State = false;
bluetoothChat.send("Relais 2: AUS");
} else if (cmd == "STATUS") {
bluetoothChat.send("Relais 1: " + String(relay1State ? "AN" : "AUS"));
bluetoothChat.send("Relais 2: " + String(relay2State ? "AN" : "AUS"));
} else if (cmd == "HILFE") {
bluetoothChat.send("Befehle: R1 AN, R1 AUS, R2 AN, R2 AUS, STATUS, HILFE");
}
});
}
unsigned long lastMessageTime = 0;
const unsigned long MESSAGE_INTERVAL = 10000;
void loop() {
bluetoothServer.loop();
if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) {
lastMessageTime = millis();
messageCount++;
String statusMsg = "Status-Update #" + String(messageCount);
statusMsg += " - Betriebszeit: " + String(millis() / 1000) + "s";
statusMsg += " - Heap: " + String(ESP.getFreeHeap()) + " Bytes";
bluetoothChat.send(statusMsg);
}
delay(10);
}
bluetoothChat.onChatMessage([](const String& message) {
unsigned long timestamp = millis() / 1000;
Serial.print("[");
Serial.print(timestamp);
Serial.print("s] Empfangen: ");
Serial.println(message);
String response = processCommand(message);
bluetoothChat.send(response);
Serial.print("[");
Serial.print(millis() / 1000);
Serial.print("s] Gesendet: ");
Serial.println(response);
});
String processCommand(const String& cmd) {
if (cmd.equalsIgnoreCase("ping")) return "pong!";
if (cmd.equalsIgnoreCase("status")) return "Alle Systeme betriebsbereit";
if (cmd.equalsIgnoreCase("time")) return "Betriebszeit: " + String(millis() / 1000) + "s";
return "Echo: " + cmd;
}
bluetoothChat.onChatMessage([](const String& message) {
int spaceIndex = message.indexOf(' ');
String command, argument;
if (spaceIndex > 0) {
command = message.substring(0, spaceIndex);
argument = message.substring(spaceIndex + 1);
} else {
command = message;
argument = "";
}
command.toUpperCase();
if (command == "PWM") {
int value = argument.toInt();
value = constrain(value, 0, 255);
analogWrite(16, value);
bluetoothChat.send("PWM auf " + String(value) + " gesetzt");
} else if (command == "DELAY") {
int ms = argument.toInt();
bluetoothChat.send("Warte " + String(ms) + "ms...");
delay(ms);
bluetoothChat.send("Fertig!");
} else if (command == "PIN") {
int secondSpace = argument.indexOf(' ');
if (secondSpace > 0) {
int pin = argument.substring(0, secondSpace).toInt();
String state = argument.substring(secondSpace + 1);
state.toUpperCase();
digitalWrite(pin, state == "HIGH" ? HIGH : LOW);
bluetoothChat.send("Pin " + String(pin) + " auf " + state + " gesetzt");
}
}
});
#include <ESP32Servo.h>
Servo myServo;
const int SERVO_PIN = 13;
void setup() {
myServo.attach(SERVO_PIN);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
int angle = -1;
if (cmd.startsWith("SERVO ")) {
angle = cmd.substring(6).toInt();
} else {
angle = cmd.toInt();
if (angle == 0 && cmd != "0") angle = -1;
}
if (angle >= 0 && angle <= 180) {
myServo.write(angle);
bluetoothChat.send("Servo zu " + String(angle) + "° bewegt");
} else if (cmd == "SWEEP") {
bluetoothChat.send("Servo bewegt sich...");
for (int a = 0; a <= 180; a += 5) {
myServo.write(a);
delay(30);
}
for (int a = 180; a >= 0; a -= 5) {
myServo.write(a);
delay(30);
}
bluetoothChat.send("Bewegung abgeschlossen");
}
});
}
const int MOTOR_PWM = 16;
const int MOTOR_DIR1 = 18;
const int MOTOR_DIR2 = 19;
void setup() {
pinMode(MOTOR_PWM, OUTPUT);
pinMode(MOTOR_DIR1, OUTPUT);
pinMode(MOTOR_DIR2, OUTPUT);
bluetoothChat.onChatMessage([](const String& message) {
String cmd = message;
cmd.toUpperCase();
if (cmd == "VORWAERTS") {
digitalWrite(MOTOR_DIR1, HIGH);
digitalWrite(MOTOR_DIR2, LOW);
analogWrite(MOTOR_PWM, 200);
bluetoothChat.send("Motor läuft vorwärts");
} else if (cmd == "RUECKWAERTS") {
digitalWrite(MOTOR_DIR1, LOW);
digitalWrite(MOTOR_DIR2, HIGH);
analogWrite(MOTOR_PWM, 200);
bluetoothChat.send("Motor läuft rückwärts");
} else if (cmd == "STOPP") {
analogWrite(MOTOR_PWM, 0);
bluetoothChat.send("Motor gestoppt");
} else if (cmd.startsWith("SPEED ")) {
int speed = cmd.substring(6).toInt();
speed = constrain(speed, 0, 255);
analogWrite(MOTOR_PWM, speed);
bluetoothChat.send("Motor-Geschwindigkeit: " + String(speed));
}
});
}
| Feature | BLE (Esp32BLE_Chat) | Classic Bluetooth (Esp32Bluetooth_Chat) |
| iOS-Unterstützung | ✓ Ja | ✗ Nein |
| Android-Unterstützung | ✓ Ja | ✓ Ja |
| Energieverbrauch | Niedrig | Höher |
| Reichweite | ~30-100m | ~10-100m |
| Datenrate | Niedriger | Höher |
| Kopplung erforderlich | Nein (Auto-Verbindung) | Ja (Manuelle Kopplung) |
| Am besten für | Batteriebetrieben, plattformübergreifend | Hoher Durchsatz, nur Android |
1. Gerät in der App nicht auffindbar
Stellen Sie sicher, dass der ESP32 eingeschaltet ist und der Sketch hochgeladen wurde
Für BLE: Stellen Sie sicher, dass Bluetooth und Standort Ihres Telefons aktiviert sind
Für Classic Bluetooth: Koppeln Sie das Gerät zuerst in den Bluetooth-Einstellungen des Telefons
Überprüfen Sie, ob das korrekte Partitionsschema ausgewählt ist (Huge APP)
2. Nachrichten erscheinen nicht in der App
Überprüfen Sie den Bluetooth-Verbindungsstatus in der App
Überprüfen Sie die Verbindung im Serial Monitor
Stellen Sie sicher, dass Nachrichten mit bluetoothChat.send() gesendet werden
Versuchen Sie, die Verbindung zu trennen und wieder herzustellen
3. Echo-Nachrichten funktionieren nicht
Überprüfen Sie, ob der onChatMessage()-Callback korrekt eingerichtet ist
Überprüfen Sie den Serial Monitor auf empfangene Nachrichten
Stellen Sie sicher, dass der Chat-App-Bildschirm in der mobilen App ausgewählt ist
4. Verbindung bricht häufig ab
Gehen Sie näher zum ESP32 (Entfernung reduzieren)
Für BLE: Überprüfen Sie auf Interferenzen von anderen BLE-Geräten
Für Classic Bluetooth: Stellen Sie eine stabile Stromversorgung zum ESP32 sicher
Überprüfen Sie den Serial Monitor auf