ESP32 Bluetooth Tabellen-Beispiel - Strukturierte Datenanzeige-Interface Tutorial

Überblick

Das Bluetooth Tabellen-Beispiel bietet eine strukturierte Schlüssel-Wert-Datenanzeige, die über die DIYables Bluetooth STEM App zugänglich ist. Entwickelt für ESP32 Boards mit Unterstützung für sowohl BLE (Bluetooth Low Energy) als auch Classic Bluetooth Verbindungen. Definieren Sie benannte Zeilen und aktualisieren Sie deren Werte in Echtzeit — perfekt für Dashboards, Sensorstatus-Panels, Systemmonitore und jede Anwendung, die eine organisierte Datendarstellung erfordert.

Dieses Beispiel unterstützt zwei Bluetooth-Modi:

  • ESP32 BLE (Bluetooth Low Energy): Funktioniert sowohl auf Android als auch iOS
  • ESP32 Classic Bluetooth: Funktioniert nur auf Android. iOS unterstützt kein Classic Bluetooth. Verwenden Sie BLE, wenn Sie iOS-Unterstützung benötigen.
ESP32 Bluetooth Tabellen-Beispiel - Strukturierte Datenanzeige-Interface Tutorial

Features

  • Strukturierte Zeilen: Bis zu 20 benannte Attributzeilen
  • Echtzeit-Updates: Aktualisieren Sie einzelne Zeilenwerte ohne Aktualisierung der gesamten Tabelle
  • Benannte Attribute: Jede Zeile hat eine beschreibende Bezeichnung (z.B. "Temperatur", "Status")
  • Dynamische Werte: Senden Sie jeden String-Wert für jede Zeile
  • Tabellenstruktur-Sync: App fordert Tabellenkonfiguration bei Verbindung an
  • BLE & Classic Bluetooth: Wählen Sie den Bluetooth-Modus, der zu Ihrem Projekt passt
  • Plattformübergreifend: BLE-Modus funktioniert sowohl auf Android als auch iOS; Classic Bluetooth funktioniert auf Android
  • Stromsparende Option: BLE-Modus verbraucht weniger Strom als Classic Bluetooth

Benötigte Hardware

1×ESP32 ESP-WROOM-32 Entwicklungsmodul
1×(Alternativ) ESP32 Uno-form board
1×(Alternativ) ESP32 S3 Uno-form board
1×USB-Kabel Typ-A zu Typ-C (für USB-A PC)
1×USB-Kabel Typ-C zu Typ-C (für USB-C PC)
1×Breadboard
1×Verbindungskabel
1×(Empfohlen) Schraubklemmen-Erweiterungsboard für ESP32
1×(Empfohlen) Breakout Expansion Board for ESP32
1×(Empfohlen) Stromverteiler für ESP32

Oder Sie können die folgenden Kits kaufen:

1×DIYables ESP32 Starter-Kit (ESP32 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.

ESP32 Code

Schnelle Schritte

Befolgen Sie diese Anweisungen Schritt für Schritt:

  • Neu bei ESP32? Beginnen Sie mit unserem Tutorial zur Einrichtung der Umgebung für ESP32 in der Arduino IDE, um zuerst die Grundlagen zu lernen.
  • Verbinden Sie das ESP32 Board mit Ihrem Computer über ein USB-Kabel.
  • Starten Sie die Arduino IDE auf Ihrem Computer.
  • Wählen Sie das entsprechende ESP32 Board und COM-Port aus.
  • Navigieren Sie zum Libraries Icon in der linken Leiste der Arduino IDE.
  • Suchen Sie "DIYables Bluetooth", dann finden Sie die DIYables Bluetooth Library von DIYables
  • Klicken Sie auf den Install Button, um die Library zu installieren.
ESP32 DIYables Bluetooth library
  • Sie werden aufgefordert, einige andere Library-Abhängigkeiten zu installieren
  • Klicken Sie auf Install All Button, um alle Library-Abhängigkeiten zu installieren.
ESP32 DIYables Bluetooth dependency

Wählen Sie je nach Ihren Anforderungen einen der beiden Bluetooth-Modi unten:

ESP32 Classic Bluetooth Code (funktioniert nur mit der App auf Android)

Hinweis: Classic Bluetooth wird auf iOS NICHT unterstützt. Wenn Sie iOS-Unterstützung benötigen, verwenden Sie den BLE Code unten.

  • Gehen Sie in der Arduino IDE zu File Examples DIYables Bluetooth Esp32Bluetooth_Table Beispiel, oder kopieren Sie den obigen Code und fügen Sie ihn in den Editor der Arduino IDE ein
/* * DIYables Bluetooth Library - ESP32 Classic Bluetooth Table Example * Works with DIYables Bluetooth STEM app on Android * Note: Classic Bluetooth is NOT supported on iOS. Use BLE examples for iOS support. * * This example demonstrates the Bluetooth Table feature: * - Display structured data in a two-column table * - Real-time value updates for each row * - Perfect for sensor dashboards and status displays * * Compatible Boards: * - ESP32 (all variants with Classic Bluetooth) * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and view the table * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothTable.h> #include <platforms/DIYables_Esp32Bluetooth.h> // Create Bluetooth instances DIYables_Esp32Bluetooth bluetooth("ESP32_Table"); DIYables_BluetoothServer bluetoothServer(bluetooth); // Create Table app instance DIYables_BluetoothTable bluetoothTable; // Variables for demo data unsigned long lastUpdate = 0; const unsigned long UPDATE_INTERVAL = 1000; // Update every second int counter = 0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 Table Example"); // Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin(); // Add table app to server bluetoothServer.addApp(&bluetoothTable); // Define table structure (add rows with attribute names) bluetoothTable.addRow("Temperature"); bluetoothTable.addRow("Humidity"); bluetoothTable.addRow("Pressure"); bluetoothTable.addRow("Counter"); bluetoothTable.addRow("Uptime"); bluetoothTable.addRow("Free Heap"); bluetoothTable.addRow("CPU Freq"); bluetoothTable.addRow("Status"); Serial.print("Table rows defined: "); Serial.println(bluetoothTable.getRowCount()); // Set up connection event callbacks bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); // Send table structure bluetoothTable.sendTableStructure(); // Send initial values updateTableValues(); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); // Optional: Handle requests for table data bluetoothTable.onDataRequest([]() { Serial.println("App requested table data"); bluetoothTable.sendTableStructure(); updateTableValues(); }); Serial.println("Waiting for Bluetooth connection..."); } void updateTableValues() { // TODO: Replace with actual sensor readings // Simulated temperature (20-30°C) float temperature = 20.0 + random(0, 100) / 10.0; bluetoothTable.sendValueUpdate("Temperature", String(temperature, 1) + " °C"); // Simulated humidity (40-60%) int humidity = 40 + random(0, 21); bluetoothTable.sendValueUpdate("Humidity", String(humidity) + " %"); // Simulated pressure (1000-1020 hPa) int pressure = 1000 + random(0, 21); bluetoothTable.sendValueUpdate("Pressure", String(pressure) + " hPa"); // Counter value bluetoothTable.sendValueUpdate("Counter", String(counter)); counter++; // Uptime (in seconds) unsigned long uptime = millis() / 1000; String uptimeStr = String(uptime / 3600) + "h " + String((uptime % 3600) / 60) + "m " + String(uptime % 60) + "s"; bluetoothTable.sendValueUpdate("Uptime", uptimeStr); // ESP32-specific: Free heap memory bluetoothTable.sendValueUpdate("Free Heap", String(ESP.getFreeHeap()) + " bytes"); // ESP32-specific: CPU frequency bluetoothTable.sendValueUpdate("CPU Freq", String(ESP.getCpuFreqMHz()) + " MHz"); // Status bluetoothTable.sendValueUpdate("Status", counter % 2 == 0 ? "Running" : "Active"); Serial.println("Table values updated"); } void loop() { // Handle Bluetooth server communications bluetoothServer.loop(); // Update table values periodically (only when connected) if (bluetooth.isConnected() && millis() - lastUpdate >= UPDATE_INTERVAL) { lastUpdate = millis(); updateTableValues(); } delay(10); }
  • Klicken Sie auf den Upload Button in der Arduino IDE, um den Code auf den ESP32 zu laden
  • Öffnen Sie den Serial Monitor
  • Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
COM6
Send
DIYables Bluetooth - ESP32 Table Example Waiting for Bluetooth connection...
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  

ESP32 BLE Code (funktioniert mit der App sowohl auf Android als auch iOS)

  • Gehen Sie in der Arduino IDE zu File Examples DIYables Bluetooth Esp32BLE_Table Beispiel, oder kopieren Sie den obigen Code und fügen Sie ihn in den Editor der Arduino IDE ein
/* * DIYables Bluetooth Library - ESP32 BLE Table Example * Works with DIYables Bluetooth STEM app on Android and iOS * * This example demonstrates the Bluetooth Table feature: * - Display structured data in a two-column table * - Real-time value updates for each row * - Perfect for sensor dashboards and status displays * * Compatible Boards: * - ESP32-WROOM-32 * - ESP32-DevKitC * - ESP32-WROVER * - ESP32-S3 * - ESP32-C3 * - Any ESP32 board supporting BLE * * Note: Select "Huge APP (3MB No OTA/1MB SPIFFS)" partition scheme * in Arduino IDE: Tools > Partition Scheme * * Setup: * 1. Upload the sketch to your ESP32 * 2. Open Serial Monitor (115200 baud) to see connection status * 3. Use DIYables Bluetooth App to connect and view the table * * Tutorial: https://diyables.io/bluetooth-app * Author: DIYables */ #include <DIYables_BluetoothServer.h> #include <DIYables_BluetoothTable.h> #include <platforms/DIYables_Esp32BLE.h> // BLE Configuration const char* DEVICE_NAME = "ESP32BLE_Table"; 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 Table app instance DIYables_BluetoothTable bluetoothTable; // Variables for demo data unsigned long lastUpdate = 0; const unsigned long UPDATE_INTERVAL = 1000; int counter = 0; void setup() { Serial.begin(115200); delay(1000); Serial.println("DIYables Bluetooth - ESP32 BLE Table Example"); // Initialize Bluetooth server with platform-specific implementation bluetoothServer.begin(); // Add table app to server bluetoothServer.addApp(&bluetoothTable); // Define table structure bluetoothTable.addRow("Temperature"); bluetoothTable.addRow("Humidity"); bluetoothTable.addRow("Pressure"); bluetoothTable.addRow("Counter"); bluetoothTable.addRow("Uptime"); bluetoothTable.addRow("Free Heap"); bluetoothTable.addRow("Status"); Serial.print("Table rows defined: "); Serial.println(bluetoothTable.getRowCount()); // Set up connection event callbacks bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); bluetoothTable.sendTableStructure(); updateTableValues(); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); }); bluetoothTable.onDataRequest([]() { Serial.println("App requested table data"); bluetoothTable.sendTableStructure(); updateTableValues(); }); Serial.println("Waiting for Bluetooth connection..."); } void updateTableValues() { float temperature = 20.0 + random(0, 100) / 10.0; bluetoothTable.sendValueUpdate("Temperature", String(temperature, 1) + " °C"); int humidity = 40 + random(0, 21); bluetoothTable.sendValueUpdate("Humidity", String(humidity) + " %"); int pressure = 1000 + random(0, 21); bluetoothTable.sendValueUpdate("Pressure", String(pressure) + " hPa"); bluetoothTable.sendValueUpdate("Counter", String(counter)); counter++; unsigned long uptime = millis() / 1000; String uptimeStr = String(uptime / 3600) + "h " + String((uptime % 3600) / 60) + "m " + String(uptime % 60) + "s"; bluetoothTable.sendValueUpdate("Uptime", uptimeStr); bluetoothTable.sendValueUpdate("Free Heap", String(ESP.getFreeHeap()) + " bytes"); bluetoothTable.sendValueUpdate("Status", counter % 2 == 0 ? "Running" : "Active"); Serial.println("Table values updated"); } void loop() { bluetoothServer.loop(); if (bluetooth.isConnected() && millis() - lastUpdate >= UPDATE_INTERVAL) { lastUpdate = millis(); updateTableValues(); } delay(10); }
  • Klicken Sie auf den Upload Button in der Arduino IDE, um den Code auf den ESP32 zu laden
  • Öffnen Sie den Serial Monitor
  • Überprüfen Sie das Ergebnis im Serial Monitor. Es sieht folgendermaßen aus:
COM6
Send
DIYables Bluetooth - ESP32 BLE Table 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
  • Wenn Sie den ESP32 Classic Bluetooth Code verwenden, müssen Sie den ESP32 mit Ihrem Android-Telefon koppeln, bevor Sie die App öffnen:
    • 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_Table" 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 angefordert. Bitte gewähren Sie folgende:
    • Nearby Devices Berechtigung (Android 12+) / Bluetooth Berechtigung (iOS) - erforderlich zum Scannen und Verbinden mit Bluetooth-Geräten
    • Location Berechtigung (nur Android 11 und niedriger) - von älteren Android-Versionen zum Scannen nach BLE-Geräten erforderlich
  • Stellen Sie sicher, dass Bluetooth auf Ihrem Telefon eingeschaltet ist
  • Tippen Sie auf dem Startbildschirm auf den Connect Button. Die App scannt nach BLE- und Classic Bluetooth-Geräten.
DIYables Bluetooth App - Startbildschirm mit Scan Button
  • Finden und tippen Sie auf Ihr Gerät in den Scanergebnissen, um sich zu verbinden:
    • Für Classic Bluetooth: tippen Sie auf "ESP32_Table"
    • Für BLE: tippen Sie auf "ESP32BLE_Table"
  • Nach der Verbindung kehrt die App automatisch zum Startbildschirm zurück. Wählen Sie die Table App aus dem App-Menü.
DIYables Bluetooth App - Startbildschirm mit Table 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.

  • Die Tabelle wird mit den Attributnamen und ihren aktuellen Werten gefüllt
DIYables Bluetooth App - Tabellen-Bildschirm

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

COM6
Send
Bluetooth connected! App requested table data Sent table structure Temperature: 25.3 Humidity: 62% Pressure: 1013 hPa Counter: 1 Uptime: 0h 0m 5s Free Heap: 245780 Status: Running
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Beobachten Sie, wie sich die Tabellenwerte in Echtzeit in der App aktualisieren

Kreative Anpassung - Code an Ihr Projekt anpassen

Tabellenzeilen definieren

Fügen Sie Attributzeilen zur Tabelle hinzu (maximal 20 Zeilen):

// Zeilen während Setup hinzufügen bluetoothTable.addRow("Temperature"); bluetoothTable.addRow("Humidity"); bluetoothTable.addRow("Pressure"); bluetoothTable.addRow("Status"); bluetoothTable.addRow("Uptime"); // Zeilenanzahl prüfen int rows = bluetoothTable.getRowCount(); Serial.println("Total rows: " + String(rows)); // Attributnamen nach Index abrufen String attr = bluetoothTable.getAttribute(0); // Gibt "Temperature" zurück

Zeilenwerte aktualisieren

Aktualisieren Sie einzelne Zeilenwerte nach Attributnamen oder Index:

// Nach Attributnamen aktualisieren bluetoothTable.sendValueUpdate("Temperature", "25.3 °C"); bluetoothTable.sendValueUpdate("Humidity", "62%"); bluetoothTable.sendValueUpdate("Status", "Running"); // Nach Zeilenindex aktualisieren (0-basiert) bluetoothTable.sendValueUpdate(0, "25.3 °C"); // Erste Zeile bluetoothTable.sendValueUpdate(1, "62%"); // Zweite Zeile

Datenanfragen von der App verarbeiten

Wenn die App sich verbindet oder eine Aktualisierung anfordert:

bluetoothTable.onDataRequest([]() { Serial.println("App requested table data"); bluetoothTable.sendTableStructure(); // Zeilennamen senden // Aktuelle Werte für alle Zeilen senden bluetoothTable.sendValueUpdate("Temperature", String(temperature, 1) + " °C"); bluetoothTable.sendValueUpdate("Humidity", String(humidity) + "%"); bluetoothTable.sendValueUpdate("Status", "Online"); });

Tabelle löschen und neu aufbauen

// Alle Zeilen löschen bluetoothTable.clearTable(); // Neue Zeilen hinzufügen bluetoothTable.addRow("Sensor A"); bluetoothTable.addRow("Sensor B"); // Aktualisierte Struktur an App senden bluetoothTable.sendTableStructure();

Verbindungsereignisse verarbeiten

bluetoothServer.setOnConnected([]() { Serial.println("Bluetooth connected!"); }); bluetoothServer.setOnDisconnected([]() { Serial.println("Bluetooth disconnected!"); });

Verwendung der Tabelle

App-Interface

Das Tabelleninterface in der DIYables Bluetooth App zeigt:

  • Attribut-Spalte: Zeilenbeschriftungen definiert durch addRow()
  • Wert-Spalte: Aktuelle Werte aktualisiert durch sendValueUpdate()
  • Auto-Refresh: Werte aktualisieren sich in Echtzeit, sobald sie ankommen

Tabellen-Limits

  • Maximum 20 Zeilen pro Tabelle (MAX_TABLE_ROWS = 20)
  • Attributnamen sollten prägnant aber beschreibend sein
  • Werte werden als Strings angezeigt

Programmierbeispiele

Sensor Dashboard

// Sensor Dashboard Zeilen definieren bluetoothTable.addRow("Temperature"); bluetoothTable.addRow("Humidity"); bluetoothTable.addRow("Pressure"); bluetoothTable.addRow("Light Level"); bluetoothTable.addRow("Air Quality"); void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 2000) { lastUpdate = millis(); float temp = readTemperature(); float hum = readHumidity(); float press = readPressure(); int light = analogRead(34); int airQuality = analogRead(35); bluetoothTable.sendValueUpdate("Temperature", String(temp, 1) + " °C"); bluetoothTable.sendValueUpdate("Humidity", String(hum, 0) + "%"); bluetoothTable.sendValueUpdate("Pressure", String(press, 0) + " hPa"); bluetoothTable.sendValueUpdate("Light Level", String(map(light, 0, 4095, 0, 100)) + "%"); bluetoothTable.sendValueUpdate("Air Quality", airQuality < 1000 ? "Good" : "Poor"); } delay(10); }

Systemstatus Monitor

bluetoothTable.addRow("Uptime"); bluetoothTable.addRow("Free Heap"); bluetoothTable.addRow("CPU Temp"); bluetoothTable.addRow("WiFi Signal"); bluetoothTable.addRow("Clients"); bluetoothTable.addRow("Status"); void updateSystemStatus() { unsigned long uptime = millis() / 1000; int hours = uptime / 3600; int minutes = (uptime % 3600) / 60; int seconds = uptime % 60; bluetoothTable.sendValueUpdate("Uptime", String(hours) + "h " + String(minutes) + "m " + String(seconds) + "s"); bluetoothTable.sendValueUpdate("Free Heap", String(ESP.getFreeHeap()) + " bytes"); bluetoothTable.sendValueUpdate("CPU Temp", String(temperatureRead(), 1) + " °C"); bluetoothTable.sendValueUpdate("Status", "Online"); }

GPIO-Pin Status Tabelle

const int PINS[] = {2, 4, 5, 12, 13, 14, 15, 16}; const int NUM_PINS = sizeof(PINS) / sizeof(PINS[0]); void setup() { // ... Bluetooth Setup ... for (int i = 0; i < NUM_PINS; i++) { pinMode(PINS[i], INPUT); bluetoothTable.addRow("GPIO " + String(PINS[i])); } } void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 1000) { lastUpdate = millis(); for (int i = 0; i < NUM_PINS; i++) { int state = digitalRead(PINS[i]); bluetoothTable.sendValueUpdate("GPIO " + String(PINS[i]), state == HIGH ? "HIGH ?" : "LOW ?"); } } delay(10); }

Analog Sensor Array

struct SensorConfig { String name; int pin; String unit; float scale; }; SensorConfig sensors[] = { {"Temperature", 34, "°C", 0.0488}, {"Humidity", 35, "%", 0.0244}, {"Light", 36, "lux", 0.244}, {"Pressure", 39, "hPa", 0.488} }; const int NUM_SENSORS = sizeof(sensors) / sizeof(sensors[0]); void setup() { // ... Bluetooth Setup ... for (int i = 0; i < NUM_SENSORS; i++) { bluetoothTable.addRow(sensors[i].name); } } void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 2000) { lastUpdate = millis(); for (int i = 0; i < NUM_SENSORS; i++) { int raw = analogRead(sensors[i].pin); float value = raw * sensors[i].scale; bluetoothTable.sendValueUpdate(sensors[i].name, String(value, 1) + " " + sensors[i].unit); } } delay(10); }

Erweiterte Programmiertechniken

Bedingte Formatierung mit Emojis

void updateTemperatureRow(float temp) { String status; if (temp < 10) { status = "❄️ " + String(temp, 1) + " °C (Kalt)"; } else if (temp < 30) { status = "✅ " + String(temp, 1) + " °C (Normal)"; } else { status = "🔥 " + String(temp, 1) + " °C (Heiß!)"; } bluetoothTable.sendValueUpdate("Temperature", status); }

Event-gesteuerte Updates

float lastTemp = 0; float threshold = 0.5; // Nur bei signifikanter Änderung aktualisieren void loop() { bluetoothServer.loop(); float temp = readTemperature(); if (abs(temp - lastTemp) >= threshold) { lastTemp = temp; bluetoothTable.sendValueUpdate("Temperature", String(temp, 1) + " °C"); bluetoothTable.sendValueUpdate("Last Change", getTimestamp()); } delay(100); }

Hardware-Integrationsideen

BME280 Wetterstation Tabelle

Verbinden Sie einen BME280 Sensor zur Anzeige von Temperatur, Feuchtigkeit und Luftdruck in der Tabelle.

Multi-Sensor Dashboard

Verbinden Sie mehrere Sensoren (DHT22, BMP280, LDR, MQ-135) und zeigen Sie alle Messwerte als Zeilen an.

Geräteinformations-Panel

Zeigen Sie ESP32 Systeminformationen an: Chip-Modell, Flash-Größe, freier Heap, Betriebszeit und MAC-Adresse.

BLE vs Classic Bluetooth - Was wählen?

FeatureBLE (Esp32BLE_Table)Classic Bluetooth (Esp32Bluetooth_Table)
iOS Unterstützung? Ja? Nein
Android Unterstützung? Ja? Ja
StromverbrauchNiedrigHöher
Reichweite~30-100m~10-100m
DatenrateNiedrigerHöher
Kopplung erforderlichNein (Auto-Verbindung)Ja (Manuelle Kopplung)
Am besten fürBatteriebetrieb, plattformübergreifendHoher Durchsatz, nur Android

Problembehandlung

Häufige Probleme

1. Kann das Gerät in der App nicht finden

  • 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, dass das korrekte Partition Scheme ausgewählt ist (Huge APP)

2. Tabelle zeigt keine Daten

  • Stellen Sie sicher, dass sendTableStructure() im onDataRequest Callback aufgerufen wird
  • Überprüfen Sie, dass Zeilen mit addRow() hinzugefügt werden, bevor Updates gesendet werden
  • Überprüfen Sie den Serial Monitor auf die Nachricht "App requested table data"

3. Werte werden nicht aktualisiert

  • Überprüfen Sie, dass der Attributname in sendValueUpdate() genau dem entspricht, was mit addRow() hinzugefügt wurde
  • Überprüfen Sie, dass Ihr Update-Intervall Timer funktioniert
  • Stellen Sie sicher, dass Bluetooth noch verbunden ist

4. Fehlende Zeilen in der Tabelle

  • Maximum 20 Zeilen werden unterstützt
  • Überprüfen Sie getRowCount(), um zu verifizieren, dass alle Zeilen hinzugefügt wurden
  • Zeilen müssen vor dem Senden der Tabellenstruktur hinzugefügt werden

5. 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

6. Sketch zu groß / nicht genug Speicherplatz

  • Gehen Sie in der Arduino IDE zu Tools > Partition Scheme und wählen Sie "Huge APP (3MB No OTA/1MB SPIFFS)" oder "No OTA (Large APP)"
  • Das Standard-Partition Scheme bietet nur ~1.2MB für App-Code, was nicht genug für Bluetooth Libraries ist
  • Diese Einstellung gibt ~3MB durch Verzicht auf die OTA (Over-the-Air Update) Partition

Debug-Tipps

Fügen Sie umfassendes Debugging hinzu:

void debugTable() { Serial.println("=== Table Debug ==="); Serial.println("Row Count: " + String(bluetoothTable.getRowCount())); for (int i = 0; i < bluetoothTable.getRowCount(); i++) { Serial.println("Row " + String(i) + ": " + bluetoothTable.getAttribute(i)); } Serial.println("==================="); }

Projektideen

Überwachungs-Dashboards

  • Wetterstation-Anzeige (Temperatur, Feuchtigkeit, Luftdruck, Wind)
  • Server-/Netzwerkstatus-Monitor
  • Pflanzenpflege-Dashboard (Bodenfeuchtigkeit, Licht, Temperatur)
  • Aquarium-Monitor (Temperatur, pH, TDS)

Systeminformationen

  • ESP32 Systemdiagnose-Tabelle
  • WiFi-Verbindungsdetails
  • Speichernutzungs-Tracker
  • Batteriestatus-Anzeige

Datenprotokollierung

  • Sensor Min/Max/Durchschnitts-Tracker
  • Ereigniszähler-Anzeige
  • Timing-Statistiken (Antwortzeit, Betriebszeit)
  • I/O-Pin Zustandszusammenfassung

Hausautomatisierung

  • Raum-für-Raum Temperaturanzeige
  • Gerätestatus-Übersicht
  • Energieverbrauchs-Zusammenfassung
  • Sicherheitssensor-Status

Integration mit anderen Bluetooth Apps

Kombination mit Bluetooth Plotter

Zeigen Sie Werte in der Tabelle an und visualisieren Sie Trends im Plotter:

float temperature = 0; void loop() { bluetoothServer.loop(); static unsigned long lastUpdate = 0; if (millis() - lastUpdate >= 2000) { lastUpdate = millis(); temperature = readTemperature(); // Tabelle aktualisieren bluetoothTable.sendValueUpdate("Temperature", String(temperature, 1) + " °C"); bluetoothTable.sendValueUpdate("Status", temperature > 30 ? "Warning" : "Normal"); // Trend plotten bluetoothPlotter.send(temperature); } delay(10); }

Kombination mit Bluetooth Monitor

Verwenden Sie die Tabelle für strukturierte Daten und den Monitor für Log-Nachrichten:

bluetoothTable.sendValueUpdate("Temperature", String(temp, 1) + " °C"); bluetoothMonitor.send("[INFO] Temperature: " + String(temp, 1) + " °C"); if (temp > 40) { bluetoothTable.sendValueUpdate("Status", "? ALERT"); bluetoothMonitor.send("[ALERT] High temperature detected!"); }

Nächste Schritte

Nach der Beherrschung des Bluetooth Tabellen-Beispiels versuchen Sie:

  1. Bluetooth Monitor - Für freiformige Textprotokollierung
  2. Bluetooth Plotter - Für die Visualisierung von Datentrends
  3. Bluetooth Temperature - Für dedizierte Temperaturanzeige
  4. Multiple Bluetooth Apps - Kombination von Tabelle mit anderen Anzeigen

Support

Für zusätzliche Hilfe:

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