#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("OverlandController"); NimBLEDevice::setPower(ESP_PWR_LVL_P9); NimBLEAddress address(std::string(TARGET_ADDRESS), BLE_ADDR_PUBLIC); 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..."); const std::vector& services = client->getServices(true); Serial.print("Service count: "); Serial.println(services.size()); for (NimBLERemoteService* service : services) { Serial.print("Service UUID: "); Serial.println(service->getUUID().toString().c_str()); const std::vector& chars = service->getCharacteristics(true); for (NimBLERemoteCharacteristic* 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() { }