#include #include #include #include #define LED_PIN 2 // LED blinkt bei Match BLEScan* pBLEScan; BLEAdvertisedDevice* myDevice = nullptr; bool deviceFound = false; // UUIDs müssen mit Nicla Peripheral übereinstimmen const char* SERVICE_UUID = "12345678-1234-1234-1234-1234567890AB"; const char* CHAR_UUID = "87654321-4321-4321-4321-BA0987654321"; class MyAdvertisedDeviceCallbacks: public BLEAdvertisedDeviceCallbacks { void onResult(BLEAdvertisedDevice advertisedDevice) { if (advertisedDevice.getName() == "NiclaVoiceBLE") { myDevice = new BLEAdvertisedDevice(advertisedDevice); deviceFound = true; Serial.println("Found Nicla Peripheral!"); pBLEScan->stop(); } } }; void setup() { pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LOW); Serial.begin(115200); Serial.println("ESP32 BLE Central Starting..."); BLEDevice::init(""); pBLEScan = BLEDevice::getScan(); pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks()); pBLEScan->setActiveScan(true); pBLEScan->start(5, false); // 5 Sekunden Scan } void loop() { if (deviceFound && myDevice != nullptr) { BLEClient* pClient = BLEDevice::createClient(); Serial.println("Connecting to Nicla..."); if (!pClient->connect(myDevice)) { Serial.println("Failed to connect!"); delete myDevice; myDevice = nullptr; deviceFound = false; pBLEScan->start(5, false); return; } Serial.println("Connected!"); BLERemoteService* pService = pClient->getService(SERVICE_UUID); if (pService == nullptr) { Serial.println("Failed to find service!"); pClient->disconnect(); delete myDevice; myDevice = nullptr; deviceFound = false; pBLEScan->start(5, false); return; } BLERemoteCharacteristic* pCharacteristic = pService->getCharacteristic(CHAR_UUID); if (pCharacteristic == nullptr) { Serial.println("Failed to find characteristic!"); pClient->disconnect(); delete myDevice; myDevice = nullptr; deviceFound = false; pBLEScan->start(5, false); return; } Serial.println("Reading matches..."); while (pClient->isConnected()) { if (pCharacteristic->canRead()) { String val = pCharacteristic->readValue(); if (val.length() > 0) { Serial.print("Match byte: 0x"); Serial.println((uint8_t)val[0], HEX); // LED blinkt bei Empfang digitalWrite(LED_PIN, HIGH); delay(150); digitalWrite(LED_PIN, LOW); } } delay(50); // kleiner Delay, um CPU zu schonen } Serial.println("Disconnected from Nicla."); delete myDevice; myDevice = nullptr; deviceFound = false; pBLEScan->start(5, false); } }