10.- From App ON/OFF 3 LEDs. Get status of the LEDs.
p110i_esp32_ble_3LED.aia (185.7 KB)
- We can use independent LEDs, in my example I have used a tricolor LED.
- Every time ON/OFF a LED we get a response.
- When we press “Check status” we obtain the status of the three LEDs.
// Juan Antonio Villalpando.
// http://kio4.com/arduino/160_Wemos_ESP32_BLE.htm
#include <BLEDevice.h>
#include <BLEUtils.h>
#include <BLEServer.h>
String valor;
#define LED12 12 // LED pin 12
#define LED14 14 // LED pin 14
#define LED27 27 // LED pin 27
String estado ="";
#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 = valor + value[i];
}
Serial.println(valor);
if (valor == "on12") {digitalWrite(LED12,HIGH); pCharacteristic->setValue("LED12 ON");}
if (valor == "off12"){digitalWrite(LED12,LOW); pCharacteristic->setValue("LED12 OFF");}
if (valor == "on14") {digitalWrite(LED14,HIGH); pCharacteristic->setValue("LED14 ON");}
if (valor == "off14"){digitalWrite(LED14,LOW); pCharacteristic->setValue("LED14 OFF");}
if (valor == "on27") {digitalWrite(LED27,HIGH); pCharacteristic->setValue("LED27 ON");}
if (valor == "off27"){digitalWrite(LED27,LOW); pCharacteristic->setValue("LED27 OFF");}
if (valor == "check"){
estado ="";
if (digitalRead(LED12) == HIGH) {estado = "LED12 ON,";} else {estado = "LED12 OFF,";}
if (digitalRead(LED14) == HIGH) {estado = estado + "LED14 ON,";} else {estado = estado + "LED14 OFF,";}
if (digitalRead(LED27) == HIGH) {estado = estado + "LED27 ON";} else {estado = estado + "LED27 OFF";}
pCharacteristic->setValue(estado.c_str()); // Return status
}
}
}
};
void setup() {
pinMode(LED12, OUTPUT);
pinMode(LED14, OUTPUT);
pinMode(LED27, OUTPUT);
Serial.begin(115200);
BLEDevice::init("MyESP32");
BLEServer *pServer = BLEDevice::createServer();
BLEService *pService = pServer->createService(SERVICE_UUID);
BLECharacteristic *pCharacteristic = pService->createCharacteristic(
CHARACTERISTIC_UUID,
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE
);
pCharacteristic->setCallbacks(new MyCallbacks());
pCharacteristic->setValue("Iniciado.");
pService->start();
BLEAdvertising *pAdvertising = pServer->getAdvertising();
pAdvertising->start();
}
void loop() {
//
}