Advertisement
Guest User

esp32 BLE temperature notification

a guest
Jul 20th, 2020
581
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.26 KB | None | 0 0
  1. #include <OneWire.h>
  2. #include <DallasTemperature.h>
  3.  
  4. #include <BLEDevice.h>
  5. #include <BLEServer.h>
  6. #include <BLEUtils.h>
  7. #include <BLE2902.h>
  8.  
  9. // GPIO where the DS18B20 is connected to
  10. const int oneWireBus = 22;
  11.  
  12. // Setup a oneWire instance to communicate with any OneWire devices
  13. OneWire oneWire(oneWireBus);
  14.  
  15. // Pass our oneWire reference to Dallas Temperature sensor
  16. DallasTemperature sensors(&oneWire);
  17.  
  18. BLECharacteristic *characteristicTX; //através desse objeto iremos enviar dados para o client
  19.  
  20.  
  21. bool deviceConnected = false; //controle de dispositivo conectado
  22.  
  23. const int LED = 2; //LED interno do ESP32 (esse pino pode variar de placa para placa) // Could be different depending on the dev board. I used the DOIT ESP32 dev board.
  24. const int BUZZER = 23; //pino d BUZZER
  25.  
  26. // See the following for generating UUIDs:
  27. // https://www.uuidgenerator.net/
  28.  
  29. #define SERVICE_UUID           "ab0828b1-198e-4351-b779-901fa0e0371e" // UART service UUID
  30. #define CHARACTERISTIC_UUID_RX "4ac8a682-9736-4e5d-932b-e9b31405049c"
  31. #define CHARACTERISTIC_UUID_TX "0972EF8C-7613-4075-AD52-756F33D4DA91"
  32.  
  33.  
  34. //callback para receber os eventos de conexão de dispositivos
  35. class ServerCallbacks: public BLEServerCallbacks {
  36.     void onConnect(BLEServer* pServer) {
  37.       deviceConnected = true;
  38.     };
  39.  
  40.     void onDisconnect(BLEServer* pServer) {
  41.       deviceConnected = false;
  42.     }
  43. };
  44.  
  45. //callback  para envendos das características
  46. class CharacteristicCallbacks: public BLECharacteristicCallbacks {
  47.     void onWrite(BLECharacteristic *characteristic) {
  48.       //retorna ponteiro para o registrador contendo o valor atual da caracteristica
  49.       std::string rxValue = characteristic->getValue();
  50.       //verifica se existe dados (tamanho maior que zero)
  51.       if (rxValue.length() > 0) {
  52.         Serial.println("*********");
  53.         Serial.print("Received Value: ");
  54.  
  55.         for (int i = 0; i < rxValue.length(); i++) {
  56.           Serial.print(rxValue[i]);
  57.         }
  58.  
  59.         Serial.println();
  60.  
  61.         // Do stuff based on the command received
  62.         if (rxValue.find("L1") != -1) {
  63.           Serial.print("Turning LED ON!");
  64.           digitalWrite(LED, HIGH);
  65.         }
  66.         else if (rxValue.find("L0") != -1) {
  67.           Serial.print("Turning LED OFF!");
  68.           digitalWrite(LED, LOW);
  69.         }
  70.         // Do stuff based on the command received from the app
  71.         else if (rxValue.find("B1") != -1) {
  72.           Serial.print("Turning Buzzer ON!");
  73.           digitalWrite(BUZZER, HIGH);
  74.         }
  75.         else if (rxValue.find("B0") != -1) {
  76.           Serial.print("Turning Buzzer OFF!");
  77.           digitalWrite(BUZZER, LOW);
  78.         }
  79.  
  80.         Serial.println();
  81.         Serial.println("*********");
  82.       }
  83.     }
  84. };
  85.  
  86. void setup() {
  87.   Serial.begin(115200);
  88.  
  89.   pinMode(LED, OUTPUT);
  90.   pinMode(BUZZER, OUTPUT);
  91.  
  92.   // Start the DS18B20 sensor
  93.   sensors.begin();
  94.  
  95.   // Create the BLE Device
  96.   BLEDevice::init("ESP32-BLE"); // nome do dispositivo bluetooth
  97.   // Create the BLE Server
  98.   BLEServer *server = BLEDevice::createServer(); //cria um BLE server
  99.   server->setCallbacks(new ServerCallbacks()); //seta o callback do server
  100.   // Create the BLE Service
  101.   BLEService *service = server->createService(SERVICE_UUID);
  102.   // Create a BLE Characteristic para envio de dados
  103.   characteristicTX = service->createCharacteristic(
  104.                       CHARACTERISTIC_UUID_TX,
  105.                       BLECharacteristic::PROPERTY_NOTIFY
  106.                     );
  107.                      
  108.   characteristicTX->addDescriptor(new BLE2902());
  109.  
  110.   // Create a BLE Characteristic para recebimento de dados
  111.   BLECharacteristic *characteristic = service->createCharacteristic(
  112.                                          CHARACTERISTIC_UUID_RX,
  113.                                          BLECharacteristic::PROPERTY_WRITE
  114.                                        );
  115.  
  116.   characteristic->setCallbacks(new CharacteristicCallbacks());
  117.   // Start the service
  118.   service->start();
  119.   // Start advertising (descoberta do ESP32)
  120.   server->getAdvertising()->start();
  121.  
  122.   //Inicializa sensor de temperatura infravermelho            
  123.  
  124.   Serial.println("Waiting a client connection to notify...");
  125.  
  126. }
  127.  
  128. void loop() {
  129.      //se existe algum dispositivo conectado
  130.     if (deviceConnected) {
  131.       //chamamos o método "read" do sensor para realizar a leitura da temperatura
  132.       //read retornará 1 caso consiga realizar a leitura, ou 0 caso contrário
  133.      
  134.            
  135.           // Let's convert the value to a char array:
  136.           char txString[8]; // make sure this is big enuffz
  137.           sensors.requestTemperatures();
  138.           float temperatureC = sensors.getTempCByIndex(0);
  139.           dtostrf(temperatureC, 1, 2, txString); // float_val, min_width, digits_after_decimal, char_buffer
  140.  
  141.           characteristicTX->setValue(txString); //seta o valor que a caracteristica notificará (enviar)      
  142.           characteristicTX->notify(); // Envia o valor para o smartphone
  143.  
  144.           Serial.print("*** Sent Value: ");
  145.           Serial.print(txString);
  146.           Serial.println(" ***");
  147.      
  148.  
  149. /*
  150.     delay(1000);
  151.  
  152.  
  153.  
  154.     characteristicTX2->setValue("Hello!"); // Sending a test message
  155.     characteristicTX2->notify(); // Send the value to the app!*/
  156.  
  157.   }
  158.   delay(1000);
  159.  
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement