How to Remote Control LED via BLE of ESP32 Posted on 2019-05-07 | Edited on 2024-12-25 | In IoT | Comments: Requirements Turn on/off LED via Bluetooth Software12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394#include <BLEDevice.h>#include <BLEServer.h>#include <BLEUtils.h>#include <BLE2902.h> BLECharacteristic *pCharacteristic;bool deviceConnected = false;float txValue = 0;const int LED = 2; // Could be different depending on the dev board. I used the DOIT ESP32 dev board. #define SERVICE_UUID "6E400001-B5A3-F393-E0A9-E50E24DCCA9E" // UART service UUID#define CHARACTERISTIC_UUID_RX "6E400002-B5A3-F393-E0A9-E50E24DCCA9E"#define CHARACTERISTIC_UUID_TX "6E400003-B5A3-F393-E0A9-E50E24DCCA9E" class MyServerCallbacks: public BLEServerCallbacks { void onConnect(BLEServer* pServer) { deviceConnected = true; }; void onDisconnect(BLEServer* pServer) { deviceConnected = false; }}; class MyCallbacks: public BLECharacteristicCallbacks { void onWrite(BLECharacteristic *pCharacteristic) { std::string rxValue = pCharacteristic->getValue(); if (rxValue.length() > 0) { Serial.println("*********"); Serial.print("Received Value: "); for (int i = 0; i < rxValue.length(); i++) { Serial.print(rxValue[i]); } Serial.println(); // Do stuff based on the command received from the app if (rxValue == "ON" || rxValue == "On" || rxValue == "on") { Serial.print("Turning ON!"); digitalWrite(LED, HIGH); } else if (rxValue == "OFF" || rxValue == "Off" || rxValue == "off") { Serial.print("Turning OFF!"); digitalWrite(LED, LOW); } Serial.println(); Serial.println("*********"); } }};void setup() { Serial.begin(115200); pinMode(LED, OUTPUT); // Create the BLE Device BLEDevice::init("ESP32_BLE_LED"); // Give it a name // Create the BLE Server BLEServer *pServer = BLEDevice::createServer(); pServer->setCallbacks(new MyServerCallbacks()); // Create the BLE Service BLEService *pService = pServer->createService(SERVICE_UUID); // Create a BLE Characteristic pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_TX, BLECharacteristic::PROPERTY_NOTIFY ); pCharacteristic->addDescriptor(new BLE2902()); BLECharacteristic *pCharacteristic = pService->createCharacteristic( CHARACTERISTIC_UUID_RX, BLECharacteristic::PROPERTY_WRITE ); pCharacteristic->setCallbacks(new MyCallbacks()); // Start the service pService->start(); // Start advertising pServer->getAdvertising()->start(); Serial.println("Waiting a client connection to notify...");} void loop() { if (deviceConnected) { pCharacteristic->setValue("Hello, this is a led test."); pCharacteristic->notify(); // Send the value to the app! } delay(1000);} Test Download nRF Connect from Goggle Paly ,Apple Store or github. Open the App and scan Bluetooth devices. Connect to “ESP32_BLE_LED” and send “on” or “off” to ESP.If you can’t open the above video, please click this link.