diff --git a/BLE_server_values/BLE_server_values.ino b/BLE_server_values/BLE_server_values.ino new file mode 100644 index 0000000..be6b80e --- /dev/null +++ b/BLE_server_values/BLE_server_values.ino @@ -0,0 +1,85 @@ +#include + +#define SERVICE_UUID "12345678-1234-5678-1234-56789abcdef0" +#define CHARACTERISTIC_UUID "87654321-4321-6789-4321-fedcba987654" + +NimBLEServer* pServer = nullptr; +NimBLEService* pService = nullptr; +NimBLECharacteristic* pCharacteristic = nullptr; + +bool deviceConnected = false; + +class MyServerCallbacks : public NimBLEServerCallbacks { + void onConnect(NimBLEServer* pServer) { + deviceConnected = true; + Serial.println("Client Connected!"); + } + + void onDisconnect(NimBLEServer* pServer) { + deviceConnected = false; + Serial.println("Client Disconnected!"); + } +}; + +class MyCharacteristicCallbacks : public NimBLECharacteristicCallbacks { + void onRead(NimBLECharacteristic* pCharacteristic) { + Serial.println("Read request received!"); + } + + void onWrite(NimBLECharacteristic* pCharacteristic) { + Serial.println("Write request received!"); + } + + void onNotify(NimBLECharacteristic* pCharacteristic) { + Serial.println("Notify triggered!"); + } +}; + +void setup() { + Serial.begin(115200); + delay(1000); + + Serial.println("Initializing BLE Server..."); + + // Initialize BLE + NimBLEDevice::init("BLE_Server"); + + pServer = NimBLEDevice::createServer(); + pServer->setCallbacks(new MyServerCallbacks()); + + // Create a service + pService = pServer->createService(SERVICE_UUID); + + // Create a characteristic with notify + pCharacteristic = pService->createCharacteristic(CHARACTERISTIC_UUID, + NIMBLE_PROPERTY::READ | NIMBLE_PROPERTY::WRITE | NIMBLE_PROPERTY::NOTIFY); + + pCharacteristic->setCallbacks(new MyCharacteristicCallbacks()); + + // Start the service + pService->start(); + + // Advertise the service + NimBLEAdvertising* pAdvertising = NimBLEDevice::getAdvertising(); + pAdvertising->addServiceUUID(SERVICE_UUID); + pAdvertising->start(); + Serial.println("Advertising started..."); +} + +void loop() { + // Send notifications every second if a client is connected + uint16_t values[4] = { 123, 456, 789, 1011}; + values[0] = 999; + values[1] = analogRead(A0); + values[2] = analogRead(A1); + values[3] = analogRead(A2); + + // Check if the device is connected and send notifications + //if (deviceConnected) { + pCharacteristic->setValue((uint8_t*)values, sizeof(values)); // Send data + pCharacteristic->notify(); // Notify client + Serial.println("Sent data to client"); + //} + + //delay(1000); // Update every second +}