Arduino Nano ESP32 Bluetooth-Chat-Beispiel - Bidirektionales Messaging über BLE-Anleitung

Überblick

Dieses Beispiel implementiert eine bidirektionale Textnachrichtsschnittstelle auf dem Arduino Nano ESP32 mit BLE (Bluetooth Low Energy) über die DIYables Bluetooth STEM-App. Senden und empfangen Sie Textnachrichten zwischen dem Arduino und einem Smartphone in Echtzeit. Geeignet für Befehlszeilenschnittstellen, Fernsteuerung über Text, serielle Brücken und interaktives Debugging.

Hinweis: Der Arduino Nano ESP32 unterstützt nur BLE — Classic Bluetooth wird nicht unterstützt. Die DIYables Bluetooth App funktioniert auf Android und iOS mit BLE.

Arduino Nano ESP32 Bluetooth-Chat-Beispiel - Bidirektionales Messaging über BLE-Anleitung

Funktionen

  • Bidirektionales Messaging: Senden und empfangen Sie Textnachrichten in Echtzeit
  • Befehlsbearbeitung: Verarbeiten Sie Textbefehle, die von der App empfangen werden
  • Serielle Brücke: Leiten Sie Nachrichten zwischen Serial Monitor und Bluetooth weiter
  • Benutzerdefinierte Antworten: Automatische Antworten mit Echos oder verarbeiteten Daten
  • Android- und iOS-Unterstützung: BLE ist mit beiden Plattformen kompatibel
  • Keine Kopplung erforderlich: BLE verbindet sich ohne manuelle Kopplung
  • Niedriger Energieverbrauch: BLE verbraucht weniger Energie als Classic Bluetooth

Erforderliche Hardware

1×Arduino Nano ESP32
1×USB-Kabel Typ-C
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Breakout-Erweiterungsboard für Arduino Nano
1×(Empfohlen) Stromverteiler für Arduino Nano ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables Sensor-Kit (18 Sensoren/Displays)
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.

Arduino Nano ESP32 Code

Schnelle Schritte

  • Neu bei Arduino Nano ESP32? Beginnen Sie mit dem Arduino Nano ESP32 Anfängerleitfaden.
  • Verbinden Sie den Arduino Nano ESP32 über USB mit Ihrem Computer.
  • Öffnen Sie die Arduino IDE.
  • Wählen Sie das Board Arduino Nano ESP32 und den korrekten COM-Port aus.
  • Klicken Sie auf das Symbol Libraries in der linken Seitenleiste.
  • Suchen Sie nach "DIYables Bluetooth" und wählen Sie die DIYables Bluetooth Library von DIYables aus.
  • Klicken Sie auf Install.
Arduino Nano ESP32 DIYables Bluetooth Library
  • Wenn Sie aufgefordert werden, Abhängigkeiten zu installieren, klicken Sie auf Install All.
Arduino Nano ESP32 DIYables Bluetooth-Abhängigkeit

BLE-Code

  • Öffnen Sie in der Arduino IDE File Examples DIYables Bluetooth ArduinoBLE_Chat, oder fügen Sie den Code in den Editor ein.
/* * DIYables Bluetooth Library - ESP32 BLE Chat Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Chat feature: * - Two-way text messaging via Bluetooth * - Receive messages from mobile app * - Send messages to mobile app * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothChat.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration 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"; // Create Bluetooth instances DIYables_Esp32BLE bluetooth(DEVICE_NAME, SERVICE_UUID, TX_UUID, RX_UUID); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Chat app instance DIYables_BluetoothChat bluetoothChat; // Variables for periodic messages unsigned long lastMessageTime = 0; const unsigned long MESSAGE_INTERVAL = 10000; // Send message every 10 seconds int messageCount = 0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Chat Example"); // Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin(); // Add chat app to server bluetoothServer.addApp(&bluetoothChat); // Set up connection event callbacks bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothChat.send("Hello! ESP32 BLE is ready to chat."); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); messageCount = 0; }); // Set up callback for received chat messages bluetoothChat.onChatMessage([](const String& message) { Serial.print("Received: "); Serial.println(message); // Echo the message back String response = "Echo: "; response += message; bluetoothChat.send(response); // Custom command handling 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, um die Skizze auf das Board zu flashen.
  • Öffnen Sie den Serial Monitor.
  • Die Ausgabe des Serial Monitor sollte folgendermaßen aussehen:
Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
DIYables Bluetooth - Chat Example Waiting for Bluetooth connection...
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2

Mobile App

  • Installieren Sie die DIYables Bluetooth App auf Ihrem Smartphone: Android | iOS

Hinweis: Die DIYables Bluetooth App funktioniert auf Android und iOS mit BLE. Es ist keine manuelle Kopplung erforderlich.

  • Starten Sie die DIYables Bluetooth App.
  • Erteilen Sie beim ersten Start die folgenden Berechtigungen:
    • Nearby Devices (Android 12+) / Bluetooth (iOS) — erforderlich, um Bluetooth-Geräte zu scannen und eine Verbindung herzustellen
    • Location (nur Android 11 und älter) — erforderlich von älteren Android-Versionen zum Scannen von BLE
  • Stellen Sie sicher, dass Bluetooth auf Ihrem Gerät aktiviert ist.
  • Tippen Sie auf der Startseite auf Connect. Die App scannt nach BLE-Geräten.
DIYables Bluetooth App - Startseite mit Scan-Schaltfläche
  • Tippen Sie auf "Arduino_Chat" in den Scanergebnissen.
  • Kehren Sie nach dem Verbinden zur Startseite zurück und öffnen Sie die Chat App.
DIYables Bluetooth App - Startseite mit Chat-App

Tippen Sie auf das Einstellungssymbol auf der Startseite, um Apps anzuzeigen oder auszublenden. Siehe DIYables Bluetooth App Benutzerhandbuch für Details.

  • Geben Sie eine Nachricht in das Chat-Eingabefeld ein und tippen Sie zum Senden.
DIYables Bluetooth App - Chat-Bildschirm

Schauen Sie jetzt zurück auf den Serial Monitor in der Arduino IDE. Sie werden sehen:

Newbiely | Arduino IDE 2.3.8
──
File
Edit
Sketch
Tools
Help
Arduino Nano ESP32
Newbiely.ino
···
8 Serial.println("Hello World!");
Output
Serial Monitor
Message (Enter to send message to 'Arduino Nano ESP32' on 'COM15')
New Line
9600 baud
Bluetooth connected! Received: Hello
Ln 11, Col 1
Arduino Nano ESP32 on COM15
2
  • Der Arduino echoot die Nachricht zurück, und die Antwort wird im App-Chat angezeigt.

Kreative Anpassung - Passen Sie den Code an Ihr Projekt an

Chat-Nachrichten verarbeiten

Verwenden Sie den Callback onChatMessage(), um Nachrichten von der App zu empfangen und zu verarbeiten. Definieren Sie nach Bedarf benutzerdefinierte Befehlswörter — der Arduino antwortet entsprechend:

bluetoothChat.onChatMessage([](const String& message) { Serial.print("Received: "); Serial.println(message); // Echo the message back String response = "Echo: "; response += message; bluetoothChat.send(response); // Handle custom commands if (message.equalsIgnoreCase("ping")) { bluetoothChat.send("pong!"); } else if (message.equalsIgnoreCase("status")) { bluetoothChat.send("Arduino is running normally"); } else if (message.equalsIgnoreCase("time")) { String timeMsg = "Uptime: " + String(millis() / 1000) + " seconds"; bluetoothChat.send(timeMsg); } else { bluetoothChat.send("Unknown command: " + message); } });

Fügen Sie zusätzliche else if Blöcke für jeden Befehl hinzu. Verwenden Sie beispielsweise LED_ON / LED_OFF zum Steuern eines Pins oder READ zum Auslösen einer Sensorlesung.

Nachrichten vom Arduino senden

// Send a text message to the app bluetoothChat.send("Hello from Arduino!"); // Send sensor reading float temp = readTemperature(); bluetoothChat.send("Temperature: " + String(temp, 1) + " °C");

Seriell-zu-Bluetooth-Brücke

Leiten Sie Nachrichten zwischen Serial Monitor und Bluetooth weiter:

// In loop(): 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); } }

Verbindungsereignisse verarbeiten

bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothChat.send("Hello! Arduino is ready to chat."); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); });

Verwendung des Chat

App-Schnittstelle

Die Chat-App in der DIYables Bluetooth App bietet:

  • Nachrichtenliste: Zeigt gesendete und empfangene Nachrichten mit Zeitstempel an
  • Texteingabe: Geben Sie Nachrichten ein, um sie an den Arduino zu senden
  • Senden-Schaltfläche: Tippen Sie zum Übertragen der Nachricht

Kommunikationsfluss

  1. Geben Sie eine Nachricht in der App ein ? Arduino empfängt sie über den Callback onChatMessage()
  2. Arduino verarbeitet die Nachricht und sendet optional eine Antwort über bluetoothChat.send()
  3. Die Antwort wird im App-Chat-Fenster angezeigt

Programmierkbeispiele

Befehlshandler mit Relaissteuerung

const int RELAY_PIN = 7; bluetoothChat.onChatMessage([](const String& message) { String cmd = message; cmd.toUpperCase(); if (cmd == "ON") { digitalWrite(RELAY_PIN, HIGH); bluetoothChat.send("Relay turned ON"); } else if (cmd == "OFF") { digitalWrite(RELAY_PIN, LOW); bluetoothChat.send("Relay turned OFF"); } else if (cmd == "STATUS") { int state = digitalRead(RELAY_PIN); bluetoothChat.send("Relay is " + String(state ? "ON" : "OFF")); } else { bluetoothChat.send("Commands: ON, OFF, STATUS"); } });

Abfrage-System für Sensoren

bluetoothChat.onChatMessage([](const String& message) { String cmd = message; cmd.toUpperCase(); if (cmd == "TEMP") { float temp = readTemperature(); bluetoothChat.send("Temperature: " + String(temp, 1) + " °C"); } else if (cmd == "LIGHT") { int light = analogRead(A0); int percent = map(light, 0, 1023, 0, 100); bluetoothChat.send("Light level: " + String(percent) + "%"); } else if (cmd == "ALL") { bluetoothChat.send("=== Sensor Report ==="); bluetoothChat.send("Temp: " + String(readTemperature(), 1) + " °C"); bluetoothChat.send("Light: " + String(map(analogRead(A0), 0, 1023, 0, 100)) + "%"); bluetoothChat.send("Uptime: " + String(millis() / 1000) + "s"); } else { bluetoothChat.send("Commands: TEMP, LIGHT, ALL"); } });

Regelmäßige Statusaktualisierungen

unsigned long lastMessageTime = 0; const unsigned long MESSAGE_INTERVAL = 10000; // Every 10 seconds int messageCount = 0; void loop() { bluetoothServer.loop(); if (bluetooth.isConnected() && millis() - lastMessageTime >= MESSAGE_INTERVAL) { lastMessageTime = millis(); messageCount++; String statusMsg = "Status #" + String(messageCount) + " - All systems OK"; bluetoothChat.send(statusMsg); } delay(10); }

Fortgeschrittene Programmiertechniken

Mehrwort-Befehls-Parsing

bluetoothChat.onChatMessage([](const String& message) { // Parse "SET PIN 13 HIGH" style commands if (message.startsWith("SET PIN ")) { String rest = message.substring(8); int spaceIdx = rest.indexOf(' '); if (spaceIdx > 0) { int pin = rest.substring(0, spaceIdx).toInt(); String state = rest.substring(spaceIdx + 1); state.toUpperCase(); pinMode(pin, OUTPUT); if (state == "HIGH") { digitalWrite(pin, HIGH); bluetoothChat.send("Pin " + String(pin) + " set HIGH"); } else if (state == "LOW") { digitalWrite(pin, LOW); bluetoothChat.send("Pin " + String(pin) + " set LOW"); } } } });

Chat-Logger mit Zeitstempel

bluetoothChat.onChatMessage([](const String& message) { unsigned long seconds = millis() / 1000; String timestamp = "[" + String(seconds / 3600) + ":" + String((seconds % 3600) / 60) + ":" + String(seconds % 60) + "] "; Serial.println(timestamp + "RX: " + message); // Log and acknowledge bluetoothChat.send(timestamp + "Received: " + message); });

Fehlerbehebung

Häufige Probleme

1. Gerät ist in der App nicht sichtbar

  • Bestätigen Sie, dass das Board eingeschaltet ist und die Skizze hochgeladen wurde
  • Überprüfen Sie, ob Bluetooth auf Ihrem Telefon aktiviert ist
  • Aktivieren Sie unter Android 11 und älter auch die Standortdienste
  • Versuchen Sie, Bluetooth auf Ihrem Telefon neu zu starten

2. Nachrichten werden vom Arduino nicht empfangen

  • Überprüfen Sie den Bluetooth-Verbindungsstatus in der App
  • Bestätigen Sie, dass der Callback onChatMessage korrekt registriert ist
  • Überprüfen Sie den Serial Monitor auf Fehlermeldungen

3. Arduino-Antworten werden nicht in der App angezeigt

  • Überprüfen Sie, ob bluetoothChat.send() aufgerufen wird
  • Bestätigen Sie, dass bluetoothServer.loop() in der Hauptschleife enthalten ist
  • Überprüfen Sie den Verbindungsstatus mit bluetooth.isConnected()

4. Serial Monitor zeigt garbled text an

  • Bestätigen Sie, dass die Baudrate im Serial Monitor Serial.begin(9600) entspricht
  • Überprüfen Sie, ob das richtige Board in Arduino IDE ausgewählt ist

5. Verbindung wird häufig unterbrochen

  • Reduzieren Sie den Abstand zum Arduino
  • Überprüfen Sie, ob Interferenzen von anderen BLE-Geräten vorhanden sind
  • Stellen Sie eine stabile USB-Stromversorgung sicher

6. Upload schlägt fehl oder Board wird nicht erkannt

  • Installieren Sie das neueste Arduino Nano ESP32 Board-Paket über Board Manager
  • Versuchen Sie ein anderes USB-Kabel oder einen anderen Port
  • Drücken Sie vor dem Upload die Reset-Taste

Projektideen

Kommunikation

  • Text-Befehlsschnittstelle für Hausautomation
  • Seriell-zu-Bluetooth-Brücke für drahtloses Debugging
  • Remote-Sensoreabfrage-System
  • Interaktives Quiz oder Trivia-Spiel

Steuersysteme

  • Sprache-zu-Text-Relaissteuerung
  • Multi-Geräte-Befehls-Router
  • Konfigurationsmanager über Chat-Befehle
  • Firmware-Versions-Reporter

Protokollierung & Überwachung

  • Event-Logger mit Zeitstempel
  • Alarmmeldungssystem
  • Statusbericht-Generator
  • Diagnose-Chatbot

Integration mit anderen Bluetooth-Apps

Mit Bluetooth Monitor kombinieren

Verwenden Sie Chat für Befehle und Monitor für kontinuierliche Ausgabe:

bluetoothChat.onChatMessage([](const String& message) { if (message == "START") { monitoring = true; bluetoothChat.send("Monitoring started"); } else if (message == "STOP") { monitoring = false; bluetoothChat.send("Monitoring stopped"); } }); // In loop: if (monitoring) { bluetoothMonitor.send("Sensor: " + String(analogRead(A0))); }

Mit Bluetooth Table kombinieren

Chat-Befehle zur Kontrolle der in der Tabelle angezeigten Daten:

bluetoothChat.onChatMessage([](const String& message) { if (message == "REFRESH") { updateTableValues(); bluetoothChat.send("Table refreshed"); } });

Nächste Schritte

Nach Abschluss des Bluetooth Chat-Beispiels erkunden Sie:

  1. Bluetooth Monitor — Einseitiges Statusmeldungs-Streaming
  2. Bluetooth Slider — Analogwertsteuerelement
  3. Bluetooth Table — Strukturierte Datenanzeige
  4. Mehrere Bluetooth Apps — Kombinieren Sie Chat mit anderen App-Widgets

Unterstützung

Für weitere Hilfe:

  • Überprüfen Sie die API-Referenzdokumentation
  • Besuchen Sie DIYables Tutorials
  • Arduino-Community-Foren

※ UNSERE NACHRICHTEN

  • Sie können gerne den Link zu diesem Tutorial teilen. Bitte verwenden Sie jedoch unsere Inhalte nicht auf anderen Websites. Wir haben viel Mühe und Zeit in die Erstellung der Inhalte investiert, bitte respektieren Sie unsere Arbeit!