#include static const char* TARGET_ADDRESS = "a5:c2:37:2c:05:dc"; void setup() { Serial.begin(115200); delay(1000); Serial.println(); Serial.println("=== ESP32 BLE Service Discovery ==="); Serial.print("Target: "); Serial.println(TARGET_ADDRESS); NimBLEDevice::init("XterraESP32"); NimBLEDevice::setPower(ESP_PWR_LVL_P9); NimBLEAddress address(TARGET_ADDRESS); NimBLEClient* client = NimBLEDevice::createClient(); Serial.println("Connecting..."); bool connected = client->connect(address); if (!connected) { Serial.println("Connect failed."); return; } Serial.println("Connected."); Serial.println("Discovering services..."); std::vector* services = client->getServices(true); if (!services) { Serial.println("No services found."); client->disconnect(); return; } Serial.print("Service count: "); Serial.println(services->size()); for (auto service : *services) { Serial.print("Service UUID: "); Serial.println(service->getUUID().toString().c_str()); std::vector* chars = service->getCharacteristics(true); if (!chars) { continue; } for (auto ch : *chars) { Serial.print(" Characteristic UUID: "); Serial.print(ch->getUUID().toString().c_str()); Serial.print(" props:"); if (ch->canRead()) Serial.print(" READ"); if (ch->canWrite()) Serial.print(" WRITE"); if (ch->canWriteNoResponse()) Serial.print(" WRITE_NR"); if (ch->canNotify()) Serial.print(" NOTIFY"); Serial.println(); } } client->disconnect(); Serial.println("Done."); } void loop() { }