Katılım
19 Mayıs 2024
Mesajlar
2
Beğeniler
0
Youtube'da bunun yapılabildiğini gördüm fakat benim yapmak istediğim, akıllı telefon üzerinden evin sıcaklığını görebileceğim, istediğim dereceye ayarladığımda evin sıcaklığı ayarladığım sıcaklıktan düşükse devreye girecek, o sıcaklığa geldiğinde devreden çıkacak bir sistem olmalı. İstediğim sıcaklığı da her seferinde kodlarda değişiklik yaparak değil de uygulama üzerinden ok tuşları veya slider gibi bir şeyle kontrol edebilmeliyim.

Bu istediklerimi ChatGPT'ye, Gemini'a ve birkaç yapay zekaya daha sordum. Hepsinden bunu yapabileceğim sonucunu aldım. Fakat söyle bir sorun var, kodlama hakkında hiçbir fikrim yok. Onun için de yapay zekadan yardım aldım ve bana aşağıya yazdığım kodu verdi. Size sorum bu kod çalışır mı, hata var mı, ya da bu sistem hakkında önerebileceğiniz herhangi bir şey var mı?

Bu arada neden kendin deneyip görmüyorsun derseniz, elimde şu anda ESP32 yok, buradan alacağım yanıtlara göre sipariş vereceğim.

C++:
#include "SPI.h"
#include "BLEDevice.h"
#include "BLEScan.h"
#include "BLEAdvertisedDevice.h"
#include "WiFi.h"
#include "BlynkSimpleEsp32.h"

#define RELAY_PIN 5
#define LED_PIN 2
#define SCAN_TIME 10 // BLE tarama süresi (saniye)

char auth[] = "BLYNK_AUTH_TOKEN"; // Blynk kimlik doğrulama anahtarını buraya gir
char ssid[] = "WiFi_ADI"; // WiFi ağ adı
char pass[] = "WiFi_SIFRE"; // WiFi şifresi

BLEScan *pBLEScan;
float current_temp = -100;
float set_temp = 24.0; // Varsayılan sıcaklık ayarı (telefon üzerinden değiştirilebilir)

BLYNK_WRITE(V0) {
    set_temp = param.asFloat(); // Blynk uygulamasından gelen sıcaklık değeri
}

class MyAdvertisedDeviceCallbacks : public BLEAdvertisedDeviceCallbacks {
    void onResult(BLEAdvertisedDevice advertisedDevice) {
        if (advertisedDevice.haveName() && advertisedDevice.haveServiceData() && advertisedDevice.getName() == "ATC_XXXXXX") {
            std::string data = advertisedDevice.getServiceData();
            uint8_t *rawData = (uint8_t *)data.data();

            if (data.length() >= 6) {
                int temp_raw = (rawData[2] << 8) | rawData[1];
                current_temp = temp_raw / 10.0;
                Serial.printf("Okunan Sıcaklık: %.1f°C\n", current_temp);
            }
        }
    }
};

void setup() {
    Serial.begin(115200);
    pinMode(RELAY_PIN, OUTPUT);
    pinMode(LED_PIN, OUTPUT);
    digitalWrite(RELAY_PIN, HIGH);

    WiFi.begin(ssid, pass);
    while (WiFi.status() != WL_CONNECTED) {
        delay(1000);
        Serial.println("WiFi bağlanıyor...");
    }
    Serial.println("WiFi bağlantısı başarılı!");
    Blynk.begin(auth, ssid, pass);

    BLEDevice::init("");
    pBLEScan = BLEDevice::getScan();
    pBLEScan->setAdvertisedDeviceCallbacks(new MyAdvertisedDeviceCallbacks());
    pBLEScan->setActiveScan(true);
    pBLEScan->setInterval(100);
    pBLEScan->setWindow(99);
}

void loop() {
    Serial.println("BLE taraması başlatılıyor...");
    pBLEScan->start(SCAN_TIME);
    Serial.printf("Mevcut sıcaklık: %.1f°C | Ayarlanan sıcaklık: %.1f°C\n", current_temp, set_temp);

    if (current_temp < set_temp) {
        digitalWrite(RELAY_PIN, LOW);
        Serial.println("Röle Açık (Kombi Açık)");
    } else {
        digitalWrite(RELAY_PIN, HIGH);
        Serial.println("Röle Kapalı (Kombi Kapalı)");
    }
    Blynk.run();
    delay(5000);
}
 
Son düzenleyen: Moderatör:
Hocam kodlama hakkında bir bilginiz olmadan böyle bir projeye girişmenizi tavsiye etmem, başlangıç seviyesinin biraz üstünde bir IoT(nesnelerin interneti) projesi olur bu.
İsterseniz öncesinde bir ESP32 ve birkaç komponent alın, önce bu kartın nasıl çalıştığını ve kodlamayı nasıl yapmanız gerektiğini öğrenin sonrasında bu projeye başlayın.