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:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 |
#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.
1 2 |
#define WLAN_SSID "xxxxxx" #define WLAN_PASS "xxxxxx" |
- sonra username ve key bilgisini gireceğiz
1 2 |
#define AIO_USERNAME "xxxxx" #define AIO_KEY "xxxxxxxxxxxxxxxxxxxxx" |
- daha sonra block eklerken seçtiğimiz feed başlığını gireceğiz
1 |
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
1 2 3 4 5 6 7 8 9 10 |
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.
Ç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 ?
Teşekkürler, Role ile yapabilirsin ancak sadece açıp kapatabilirsin.
merhaba bu sistemi yaparken eklediğiniz string ifade kısmını anlamadım.adafruit üzerinde hangi yazdığımız string ifade oluyor.
Block setting ekranında Button On text ve Button off text kısımlarına yazacaksınız.
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?
Merhabaklar ESP nin programlama modu olduğu için ilk başta rolenin kontaklarını çekip bırakması normal ama esp yokken yapmaması gerekiyor.