From c9e05e01b7a4dd96e07e97a3e36fb59f1228c7bb Mon Sep 17 00:00:00 2001 From: Nick Ward Date: Thu, 4 Jun 2026 00:14:07 -0600 Subject: [PATCH] Add ESP32 BLE service discovery sketch --- .../esp32_ble_discover/esp32_ble_discover.ino | 73 +++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 tools/esp32_ble_discover/esp32_ble_discover.ino diff --git a/tools/esp32_ble_discover/esp32_ble_discover.ino b/tools/esp32_ble_discover/esp32_ble_discover.ino new file mode 100644 index 0000000..cc0f60b --- /dev/null +++ b/tools/esp32_ble_discover/esp32_ble_discover.ino @@ -0,0 +1,73 @@ +#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() { +}