Neler Yeni

ESP32, bir röle ve Xiaomi sıcaklık sensörü ile termostat yapılabilir mi?

Katılım
26 Mart 2020
Mesajlar
296
Dahası  
Reaksiyon skoru
70
İsim
Abdüssamet Karataş
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.

#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);
}
 
Yeni mesajlar Yeni Konu Aç      

SON KONULAR

Forum istatistikleri

Konular
1,049,556
Mesajlar
9,443,600
Üyeler
166,564
Son üye
Baran_000
Top Bottom