#include #include #include #include #include BLEServer* pServer = NULL; BLECharacteristic* pCharacteristic = NULL; bool deviceConnected = false; int contador = 0; // UUIDs únicos (puedes generar los tuyos en uuidgenerator.net) #define SERVICE_UUID "794ff2e6-d4ac-4b80-b97e-dad2d577f17b" #define CHARACTERISTIC_UUID "26dc4777-a57b-4caa-8a55-2be55a5663c6" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; // Reiniciar publicidad para permitir reconexión pServer->getAdvertising()->start(); } }; void setup() { Serial.begin(115200); // Inicializar dispositivo BLEDevice::init("Debian BLE Server"); // Crear Servidor BLE pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); // Crear Servicio BLEService *pService = pServer->createService(SERVICE_UUID); // Crear Característica con Notificación pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_NOTIFY ); // Descriptor necesario para notificaciones (Client Characteristic Configuration) pCharacteristic->addDescriptor(new BLE2902()); pService->start(); // Iniciar Publicidad (Advertising) BLEAdvertising *pAdvertising = BLEDevice::getAdvertising(); pAdvertising->addServiceUUID(SERVICE_UUID); pAdvertising->setScanResponse(true); pAdvertising->start(); Serial.print("Dirección del dispositivo: "); Serial.println(BLEDevice::getAddress().toString().c_str()); Serial.println("Esperando conexión BLE..."); } void loop() { if (deviceConnected) { if (contador <= 100) { char str[10]; itoa(contador, str, 10); // Convertir int a string pCharacteristic->setValue(str); pCharacteristic->notify(); // Enviar valor a la PC Serial.printf("Enviando: %d\n", contador); contador++; } else { contador = 0; // Reiniciar si llega a 100 } delay(1000); // Enviar cada segundo } }