ESP8266 ve OLED ile MQTT Termostat – 2 (Anlık Hava durumu ve Saat Özelliği)

Merhaba Arkadaşlar;

Bu yazımda sizlere daha önce yaptığım MQTT termostat ın biraz daha gelişmiş versiyonunu anlatacağım. Bu tasarımda termostat ve Hava durumu projelerini tek bir yerde topladım. Bunları bir OLED ekranda gösterdim, aynı anda Saat, anlık hava durumu, oda sıcaklığı, nem ve termostat değerini görebileceksiniz. Aynı zamanda termostat değerini hem üzerindeki butondan hemde uzaktan MQTT sayesinde değiştire bileceksiniz. Bunun için önceki yazılarımı ayrıntılı okumalısınız.

ESP8266 ve OLED ile Hava Durumu – 2

ESP8266 – MQTT Termostat

Bu 2 projeyi tek bir çatı altında topladım. Öncelikle bu iş için MQTT broker a ihtiyacınız vardır. MQTT broker ı ücretsiz sitelerden alan alabilir yada Raspberry Pi ile kendi MQTT Broker ınızı yapabilirsiniz. Site için en popüler olan 2 MQTT server sitelerini aşağıda paylaşıyorum. Üye olup size verecekleri server name yada IP ve kullanıcı adı şifre ile giriş yapacaksınız.

  • https://www.cloudmqtt.com/
  • https://io.adafruit.com/

MQTT broker tarafını tamamladıysanız devre ve programına geçebiliriz. Çok basit bir şekilde ESP8266 nin hangi pini nereye gidecek yazı halinde veriyorum. Zaten programı açtığınızda bu ayarları setting kısmında göreceksiniz.

  • OLED:
    • SDA: GPIO 0
    • SCK: DPIO 2
  •  DHT 11/21/22:
    • Data: GPIO 10
  • RÖLE:
    • input: GPIO 9
  • Butonlar:
    • Ayarla : GPIO 13
    • Arttır : GPIO 12
    • Azalt : GPIO 14

Node  MCU kullanacaksanız pinlerine bakabilirsiniz.

Full Program: WeatherStation-Thermo-dht

Programı kısaca şu şekilde çalışmaktadır;

  • ilk önce wifi ve mqtt ayarlarınızı girin:
/**********Wifi Setup*********/
const char* WIFI_SSID = "-----";
const char* WIFI_PWD = "------";

/**********MQTT Setup*********/
const char* mqttServer = "-----";
const int mqttPort = -----;
const char* mqttUser = "----";
const char* mqttPassword = "-----";
  • Daha sonra yukarıda belirttiğim pinler zaten programda ayarlı geliyor, değiştirmek isterseniz buradan yapacaksınız:
/**********DHT Setup*********/
#define DHTPIN 10
#define DHTTYPE DHT11 // DHT 11
//#define DHTTYPE DHT22 // DHT 22 (AM2302), AM2321
//#define DHTTYPE DHT21 // DHT 21 (AM2301)

/**********Relay Setup*********/
#define RELAYPIN 9

/**********Button Setup*********/
#define buttonAyr 13
#define buttonArt 12
#define buttonAzt 14

/*****LED Setup*******/
#define LED 16

// Display Settings
const int I2C_DISPLAY_ADDRESS = 0x3c;
const int SDA_PIN = 0;
const int SDC_PIN = 2;
  • Yenileme süreleri için bu kısmı kullanacaksınız. Burada hava durumu güncelleme, wifi ve mqtt bağlantı süreleri gibi ayarları değiştirebilirsiniz.
// Refresh Setup
const int UPDATE_INTERVAL_SECS = 10 * 60; // x * 60 (dk cinsinden)
const int PUBLISH_INTERVAL_SECS = 10;     // x sn
const int WIFICON_INTERVAL_SECS = 1 * 60; // x * 60 (dk cinsinden)
const int MQTTCON_INTERVAL_SECS = 1 * 60; // x * 60 (dk cinsinden)
  • Önceki yazımı okuduysanız hava durumu için open weather a üye olup API key almalısınız ve buraya gireceksiniz:
String OPEN_WEATHER_MAP_APP_ID = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
String OPEN_WEATHER_MAP_LOCATION_ID = "xxxxxxx";
String OPEN_WEATHER_MAP_LANGUAGE = "tr";
const boolean IS_METRIC = true;
  • ilk  açıldığında pin ayarlarını yaptıktan sonra OLED i hazırlar ve EEpromdan kaydedilen termostat değerini okur. Bütün bağlantılar yapıldıysa hava durumu ve saat gücellenir. MQTT için gönderme yapılır. Buradaki MQTT mesajı Android uygulamasındaki json formatı olmalıdır. Çünkü termostat için bu uygulamayı kullanacağız. Önceki yazımla diğer modülleri nasıl kontrol edilir açıkladım.
  • Programın Loop kısmında ise sırası ile Wifi ve MQTT bağlantısı kesilmiş mi diye kontrol edilir. Belirlenen sürede hava tahmini güncellenir. Belirlenen sürede sıcaklık ve nem değerini gönderir ve Röleyi kontrol eder.
void loop()
{
  //Wifi kontrol eder bağlantı kesildiğinde belirtilen sürede tekrarlayarak bağlanmayı dener
  WifiControl();
  if (!WifiSt) {
    if (millis() - timeSinceLastWifiCon > (1000L * WIFICON_INTERVAL_SECS)) {
      timeSinceLastWifiCon = millis();
      Wifi_connect(&display);
    }
  }

  //MQTT kontrol eder bağlantı kesildiğinde belirtilen sürede tekrarlayarak bağlanmayı dener
  MqttControl();
  if (!MqttSt) {
    if (millis() - timeSinceLastMqttCon > (1000L * MQTTCON_INTERVAL_SECS)) {
      timeSinceLastMqttCon = millis();
      Client_connect(&display);
    }
  }

  //belirtilen sürede hava tahmini güncellenir
  if (WifiSt) {
    if (millis() - timeSinceLastWUpdate > (1000L * UPDATE_INTERVAL_SECS)) {
      setReadyForWeatherUpdate();
      timeSinceLastWUpdate = millis();
    }
    if (readyForWeatherUpdate && ui.getUiState()->frameState == FIXED) {
      updateData(&display);
    }
  }

  //wifi ve MQTT var ise belirtilen sürede sensor okunur değerler gönderlir
  if (WifiSt && MqttSt) {
    if (millis() - timeSinceLastPublish > (1000L * PUBLISH_INTERVAL_SECS)) {
      timeSinceLastPublish = millis();
      ReadSensorPublishData();
    }
  }

  remainingTimeBudget = ui.update();

  if (remainingTimeBudget > 0) {
    delay(remainingTimeBudget);
  }

  //Termostat değeri kontrol edilir.
  TempControlRelay();

  //Butonları oku
  butayr.read();
  butart.read();
  butazt.read();

  //mqtt loop
  client.loop();
}

Daha fazla ayrıntıları programdan okuyabilirsiniz.

Android uygulaması kullanımı için önceki yazımı okuyabilirsiniz.

ESP8266 – MQTT Termostat

 

Bir sonraki projede görüşmek üzere kolay gelsin.

“ESP8266 ve OLED ile MQTT Termostat – 2 (Anlık Hava durumu ve Saat Özelliği)” için 2 yorum

  1. bende tft ekran var ekranın nasıl kayacağını çözemedim 1.sayfa da saat tarih 2.sayfada sıcaklık nem 3.sayfada hava durumu falan gibi yapmaya çalışıyorum ama sayfa olayını çözemedim ekranı silerek mi diğer sayfayı göstermiş oluyoruz

Bir cevap yazın

E-posta hesabınız yayımlanmayacak.