summaryrefslogtreecommitdiff
path: root/examples/Arduino/BLE_notify/BLE_notify.ino
diff options
context:
space:
mode:
Diffstat (limited to 'examples/Arduino/BLE_notify/BLE_notify.ino')
-rw-r--r--examples/Arduino/BLE_notify/BLE_notify.ino93
1 files changed, 93 insertions, 0 deletions
diff --git a/examples/Arduino/BLE_notify/BLE_notify.ino b/examples/Arduino/BLE_notify/BLE_notify.ino
new file mode 100644
index 0000000..44506c2
--- /dev/null
+++ b/examples/Arduino/BLE_notify/BLE_notify.ino
@@ -0,0 +1,93 @@
+/*
+ Video: https://www.youtube.com/watch?v=oCMOYS71NIU
+ Based on Neil Kolban example for IDF: https://github.com/nkolban/esp32-snippets/blob/master/cpp_utils/tests/BLE%20Tests/SampleNotify.cpp
+ Ported to Arduino ESP32 by Evandro Copercini
+
+ Create a BLE server that, once we receive a connection, will send periodic notifications.
+ The service advertises itself as: 4fafc201-1fb5-459e-8fcc-c5c9c331914b
+ And has a characteristic of: beb5483e-36e1-4688-b7f5-ea07361b26a8
+
+ The design of creating the BLE server is:
+ 1. Create a BLE Server
+ 2. Create a BLE Service
+ 3. Create a BLE Characteristic on the Service
+ 4. Create a BLE Descriptor on the characteristic
+ 5. Start the service.
+ 6. Start advertising.
+
+ A connect hander associated with the server starts a background task that performs notification
+ every couple of seconds.
+*/
+#include <BLEDevice.h>
+#include <BLEServer.h>
+#include <BLEUtils.h>
+#include <BLE2902.h>
+
+BLECharacteristic *pCharacteristic;
+bool deviceConnected = false;
+uint8_t value = 0;
+
+// See the following for generating UUIDs:
+// https://www.uuidgenerator.net/
+
+#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
+#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
+
+
+class MyServerCallbacks: public BLEServerCallbacks {
+ void onConnect(BLEServer* pServer) {
+ deviceConnected = true;
+ };
+
+ void onDisconnect(BLEServer* pServer) {
+ deviceConnected = false;
+ }
+};
+
+
+
+void setup() {
+ Serial.begin(115200);
+
+ // Create the BLE Device
+ BLEDevice::init("MyESP32");
+
+ // Create the BLE Server
+ BLEServer *pServer = new BLEServer();
+ pServer->setCallbacks(new MyServerCallbacks());
+
+ // Create the BLE Service
+ BLEService *pService = pServer->createService(SERVICE_UUID);
+
+ // Create a BLE Characteristic
+ pCharacteristic = pService->createCharacteristic(
+ CHARACTERISTIC_UUID,
+ BLECharacteristic::PROPERTY_READ |
+ BLECharacteristic::PROPERTY_WRITE |
+ BLECharacteristic::PROPERTY_NOTIFY |
+ BLECharacteristic::PROPERTY_INDICATE
+ );
+
+ // https://www.bluetooth.com/specifications/gatt/viewer?attributeXmlFile=org.bluetooth.descriptor.gatt.client_characteristic_configuration.xml
+ // Create a BLE Descriptor
+ pCharacteristic->addDescriptor(new BLE2902());
+
+ // Start the service
+ pService->start();
+
+ // Start advertising
+ pServer->getAdvertising()->start();
+ Serial.println("Waiting a client connection to notify...");
+}
+
+void loop() {
+
+ if (deviceConnected) {
+ Serial.printf("*** NOTIFY: %d ***\n", value);
+ pCharacteristic->setValue(&value, 1);
+ pCharacteristic->notify();
+ //pCharacteristic->indicate();
+ value++;
+ }
+ delay(2000);
+} \ No newline at end of file