79 lines
2.3 KiB
C++
79 lines
2.3 KiB
C++
#include <Arduino.h>
|
|
|
|
#include <BLEDevice.h>
|
|
#include <BLEUtils.h>
|
|
#include <BLEServer.h>
|
|
#include <BLE2902.h>
|
|
|
|
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
|
|
}
|
|
} |