19.- Through a Slider the app sends data to ESP32. ESP32 sends two random numbers from time to time to the app. Notify.
p110i_esp32_ble_notifica_Desliza.aia (197.6 KB)
- This is a similar example to the previous one, but @Xolo has improved it with the help of ChatGPT.
- Tested with Android 9 and Android 13.
- MIT Companion and Installed.
- ESP-WROOM-32, ESP32-WROOM-32 and ESP32-WROOM-32D
- BLE Extension Version: 20230728
-
By moving the Slider in the App, ESP32 receives the number and displays it on the Serial Monitor.
-
ESP32 creates two random numbers at random times, Notifies (sends) them to the App.
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
String valor;
long previousMillis_BLE1 = 0;
int interval_BLE1 = 1000;
BLEServer* pServer = NULL;
BLECharacteristic* pCharacteristic = NULL;
#define SERVICE_UUID "4fafc201-1fb5-459e-8fcc-c5c9c331914b"
#define CHARACTERISTIC_UUID "beb5483e-36e1-4688-b7f5-ea07361b26a8"
class MyCallbacks: public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
valor = "";
for (int i = 0; i < value.length(); i++) {
valor += value[i];
}
Serial.println("*********");
Serial.print("Received value: ");
Serial.println(valor);
}
}
};
class MyServerCallbacks: public BLEServerCallbacks {
void onConnect(BLEServer* pServer) {
Serial.println("Client Connected");
}
void onDisconnect(BLEServer* pServer) {
Serial.println("Client Disconnected");
pServer->startAdvertising(); // restart advertising
}
};
void setup() {
Serial.begin(115200);
// Initialize the BLE device
BLEDevice::init("MyESP32_BLE1");
// Create the BLE Server
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->setCallbacks(new MyCallbacks());
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
unsigned long currentMillis = millis();
if(currentMillis - previousMillis_BLE1 > interval_BLE1) {
float TemperatureBLE1 = random(10,60000)/1000.0; // simulate temperature reading with 3 decimals
float HumidityBLE1 = random(5,99000)/1000.0; // simulate humidity reading with 3 decimals
String temperatureBLE1 = String(TemperatureBLE1,3);
String humidityBLE1 = String(HumidityBLE1,3);
String tem_hum_BLE1 = temperatureBLE1 + "," + humidityBLE1;
pCharacteristic->setValue(tem_hum_BLE1.c_str()); // Notify connected client
pCharacteristic->notify();
previousMillis_BLE1 = currentMillis;
interval_BLE1 = random(500,1000);
}
}