ESP8266 Röle Modülü ile Smart Home (MQTT – IFTTT – Google Assistant)

Merhaba Arkadaşlar;

Bu yazımda sizlere piyasada hazır satılan ESP8266 Röle modülü ile Basit bir smart home projesi nasıl yapılır onu anlatacağım. Bu modülü çeşitli sitelerde bulabilirsiniz.

https://www.robotistan.com/esp8266-icin-5v-kablosuz-role-modulu

Modül için sadece 5V bir adaptör yada güç kaynağı yeterlidir. Modül üzerinde tek bir röle olup kontak çıkışları klemens ile dışarı çıkartılmıştır. Projenin kaynak kodlarına geçmeden MQTT server için io.adafruit.com adresinden hesap açıp gerekli ayarları yapmamız gerekiyor. Siteye üye olduktan sonra giriş yapıp Dashboards tıklayarak yeni bir Dashboard oluşturacağız

Ben smarthome adında bir tane oluşturdum

Daha sonra içine girerek block ekleyeceğiz.

Röle için en uygun olanı ON OFF anahtar olacaktır.

Daha sonra feed ekleyerek başlığımızı seçip Next Step e basacağız.

Daha sonra Block Title ve gönderilecek mesaj için ON ve OFF text ifadelerini yazıyoruz ve create diyoruz.

İşlem bu kadar, buraya kadar MQTT de topic ve mesajı hazırladık, artık on yada off durumu olduğunda ilgili feed e string mesaj gönderilecektir. Bundan sonrası ESP ile bu mesajı alıp roleyi açıp yada kapatmak kalıyor. ESP yi io.adafruit.com a eşitlemek için bize username ve key gereklidir. Bunun için io.adafruit.com sayfasından AIO key e basarak bu bilgileri alabiliriz.

Bu bilgileri de aldıktan sonra programa geçebiliriz.

Program:

#include <ESP8266WiFi.h>
#include "Adafruit_MQTT.h"
#include "Adafruit_MQTT_Client.h"

/************************* WiFi Access Point *********************************/

#define WLAN_SSID       "XXXXXX"
#define WLAN_PASS       "XXXXXX"

/************************* Adafruit.io Setup *********************************/

#define AIO_SERVER      "io.adafruit.com"
#define AIO_SERVERPORT  1883                   // use 8883 for SSL

#define AIO_USERNAME  "xxxxxxxxxx"
#define AIO_KEY       "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"


/**********Hardware Setup*********/
#define Role 0 // GPIO0 -> D3

WiFiClient client;
Adafruit_MQTT_Client mqtt(&client, AIO_SERVER, AIO_SERVERPORT, AIO_USERNAME, AIO_KEY);
Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/xxxxxxxxx");


void MQTT_connect();
bool Wifi_connect();

void setup() {
  Serial.begin(115200);
  delay(10);

  pinMode(Role,OUTPUT);
  digitalWrite(Role,HIGH); //role off
  Serial.println(F("Adafruit MQTT"));

  while(!Wifi_connect()){
  }
}

void loop() 
{
  if(WiFi.status()==WL_CONNECTION_LOST)
  {
    Serial.println("Balanti koptu");
    while(!Wifi_connect()){
    } 
  }
  
  MQTT_connect();

  Adafruit_MQTT_Subscribe *subscription;
  while ((subscription = mqtt.readSubscription(5000))) 
  {
    
    if (subscription == &onoffbutton) 
    {
      Serial.print(F("Koridor Lamba: "));
      Serial.println((char *)onoffbutton.lastread);

      String RxData=String((char *)onoffbutton.lastread);
      if(RxData=="ON") // eklediğiniz block daki string ifade
      {
        digitalWrite(Role,LOW); //role on
        Serial.println("Role ON");
      }
      if(RxData=="OFF") // eklediğiniz block daki string ifade
      {
        digitalWrite(Role,HIGH); //role off
        Serial.println("Role OFF");
      }

    }
  }

  if(! mqtt.ping()) 
  {
    mqtt.disconnect();
  }
}



//wifi connect
bool Wifi_connect()
{
  bool retn;
  Serial.print("SSID:");
  Serial.print(WLAN_SSID); 
  Serial.print("\r\n");
  WiFi.begin(WLAN_SSID, WLAN_PASS);  
  Serial.print("Baglaniyor... ");

  //try to connect for 10 seconds
  int i = 10;
  while(WiFi.status() != WL_CONNECTED && i >=0) 
  {
    delay(750);
    Serial.print(i);
    Serial.print(", ");
    i--;
  }

  //print connection result
  if(WiFi.status() == WL_CONNECTED)
  {
    Serial.print("Baglandi.\r\n"); 
    Serial.print("NodeMCU ip address: "); 
    Serial.println(WiFi.localIP());
    // Setup MQTT subscription for onoff feed.
    mqtt.subscribe(&onoffbutton);
    retn = true;
  }
  else 
  {
    Serial.println("Baglanti hata !!!\r\n");
    retn = false;
  }

  return retn;
}

// Function to connect and reconnect as necessary to the MQTT server.
// Should be called in the loop function and it will take care if connecting.
void MQTT_connect() {
  int8_t ret;

  // Stop if already connected.
  if (mqtt.connected()) {
    return;
  }

  Serial.println("Connecting to MQTT... ");

  uint8_t retries = 3;
  while ((ret = mqtt.connect()) != 0) { // connect will return 0 for connected
       Serial.println(mqtt.connectErrorString(ret));
       Serial.println("Retrying MQTT connection in 5 seconds...");
       mqtt.disconnect();
       delay(5000);  // wait 5 seconds
       retries--;
       if (retries == 0) {
         // basically die and wait for WDT to reset me
         while (1);
       }
  }
  Serial.println("MQTT Connected!");
}
  • İlk olarak bağlanacağımız wifi bilgilerini gireceksiniz.
#define WLAN_SSID       "xxxxxx"
#define WLAN_PASS       "xxxxxx"
  • sonra username ve key bilgisini gireceğiz
#define AIO_USERNAME  "xxxxx"
#define AIO_KEY       "xxxxxxxxxxxxxxxxxxxxx"
  • daha sonra block eklerken seçtiğimiz feed başlığını gireceğiz
Adafruit_MQTT_Subscribe onoffbutton = Adafruit_MQTT_Subscribe(&mqtt, AIO_USERNAME "/feeds/xxxxxxxxxx");
  • son olarak on ve off durumundaki string karşılaştırmayı yapacağız
      if(RxData=="ON")
      {
        digitalWrite(Role,LOW); //role on
        Serial.println("Role ON");
      }
      if(RxData=="OFF")
      {
        digitalWrite(Role,HIGH); //role off
        Serial.println("Role OFF");
      }

ON yada OFF datalarını karşılaştırarak modülün üzerindeki röleyi açıp yada kapatacağız.

Programı derleyip yükledikten sonra çalıştırıp wifi a bağlanmasını sağlayacağız. Bağlandıktan sonra io.adafruit.com dan butonun durumunu değiştirdiğimizde rölenin çalıştığını göreceksiniz.

Şimdi ise bu çalışan sistemi  Google Assistant a bağlamamız gerekiyor. Bunun için IFTTT uygulamasını kullanacağız. Bu site sayesinde  Google Assistant dan gelen komutlar ile  io.adafruit.com daki hesabımıza hükmedeceğiz. ilk önce IFTTT için https://ifttt.com adresine gidip kendimize hesap açalım.

Aslında IFTTT çok geniş kapsamlı bir sitedir uygulamaları birbirine bağlar ve işlerinizi kolaylaştırır başka bir yazımda ayrıntılı bir inceleme yapacağım. Hesap açtıktan sonra create e basıp başlayalım.

ve karşımıza sitenin de adı olan söz gelecek 🙂

+ ya basıp tetikleyecek uygulamayı seçeceğiz;

gelen ekrana google assistant yazıyoruz ve tıklıyoruz.

gelen seçimde sadece tek bir konuşma yapacağımız için Say a simple phrase ı seçiyoruz.

Gelen ekranda What do you want to say? e hangi konuşma ile tetikleneceğini yazacağız burada İngilizce olmasına dikkat edin. Ben koridor lambasına bağladığım için turn on corridor light yazdım. Alttaki 2 kutucuğa ise benzer kelimeleri ekleyebilirsiniz. Create trigger dedikten sonra +that kısmına geçip io.adafruit.com hesabına bağlayacağız. Arama kısmına adafruit yazıp seçiyoruz.

Çıkan ekranda Send data to Adafruit IO tıklayıp hesabımıza giriş yapıp karşımıza hesabımızda bulunan feed leri gösteren liste çıkacaktır. Buradan kendi eklediğimiz feed i seçip ve göndereceğimiz mesajı da yazıp tamamlıyoruz.

Finish dedikten sonra artık sesli komut eklenmiş oldu.

Aynı işlemleri röleyi kapatmak için OFF yazarak tekrar yapacağız. Böylelikle 2 komut eklenmiş olacağız. Artık telefonunuzdan yada google home cihazınızdan yazdığınız ingilizce komutu konuştuğunuzda rölenin durumunun değiştiğini göreceksiniz. Aşağıdaki kötü ingilizcem ile çektiğim videoda göreceksiniz. (Not: videoda kullandığım google home ciahzını raspberry pi ile yaptım ve bunu da başka bir yazımda sizlerle paylaşacağım.)

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

“ESP8266 Röle Modülü ile Smart Home (MQTT – IFTTT – Google Assistant)” için 6 yorum

  1. Çok güzel bilgiler paylaştığınız için teşekkür ederim.Yeni baslayanlardanim ancak bi türlü cevap bulamadim bu duruma Esp röle modülü ile 12v rgb şerit led renk kontrolü yapabiliyor muyuz ya da nasil yapabiliriz ?

  2. merhaba bu sistemi yaparken eklediğiniz string ifade kısmını anlamadım.adafruit üzerinde hangi yazdığımız string ifade oluyor.

  3. hocam merhaba aynı modulden 3 tane de ben aldım fakat ben 5va baglar baglamaz role kontaklarını cekıp bırakmaya baslıyor, 3 modulu de denedım hepsı aynı acaba bır sorun mu var? programlanmamıs esp taksam da programlanmıs esp taksam da aynı sekıldeler hatta esp modulunu cıkarsam bıle aynı 🙂 basınıza geldı mı ya da ben bır yerı mı atlıyorum defaultta bır ayarı falan mı var kartın?

Bir cevap yazın

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