Praxis

 

Praxis 12: Erstellen eines BLE-Beacons

 

Benötigtes Material:

  • ESP32 Dev Modul mit USB-Kabel

Das ESP32-Modul enthält neben dem Mikrocontroller auch ein WLAN- und Bluetooth Modul. Mit dem Bluetooth-Modul kann man zum Beispiel einen Beacon realisieren, der mit entsprechenden Scannern (Smartphones mit entsprechenden Apps oder ein entsprechend programmierter ESP32 -> Praxis 13) gelesen werden kann.

#include <Arduino.h>
/* -------------------------------------
    Praxis 12
    BLE-Beacon mit dem ESP32
  -----------------------------------*/

#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>

// Wichtig!
// Die UUID unbedingt durch "eigene" UUID von der folgenden Webseite ersetzen:
// https://www.uuidgenerator.net/

#define SERVICE_UUID        "3f38b78f-90db-4246-8088-8ac74471b8d4"
#define CHARACTERISTIC_UUID "9c5c7f98-b6f8-4630-863e-6a05b2836be1"

void setup() {
  Serial.begin(115200);
  Serial.println("BLE-Service starten!");

  BLEDevice::init("Labor-Token 1");
  BLEServer *pServer = BLEDevice::createServer();
  BLEService *pService = pServer->createService(SERVICE_UUID);
  BLECharacteristic *pCharacteristic = pService->createCharacteristic(
                                         CHARACTERISTIC_UUID,
                                         BLECharacteristic::PROPERTY_READ |
                                         BLECharacteristic::PROPERTY_WRITE
                                       );

  pCharacteristic->setValue("Herzlich willkommen im IT-Labor!");
  pService->start();
  BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
  pAdvertising->addServiceUUID(SERVICE_UUID);
  pAdvertising->setScanResponse(true);
  pAdvertising->setMinPreferred(0x06);
  pAdvertising->setMinPreferred(0x12);
  BLEDevice::startAdvertising();
  Serial.println("Server eingerichtet!");
}

void loop() {
  delay(2000);
}

Hier steckt das meiste in den Bibliotheken, diese stellen die benötigten Objekte BLEDevice, BLEService und BLEServer bereit. Der Name unter dem der Beacon später sichtbar ist, wird beim BLEDevice::init mitgegeben. Da die Charakteristik (Zeile 25 – 29) auch das Schreiben zulässt („PROPERTY_WRITE“), kann mit den Apps der Wert geändert werden.

Aufgaben

  1. Geben Sie den Sketch in die IDE ein.
  2. Generieren Sie sich auf der Seite https://www.uuidgenerator.net/ UUIDs und ersetzen Sie die in den betreffenden Zeilen (15 und 16) Ihres Sketches.
  3. Wählen Sie einen individuellen Namen für Ihren Beacon und tragen diesen hinter BLEDevice::init( (Zeile 22) ein. Ändern Sie ggf. auch den Text hinter pCharacteristic->setValue( (Zeile 31).
  4. Kompilieren und Übertragen Sie das Programm auf den ESP32.
  5. Sollte es zu Problemen beim Kompilieren geben, müssen ggf. noch fehlende Bibliotheken zur IDE hinzugefügt werden.
  6. Prüfen Sie im seriellen Monitor oder Terminal, dass der Server eingerichtet ist.
    Achten Sie auf die richtige Baudrate!
  7. Laden Sie eine Scanner-App für Ihr Smartphone und suchen Sie „Ihren“ Beacon.
    Mögliche Apps sind:
                
    Der linke QR-Code ist für Android- (PlayStore), der rechte für Apple-Smartphones.
  8. Versuchen Sie den Wert Ihres Beacons zu ändern.