31337Ghost

Untitled

Feb 3rd, 2018
472
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.26 KB | None | 0 0
  1. #include <BLEDevice.h>
  2. #include <BLEServer.h>
  3. #include <BLEUtils.h>
  4. #include <BLE2902.h>
  5. #include <BLEBeacon.h>
  6.  
  7. #define DEVICE_NAME            "ESP32"
  8. #define SERVICE_UUID           "7A0247E7-8E88-409B-A959-AB5092DDB03E"
  9. #define BEACON_UUID            "2D7A9F0C-E0E8-4CC9-A71B-A21DB2D034A1"
  10. #define BEACON_UUID_REV        "A134D0B2-1DA2-1BA7-C94C-E8E00C9F7A2D"
  11. #define CHARACTERISTIC_UUID    "82258BAA-DF72-47E8-99BC-B73D7ECD08A5"
  12.  
  13. BLEServer *pServer;
  14. BLECharacteristic *pCharacteristic;
  15. bool deviceConnected = false;
  16. uint8_t value = 0;
  17.  
  18. class MyServerCallbacks: public BLEServerCallbacks {
  19.     void onConnect(BLEServer* pServer) {
  20.       deviceConnected = true;
  21.       Serial.println("deviceConnected = true");
  22.     };
  23.  
  24.     void onDisconnect(BLEServer* pServer) {
  25.       deviceConnected = false;
  26.       Serial.println("deviceConnected = false");
  27.     }
  28. };
  29.  
  30. class MyCallbacks: public BLECharacteristicCallbacks {
  31.     void onWrite(BLECharacteristic *pCharacteristic) {
  32.       std::string rxValue = pCharacteristic->getValue();
  33.  
  34.       if (rxValue.length() > 0) {
  35.         Serial.println("*********");
  36.         Serial.print("Received Value: ");
  37.         for (int i = 0; i < rxValue.length(); i++) {
  38.           Serial.print(rxValue[i]);
  39.         }
  40.         Serial.println();
  41.         Serial.println("*********");
  42.  
  43.       }
  44.     }
  45. };
  46.  
  47.  
  48. void init_service() {
  49.   BLEAdvertising* pAdvertising;
  50.   pAdvertising = pServer->getAdvertising();
  51.   pAdvertising->stop();
  52.  
  53.   // Create the BLE Service
  54.   BLEService *pService = pServer->createService(BLEUUID(SERVICE_UUID));
  55.  
  56.   // Create a BLE Characteristic
  57.   pCharacteristic = pService->createCharacteristic(
  58.                       CHARACTERISTIC_UUID,
  59.                       BLECharacteristic::PROPERTY_READ   |
  60.                       BLECharacteristic::PROPERTY_WRITE  |
  61.                       BLECharacteristic::PROPERTY_NOTIFY
  62.                     );
  63.   pCharacteristic->setCallbacks(new MyCallbacks());
  64.   pCharacteristic->addDescriptor(new BLE2902());
  65.  
  66.   pAdvertising->addServiceUUID(BLEUUID(SERVICE_UUID));
  67.  
  68.   // Start the service
  69.   pService->start();
  70.  
  71.   pAdvertising->start();
  72. }
  73.  
  74. void init_beacon() {
  75.   BLEAdvertising* pAdvertising;
  76.   pAdvertising = pServer->getAdvertising();
  77.   pAdvertising->stop();
  78.   // iBeacon
  79.   BLEBeacon myBeacon;
  80.   myBeacon.setManufacturerId(0x4c00);
  81.   myBeacon.setMajor(5);
  82.   myBeacon.setMinor(88);
  83.   myBeacon.setSignalPower(0xc5);
  84.   myBeacon.setProximityUUID(BLEUUID(BEACON_UUID_REV));
  85.  
  86.   BLEAdvertisementData advertisementData;
  87.   advertisementData.setFlags(0x1A);
  88.   advertisementData.setManufacturerData(myBeacon.getData());
  89.   pAdvertising->setAdvertisementData(advertisementData);
  90.  
  91.   pAdvertising->start();
  92. }
  93.  
  94. void setup() {
  95.   Serial.begin(115200);
  96.   Serial.println();
  97.   Serial.println("Initializing...");
  98.   Serial.flush();
  99.  
  100.   BLEDevice::init(DEVICE_NAME);
  101.   pServer = BLEDevice::createServer();
  102.   pServer->setCallbacks(new MyServerCallbacks());
  103.  
  104.   init_service();
  105.   init_beacon();
  106.  
  107.   Serial.println("iBeacon + service defined and advertising!");
  108. }
  109.  
  110. void loop() {
  111.   if (deviceConnected) {
  112.     Serial.printf("*** NOTIFY: %d ***\n", value);
  113.     pCharacteristic->setValue(&value, 1);
  114.     pCharacteristic->notify();
  115.     //pCharacteristic->indicate();
  116.     value++;
  117.   }
  118.   delay(2000);
  119. }
Add Comment
Please, Sign In to add comment