Arduino Sensordaten via Bluetooth LE übertragen.

Heute zeige ich dir, wie du einen Feuchtigkeitssensor mit deinem Arduino Board einrichtest und die Daten über Bluetooth Low Energy (BLE) an ein Smartphone oder einen anderen Empfänger sendest. Dieses Skript zeigt wie man grundlegende Bluetooth Services erstellt und simple Daten übermittelt. In meinem Fall übermitteln wir die Bodenfeuchtigkeit eines kapazitiven soil Sensors wie diesem hier: https://amzn.to/47y0uDv (Achtung Werbung)

Einleitung:

Das hier vorgestellte Skript ist ein einfaches, aber mächtiges Beispiel dafür, wie du die Bodenfeuchtigkeit über BLE übertragen kannst. Es verwendet die ArduinoBLE-Bibliothek, die eine Vielzahl von Werkzeugen zur Kommunikation mit BLE-Geräten bietet.

Hardware-Anforderungen:

  • Ein kompatibles Arduino-Board (z.B. Arduino MKR WiFi 1010, Nano 33 IoT, usw.).
  • Ein Feuchtigkeitssensor, der an den Analogeingang A0 angeschlossen wird.
  • Ein Computer zum Hochladen des Skripts und zum Anzeigen der seriellen Ausgabe.

Das Skript

#include <ArduinoBLE.h>

const int sensorPin = A0;  // Sensor-Pin
int minWert = 1023;        // Mindestwert für Feuchtigkeit
int maxWert = 0;           // Maximalwert für Feuchtigkeit
bool isAdvertising = false; // Zustand der Werbung

// UUIDs für den Service und die Charakteristik
const char* serviceUuid = "12345678-1234-1234-1234-123456789012";
const char* charUuid = "12345678-1234-1234-1234-123456789013";

BLEService customService(serviceUuid); // Erstellen eines benutzerdefinierten Services
BLEIntCharacteristic humidityCharacteristic(charUuid, BLERead | BLENotify); // Erstellen einer Charakteristik

void setup() {
  Serial.begin(9600);
  while (!Serial); // Warten, bis die serielle Verbindung hergestellt ist, nützlich für Debugging

  // BLE initialisieren
  if (!BLE.begin()) {
    Serial.println("Starting BLE failed!");
    while (1);
  }

  BLE.setLocalName("Sensor01");
  customService.addCharacteristic(humidityCharacteristic); // Charakteristik zum Service hinzufügen
  BLE.addService(customService); // Service zum BLE hinzufügen
  
  BLE.advertise(); // Werbung beginnen
  isAdvertising = true;

  Serial.println("Bluetooth device is ready to send humidity");
}

void loop() {
  // Sensorwert lesen
  int sensorValue = analogRead(sensorPin);

  // Maximal- und Minimalwert aktualisieren
  if (sensorValue > maxWert) {
    maxWert = sensorValue;
  }
  if (sensorValue < minWert) {
    minWert = sensorValue;
  }

  // Feuchtigkeit berechnen und begrenzen
  float humidity = map(sensorValue, minWert, maxWert, 100, 0);
  humidity = constrain(humidity, 0, 100);

  // Charakteristikwert aktualisieren
  humidityCharacteristic.writeValue((int)humidity);

  // Feuchtigkeit auf der seriellen Konsole ausgeben
  Serial.print("Humidity: ");
  Serial.print(humidity);
  Serial.println("%");

  // Überprüfen der Verbindung und Wiederaufnahme der Werbung bei Bedarf
  if (BLE.connected()) {
    if(isAdvertising) {
      Serial.println("Device connected, stopping advertising.");
      isAdvertising = false; // Update the advertising status
    }
  } else {
    if(!isAdvertising) {
      BLE.advertise(); // Werbung neu starten
      Serial.println("Advertising restarted");
      isAdvertising = true; // Update the advertising 3
    }
  }

  delay(2000); // Warte etwas vor dem nächsten Durchlauf
}

Das Skript teilt sich in zwei Hauptteile: setup() und loop().

  1. Im setup()-Teil:
  • Die serielle Kommunikation wird initialisiert, was für das Debugging unerlässlich ist.
  • Die BLE-Komponente wird konfiguriert, einschließlich des Setzens eines lokalen Namens und des Hinzufügens von Service- und Charakteristiken-UUIDs.
  • Die Werbung beginnt, damit das Gerät von anderen BLE-fähigen Geräten entdeckt werden kann.
  1. Im loop()-Teil:
  • Der Sensorwert wird gelesen und in eine relative Feuchtigkeit umgerechnet.
  • Die Feuchtigkeitsdaten werden über eine BLE-Charakteristik übertragen.
  • Das Gerät überwacht seine Verbindung und passt die Werbung entsprechend an.

How To

  1. Hardware einrichten: Schließe deinen Feuchtigkeitssensor an den A0-Pin deines Arduino-Boards an.
  2. Software vorbereiten: Lade das ArduinoBLE-Bibliothek über den Bibliotheksmanager in der Arduino-IDE herunter und installiere sie.
  3. Skript hochladen: Öffne dieses Skript in der Arduino-IDE, wähle dein Board und den Port aus und lade es hoch.
  4. Überwachen und Interagieren: Öffne den seriellen Monitor in der Arduino-IDE, um die Feuchtigkeitsdaten in Echtzeit zu sehen. Du kannst auch eine BLE-Scanner-App auf deinem Smartphone verwenden, um die übertragenen Daten zu sehen.

Wie können die Daten gelesen werden?

Es gibt viele Möglichkeiten die Daten via Bluetooth zu empfangen. Die einfachste Möglichkeit sind Bluetooth LE Scanner wie beispielsweise die App BLE Scanner fürs iPhone. Mit dieser solltest Du deinen Arduino unter dem Namen „Sensor1“ finden und die Feuchtigkeitsdaten sehen können.

Anwendungsmöglichkeiten:

Dieses Skript ist ein Grundbaustein für zahlreiche Projekte, von der Hausautomatisierung bis hin zur Umweltüberwachung. Du kannst es erweitern, indem du zusätzliche Sensoren hinzufügst, die Daten in einer App visualisierst oder sogar Benachrichtigungen einrichtest, wenn bestimmte Bedingungen erfüllt sind.

Mit diesem Skript hast du einen robusten Ausgangspunkt, um Arduino Sensor Daten via Bluetooth zu übertragen. Der Weg von einem einfachen Feuchtigkeitssensor zur umfassenden Smart-Home Automatisierung ist weniger kompliziert, als du denkst 🙂

🤞 1x pro Monat unsere News, Tipps und Tutorials gebündelt direkt in dein Postfach!

Wir senden keinen Spam! Erfahre mehr in unserer Datenschutzerklärung.


Kommentare

Eine Antwort zu „Arduino Sensordaten via Bluetooth LE übertragen.“

  1. Vielen Dank für die Arbeit die Sie uns hier zu Verfügung stellen!
    Ich bin jetzt richtig im Tunnel und kann an nichts anderes denken. Werde diese Woche das Skript für ESP32 vorbereiten um es mittels espHome in Verbindung mit Home Assistent zu verwenden! Hoffe das ist an einem Nachmittag machbar.
    Die ArduinoBLE Bibliothek bietet eine Implementierung der Bluetooth Low Energy-Unterstützung für den ESP32 da sehe ich keine Probleme!
    Haben Sie schon ihr Skript in Verbindung eines ESP32 verwendet?
    Liebe Grüße

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.