Arduino UNO R4 WiFi Bluetooth Chat Beispiel - Bidirektionaler Messaging via BLE Tutorial

Übersicht

Das Bluetooth Chat Beispiel bietet eine bidirektionale Textnachrichten-Schnittstelle, die über die DIYables Bluetooth STEM App zugänglich ist. Entwickelt für Arduino UNO R4 WiFi unter Verwendung von BLE (Bluetooth Low Energy), um Textnachrichten zwischen Ihrem Arduino und Smartphone in Echtzeit zu senden und zu empfangen. Perfekt für Befehlszeilen-Schnittstellen, Fernsteuerung über Textbefehle, serielle Brücken und interaktives Debugging.

Hinweis: Der Arduino UNO R4 WiFi unterstützt nur BLE (Bluetooth Low Energy). Er unterstützt kein Classic Bluetooth. Die DIYables Bluetooth App unterstützt sowohl BLE als auch Classic Bluetooth unter Android und BLE unter iOS. Da dieses Board BLE verwendet, funktioniert die App auf sowohl Android als auch iOS.

Arduino UNO R4 WiFi Bluetooth Chat Beispiel - Bidirektionaler Messaging via BLE Tutorial

Funktionen

  • Bidirektionaler Messaging: Senden und empfangen Sie Textnachrichten in Echtzeit
  • Befehlsverarbeitung: Verarbeiten Sie Textbefehle von der mobilen App
  • Serielle Brücke: Weiterleitung von Nachrichten zwischen Serial Monitor und Bluetooth
  • Benutzerdefinierte Antworten: Auto-Antwort mit Echos oder verarbeiteten Daten
  • Funktioniert auf Android & iOS: BLE wird auf beiden Plattformen unterstützt
  • Keine Kopplung erforderlich: BLE verbindet sich automatisch ohne manuelle Kopplung
  • Niedriger Stromverbrauch: BLE verbraucht weniger Strom als Classic Bluetooth

Benötigte Hardware

1×Arduino UNO R4 WiFi
1×Alternativ: DIYables STEM V4 IoT
1×USB-Kabel Type-C
1×(Empfohlen) Schraubklemmenblock-Shield für Arduino Uno R4
1×(Empfohlen) Breadboard-Shield für Arduino Uno R4
1×(Empfohlen) Gehäuse für Arduino Uno R4
1×(Empfohlen) Stromverteiler für Arduino Uno R4
1×(Empfohlen) Prototyping-Grundplatte & Breadboard-Kit für Arduino Uno

Oder Sie können die folgenden Kits kaufen:

1×DIYables STEM V4 IoT Starter-Kit (Arduino enthalten)
1×DIYables Sensor-Kit (30 Sensoren/Displays)
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 UNO R4 WiFi Code

Schnelle Schritte

Befolgen Sie diese Anweisungen Schritt für Schritt:

  • Wenn Sie den Arduino UNO R4 WiFi zum ersten Mal verwenden, lesen Sie den Arduino UNO R4 WiFi Einstiegsleitfaden.
  • Verbinden Sie das Arduino UNO R4 WiFi Board mit Ihrem Computer über ein USB-Kabel.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das Arduino UNO R4 WiFi Board und den entsprechenden COM-Port.
  • Navigieren Sie zum Libraries Symbol in der linken Leiste der Arduino IDE.
  • Suchen Sie nach "DIYables Bluetooth", dann finden Sie die DIYables Bluetooth Bibliothek von DIYables
  • Klicken Sie auf den Install Button, um die Bibliothek zu installieren.
Arduino UNO R4 DIYables Bluetooth library
  • Sie werden gefragt, ob Sie weitere Bibliotheksabhängigkeiten installieren möchten
  • Klicken Sie auf den Install All Button, um alle Bibliotheksabhängigkeiten zu installieren.
Arduino UNO R4 DIYables Bluetooth dependency

BLE Code

  • Gehen Sie in der Arduino IDE zu File Examples DIYables Bluetooth ArduinoBLE_Chat Beispiel, oder kopieren Sie den obigen Code und fügen Sie ihn in den Editor der Arduino IDE ein
/* * DIYables Bluetooth Library - Bluetooth 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 * * Compatible Boards: * - Arduino UNO R4 WiFi * - Arduino Nano 33 BLE / BLE Sense * - Arduino Nano 33 IoT * - Arduino MKR WiFi 1010 * - Arduino Nano RP2040 Connect * - Any board supporting the ArduinoBLE library * * Setup: * 1. Upload the sketch to your Arduino * 2. Open Serial Monitor to see connection status and messages * 3. Use DIYables Bluetooth App to connect and chat * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothChat.h> #include <platforms/DIYables_ArduinoBLE.h> // BLE Configuration const char* DEVICE_NAME = "Arduino_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_ArduinoBLE 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(9600); while (!Serial); Serial.println("DIYables Bluetooth - 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! Arduino 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); // You can add custom command handling here 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: "; timeMsg += String(millis() / 1000); timeMsg += " seconds"; bluetoothChat.send(timeMsg); } }); Serial.println("Waiting for Bluetooth connection..."); Serial.println("Type 'ping', 'status', or 'time' in the app to test commands"); } void loop() { // Handle Bluetooth server communications bluetoothServer.loop(); // Send periodic status message (only when connected) 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); } // Optional: Read from Serial and send to Bluetooth 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 den Upload Button in der Arduino IDE, um den Code auf den Arduino UNO R4 WiFi hochzuladen
  • Öffnen Sie den Serial Monitor
  • Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
COM6
Send
DIYables Bluetooth - Chat Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

Mobile App

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

Hinweis: Die DIYables Bluetooth App unterstützt sowohl BLE als auch Classic Bluetooth unter Android und BLE unter iOS. Da der Arduino UNO R4 WiFi BLE verwendet, funktioniert die App auf sowohl Android als auch iOS. Für BLE ist keine manuelle Kopplung erforderlich – einfach scannen und verbinden.

  • Öffnen Sie die DIYables Bluetooth App
  • Beim ersten Öffnen der App werden Berechtigungen abgefragt. Bitte gewähren Sie folgende Berechtigungen:
    • Nearby Devices Berechtigung (Android 12+) / Bluetooth Berechtigung (iOS) - erforderlich zum Scannen und Verbinden mit Bluetooth-Geräten
    • Location Berechtigung (nur Android 11 und darunter) - 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 den Connect Button. Die App scannt nach BLE-Geräten.
DIYables Bluetooth App - Startbildschirm mit Scan Button
  • Finden und tippen Sie auf "Arduino_Chat" in den Scan-Ergebnissen, um sich zu verbinden.
  • Nach der Verbindung kehrt die App automatisch zum Startbildschirm zurück. Wählen Sie die Chat App aus dem App-Menü.
DIYables Bluetooth App - Startbildschirm mit Chat App

Hinweis: Sie können auf das Einstellungssymbol auf dem Startbildschirm tippen, um Apps auf dem Startbildschirm ein-/auszublenden. Weitere Details finden Sie im DIYables Bluetooth App Benutzerhandbuch.

  • Tippen Sie eine Nachricht in die Chat-Eingabe und tippen Sie auf Senden
DIYables Bluetooth App - Chat-Bildschirm

Schauen Sie nun zurück zum Serial Monitor in der Arduino IDE. Sie werden sehen:

COM6
Send
Bluetooth connected! Received: Hello
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Der Arduino gibt Ihre Nachricht zurück, und Sie können die Antwort im App-Chat sehen

Kreative Anpassung - Passen Sie den Code an Ihr Projekt an

Chat-Nachrichten verarbeiten

Verwenden Sie den onChatMessage() Callback, um in der App eingetippte Nachrichten zu empfangen und zu verarbeiten. Sie können beliebige benutzerdefinierte Befehlswörter definieren, die für Ihr Projekt Sinn ergeben – der Arduino reagiert 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); } });

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 LED_ON / LED_OFF hinzu, um einen Pin zu steuern, oder READ, um eine Sensormessung auszulösen – jedes Wort, das Sie in der App tippen, wird zu einem Befehl.

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");

Serial-zu-Bluetooth Brücke

Weiterleitung von Nachrichten zwischen Serial Monitor und Bluetooth:

// 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 Chats

App-Schnittstelle

Die Chat-Schnittstelle in der DIYables Bluetooth App bietet:

  • Nachrichtenliste: Zeigt gesendete und empfangene Nachrichten mit Zeitstempel
  • Texteingabe: Tippen Sie Nachrichten ein, um sie an den Arduino zu senden
  • Senden-Button: Tippen Sie, um die Nachricht zu senden

Kommunikationsablauf

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

Programmierungsbeispiele

Befehlsverarbeitung mit Relais-Steuerung

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"); } });

Sensor-Abfragesystem

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"); } });

Periodische Status-Updates

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); }

Erweiterte Programmiertechniken

Mehrteilige Befehls-Verarbeitung

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. Kann das Gerät in der App nicht finden

  • Stellen Sie sicher, dass der Arduino UNO R4 WiFi eingeschaltet ist und der Sketch hochgeladen wurde
  • Stellen Sie sicher, dass Bluetooth auf Ihrem Telefon aktiviert ist
  • Unter Android 11 und darunter aktivieren Sie auch die Standortdienste
  • Versuchen Sie, Bluetooth auf Ihrem Telefon neu zu starten

2. Nachrichten werden nicht vom Arduino empfangen

  • Überprüfen Sie den Bluetooth-Verbindungsstatus in der App
  • Stellen Sie sicher, dass der onChatMessage Callback korrekt eingerichtet ist
  • Überprüfen Sie den Serial Monitor auf Fehlermeldungen

3. Arduino-Antworten werden nicht in der App angezeigt

  • Stellen Sie sicher, dass bluetoothChat.send() aufgerufen wird
  • Überprüfen Sie, dass bluetoothServer.loop() in der Hauptschleife aufgerufen wird
  • Stellen Sie sicher, dass die Verbindung noch aktiv ist mit bluetooth.isConnected()

4. Serial Monitor zeigt unlesbaren Text

  • Stellen Sie sicher, dass die Baudrate im Serial Monitor mit Serial.begin(9600) übereinstimmt
  • Überprüfen Sie, dass das richtige Board in der Arduino IDE ausgewählt ist

5. Verbindung bricht häufig ab

  • Bewegen Sie sich näher zum Arduino (Entfernung reduzieren)
  • Prüfen Sie auf Interferenzen von anderen BLE-Geräten
  • Stellen Sie eine stabile USB-Stromversorgung sicher

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

  • Installieren Sie das neueste Arduino UNO R4 Board-Paket über den Board Manager
  • Versuchen Sie ein anderes USB-Kabel oder einen anderen Port
  • Drücken Sie den Reset-Button am Board vor dem Upload

Projektideen

Kommunikation

  • Text-Befehlsschnittstelle für Hausautomation
  • Serial-zu-Bluetooth Brücke für drahtloses Debugging
  • Remote-Sensor-Abfragesystem
  • Interaktives Quiz- oder Trivial-Spiel

Steuerungssysteme

  • Sprache-zu-Text Relais-Steuerung
  • Multi-Geräte-Befehlsrouter
  • Konfigurationsmanager über Chat-Befehle
  • Firmware-Versions-Reporter

Protokollierung & Überwachung

  • Ereignis-Logger mit Zeitstempel
  • Alarm-Benachrichtigungssystem
  • Status-Berichts-Generator
  • Diagnose-Chat-Bot

Integration mit anderen Bluetooth Apps

Kombination mit Bluetooth Monitor

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))); }

Kombination mit Bluetooth Table

Chat-Befehle zur Steuerung, welche Daten in der Tabelle angezeigt werden:

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

Nächste Schritte

Nach dem Meistern des Bluetooth Chat Beispiels versuchen Sie:

  1. Bluetooth Monitor - Für einseitiges Status-Streaming
  2. Bluetooth Slider - Für analoge Wertsteuerung
  3. Bluetooth Table - Für strukturierte Datenanzeige
  4. Multiple Bluetooth Apps - Kombination von Chat mit anderen Apps

Support

Für zusätzliche Hilfe:

  • Überprüfen Sie die API-Referenz-Dokumentation
  • 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!