#include <BLEDevice.h>
#include <BLEServer.h>
#include <BLEUtils.h>
#include <BLE2902.h>
#include <ESP32Servo.h>
#include <EEPROM.h>
Servo myservo;
const int servoPin = 5; // Servo motor pin
const int openButtonPin = 4; // Kapı açma butonu pin
const int closeButtonPin = 2; // Kapı kapatma butonu pin
BLECharacteristic *pCharacteristic;
BLEServer *pServer;
bool doorIsOpen = false;
deviceConnected = false; // kopma sorunu için eklendi
void performDoorAction(int angle, int duration) {
myservo.attach(servoPin);
myservo.write(angle);
delay(duration);
myservo.detach();
}
void openDoor() {
Serial.println("Kapı açma işlemi başlatılıyor...");
performDoorAction(180, 3000);
performDoorAction(97, 2000);
performDoorAction(0, 500);
doorIsOpen = true;
Serial.println("Kapı açma işlemi tamamlandı.");
}
void closeDoor() {
Serial.println("Kapı kapatma işlemi başlatılıyor...");
performDoorAction(0, 3000);
doorIsOpen = false;
Serial.println("Kapı kapatma işlemi tamamlandı.");
}
class MyServerCallbacks : public BLEServerCallbacks {
void onConnect(BLEServer *pServer) {
deviceConnected = true; // kopma sorunu için eklendi
Serial.println("Cihaz bağlandı");
// Cihaz bağlandığında kapının durumunu kontrol et
if (!doorIsOpen) {
Serial.println("Kapı kilitli. Otomatik olarak '1234' mesajı gönderiliyor...");
// "1234" mesajını otomatik olarak gönder
pCharacteristic->setValue("1234");
pCharacteristic->notify();
Serial.println("Otomatik '1234' mesajı gönderildi.");
// Kapıyı aç
openDoor();
Serial.println("Kapı açık");
} else {
Serial.println("Kapı zaten açık. İşlem yapılmayacak.");
// Buraya başka bir işlem ekleyebilirsiniz.
}
}
void onDisconnect(BLEServer *pServer) {
deviceConnected = false; // kopma sorunu için eklendi
Serial.println("Cihaz bağlantısı kesildi");
pServer->getAdvertising()->start(); // kopma sorunu için eklendi
}
};
class MyCharacteristicCallbacks : public BLECharacteristicCallbacks {
void onWrite(BLECharacteristic *pCharacteristic) {
std::string value = pCharacteristic->getValue();
if (value.length() > 0) {
Serial.println("Gelen Mesaj: ");
for (int i = 0; i < value.length(); i++)
Serial.print(value[i]);
Serial.println();
if (value == "1234") {
if (!doorIsOpen) {
openDoor();
Serial.println("Kapı açık");
} else {
Serial.println("Kapı zaten açık. İşlem yapılmadı.");
}
}
}
}
};
void setup() {
myservo.attach(servoPin);
pinMode(openButtonPin, INPUT_PULLUP);
pinMode(closeButtonPin, INPUT_PULLUP);
Serial.begin(115200);
delay(1000);
BLEDevice::init("ESP32_BT");
pServer = BLEDevice::createServer();
pServer->setCallbacks(new MyServerCallbacks());
BLEService *pService = pServer->createService(BLEUUID((uint16_t)0x180F));
pCharacteristic = pService->createCharacteristic(
BLEUUID((uint16_t)0x2A19),
BLECharacteristic::PROPERTY_READ |
BLECharacteristic::PROPERTY_WRITE |
BLECharacteristic::PROPERTY_NOTIFY);
pCharacteristic->addDescriptor(new BLE2902());
pCharacteristic->setCallbacks(new MyCharacteristicCallbacks());
pService->start();
BLEAdvertising *pAdvertising = BLEDevice::getAdvertising();
pAdvertising->addServiceUUID(BLEUUID((uint16_t)0x180F));
pAdvertising->setScanResponse(true);
pAdvertising->setMinPreferred(0x06); // functions that help with iPhone
pAdvertising->setMinPreferred(0x12);
BLEDevice::startAdvertising();
}
void loop() {
if (digitalRead(openButtonPin) == LOW && !doorIsOpen) {
openDoor();
Serial.println("Kapı açık");
} else if (digitalRead(closeButtonPin) == LOW && doorIsOpen) {
closeDoor();
Serial.println("İşlem tamamlandı. Kapı kapalı");
}
delay(3000);
}