63 lines
2.5 KiB
C++
63 lines
2.5 KiB
C++
/*********
|
|
Rui Santos
|
|
Complete instructions at https://RandomNerdTutorials.com/esp32-ble-server-client/
|
|
Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files.
|
|
The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.
|
|
*********/
|
|
|
|
#include "BLEDevice.h"
|
|
#include <Wire.h>
|
|
|
|
//BLE Server name (the other ESP32 name running the server sketch)
|
|
#define bleServerName "YourESP32"
|
|
|
|
/* UUID's of the service, characteristic that we want to read*/
|
|
// BLE Service
|
|
static BLEUUID bmeServiceUUID("91bad492-b950-4226-aa2b-4ede9fa42f59");
|
|
|
|
//Temperature Celsius Characteristic
|
|
static BLEUUID temperatureCharacteristicUUID("cba1d466-344c-4be3-ab3f-189f80dd7518");
|
|
|
|
//Flags stating if should begin connecting and if the connection is up
|
|
static boolean doConnect = false;
|
|
static boolean connected = false;
|
|
|
|
//Address of the peripheral device. Address will be found during scanning...
|
|
static BLEAddress* pServerAddress;
|
|
|
|
//Characteristicd that we want to read
|
|
static BLERemoteCharacteristic* temperatureCharacteristic;
|
|
|
|
//Activate notify
|
|
const uint8_t notificationOn[] = { 0x1, 0x0 };
|
|
const uint8_t notificationOff[] = { 0x0, 0x0 };
|
|
|
|
//Variables to store temperature and humidity
|
|
char* temperatureChar;
|
|
|
|
//Flags to check whether new temperature and humidity readings are available
|
|
boolean newTemperature = false;
|
|
boolean newHumidity = false;
|
|
|
|
//Connect to the BLE Server that has the name, Service, and Characteristics
|
|
bool connectToServer(BLEAddress pAddress) {
|
|
BLEClient* pClient = BLEDevice::createClient();
|
|
|
|
// If the flag "doConnect" is true then we have scanned for and found the desired
|
|
// BLE Server with which we wish to connect. Now we connect to it. Once we are
|
|
// connected we set the connected flag to be true.
|
|
if (doConnect == true) {
|
|
if (connectToServer(*pServerAddress)) {
|
|
Serial.println("We are now connected to the BLE Server.");
|
|
//Activate the Notify property of each Characteristic
|
|
temperatureCharacteristic->getDescriptor(BLEUUID((uint16_t)0x2902))->writeValue((uint8_t*)notificationOn, 2, true);
|
|
humidityCharacteristic->getDescriptor(BLEUUID((uint16_t)0x2902))->writeValue((uint8_t*)notificationOn, 2, true);
|
|
connected = true;
|
|
} else {
|
|
Serial.println("We have failed to connect to the server; Restart your device to scan for nearby BLE server again.");
|
|
}
|
|
doConnect = false;
|
|
}
|
|
delay(1000); // Delay a second between loops.
|
|
}
|