/*I referred BLE notify from the sketch example of ESP32 BLE Arduino.*/ #include "BLEDevice.h" #include "BLE2902.h" BLECharacteristic *pCharacteristic; bool deviceConnected = false; char val; //Get your UUID from Online UUID Generator. //https://www.uuidgenerator.net/version4 #define SERVICE_UUID "********-****-****-*****-************" #define CHARACTERISTIC_UUID "********-****-****-*****-************" #define DEVICE_NAME "esp32_BLE" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; } }; void setup() { Serial.begin(115200); pinMode(12, INPUT_PULLUP); //F pinMode(13, INPUT_PULLUP); //B pinMode(14, INPUT_PULLUP); //L pinMode(25, INPUT_PULLUP); //R BLEDevice::init(DEVICE_NAME); BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); BLEService *pService = pServer->createService(SERVICE_UUID); pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID, BLECharacteristic::PROPERTY_READ | BLECharacteristic::PROPERTY_WRITE | BLECharacteristic::PROPERTY_NOTIFY | BLECharacteristic::PROPERTY_INDICATE ); pCharacteristic->addDescriptor(new BLE2902()); pService->start(); pServer->getAdvertising()->start(); Serial.println("Waiting a client connection to notify..."); } void loop() { int val_F = digitalRead(12);//F if (val_F == 0) { val = 'F'; } int val_B = digitalRead(13);//B if (val_B == 0) { val = 'B'; } int val_L = digitalRead(14);//L if (val_L == 0) { val = 'L'; } int val_R = digitalRead(25);//R if (val_R == 0) { val = 'R'; } int val_S; if ((val_L & val_R & val_F & val_B)==1) { val = 'S'; } if (deviceConnected) { Serial.printf("*** NOTIFY: %d ***\n", val); char buffer[10]; sprintf(buffer, "%d", val ); pCharacteristic->setValue(buffer); pCharacteristic->notify(); } delay(200); } |