Nodemcu Kullanılarak Wifi Ile IOT (nesnelerin Interneti) Uygulaması
İçindekiler
ESP8266 kullanılarak WiFi ile IOT (Nesnelerin İnterneti) uygulamasının gerçekleştirilmesi.
Proje kapsamında internet üzerinden 3 adet röle kontrolü ile 220 Vac beslemeli pano ikaz lambası ,evlerde kullanılan lamba ve 220 Vac -> 5 Vdc çeviriciye bağlı buzzerlı fan sistemi kontrol edilecektir. Neden bu proje ? bu soruya cevap verecek olursak arkadaşlar son zamanlarda inetrnet üzerinden röle kontrol edilerek akıllı ev projelerinde ,gömülü sistemlerin bulunduğu cihazların internet üzerinden kontrolü ve verilerin takip edilmesi gibi hizmet sektöründe gün geçtikçe ağırlığı artan IOT sistemlerinin artması beni bu projenin yapımına götürmüştür.Bu cevaptan sonra isterseniz projeye adım adım başlayabiliriz arkadaşlar;
GEREKSİNİM PROGRAMLARI
İlk olarak aşağıda verilen linkleri tıklayarak programları indirmek ve linkleri inceleyerek işe başlayabiliriz ,
- HTML,CSS ve Javascript konularında programlama deneyimi olmayan arkadaşlar öncelikle w3schools ifadesine tıklayarak proje çalışmalarına devam etmelidir.
- NodeMCU kartına ait yapılan yazılımın derlenmesi için Arduino IDE ifadesine tıklayarak,
- NodeMCU firmwire güncellemesini NodeMCU- ESP8266 ifadesine tıklayarak inceleyebilirsiniz.
PROJENİN AMACI
Evet arkadaşlar verilen linkten gerek duyduğunuz HTML,CSS ve Javascript komutlarını verilen linkten öğrendiğinizi ve NodeMCU-ESP8266 firmwire ve ESP8266 kütüphanesinin arduino IDE içerisine entegre ettiğinizi kabul ederek proje adımlarına devam edebiliriz.
- NodeMCU kartının özelliklerini ne olduğunu , Wi-Fi iletişim , Röle kavramlarını öğrenmek.
- NodeMCU kartına ait gömülü yazılım kodları , açık kaynak kodu olarak kullanılarak yazılımda kullanılan komutlarının kullanım amaçlarını öğrenmek.
- NodeMCU kartı kullanılarak internet üzerinden ile nasıl haberleşeceğini göstermek ve öğrenmek.
TEORİK BİLGİLER
NodeMCU Kartı ve Özellikleri Nedir ? ;
Ebatları küçüktür ve en önemlisi açık kaynaklıdır. Düşük enerji ile çalışır üzerinde bulunan bağlantı noktaları ile çevresel elektronik birimler kontrol edilebilir.Üzerinde bulunan Wi-Fi modül (ESP8266-12E) ile IOT yani nesnelerin interneti olarak bilinen cihazların internet üzerinden kontrol edilmesi ve takip edilmesi sağlanır. HTTP kütüphaneleri ile web işlemleri yapılabilir veya web sunucusu oluşturabilirsiniz. Birkaç programlama dillerine ek olarak Arduino IDE de programlanıp derlenebilir. Ayrıca json, file, timer, pwm, i2c, spi, 1-wire, net, mqtt, coap, gpio, wifi, adc, uart ve system apidestekler. NodeMCU Vin pininden 5 Vdc ile beslenir.
Wi-Fi İletişim Protokolü Nedir ?
Wi-Fi bağlantısı birçok geliştirici için günümüzde vazgeçilmez bir tercihtir. Mevcut alt yapısının çok geniş olması, evlerde/ofislerde yaygın olarak kullanılması ve büyük boyutlu veri aktarımının mümkün olması nedeniyle önemli bir avantaja sahiptir.
WiFi cihazların temelde 3 farklı çalışma modu bulunur: Infrastructure (altyapı) ve Ad-Hoc (iki cihaz arası doğrudan haberleşme). Infrastructure modunun ise iki farklı alt modu vardır: istemci (client) ve istasyon (access point). İstemci olarak internet ağına bağlanan cep telefonu ,Acccess point için ise modem veya router örnek verilebilir. Kullanılan standard IEEE 802.11n ,standardın frekansı 2.4 GHz ve 5GHZ dir ve bu standardın veri transferi ise Maksimum 600 Mbps’dir.
Wi-Fi Modül (ESP8266) Nedir ?
ESP8266 Modülü yapacağınız projede elektronik sistemin internete bağlanmasını sağlar.Bu özelliği ile gerektiğinde sistemin internete veri göndermesini gerektiğinde ise almanıza olanak sağlamasının yanında elektronik projelerinizin internet üzerinden kontrol edebilmenizi sağlar. 1tl madeni para boyutlarında olması ve maliyetinin uygun olmasından dolayı son zamanlarda çok fazla tercih ediliyor. Bu modül ile 2 mode da çalışabilirsiniz.Bu iki mode da isterseniz Wi-Fi bağlantı noktasına bağlanmak için (Client)kullanabilir, isterseniz bir Wi-Fi noktası yaratabilir(AccessPoint) , veya hem AccessPoint hem Client olarak kullanabilirsiniz.
Bu modül ile çalışmadan önce modül içerisindeki sürümün güncellenmesi gerekiyor.Bunun nedeni her gelen yeni sürüm ile modülün daha da stabil bir hale gelmesidir.
Not: Bu modül (ESP-12E) NodeMCU üzerinde bulunmaktadır.
Röle Nedir ve Ne İşe Yarar?
Bir röle birçok tipte sınıflandırılır; standart ve genel olarak kullanılan röle, genelde bir anahtar olarak kullanılan elektromıknatıslardan oluşur. Sözlük karşılığı bir şeyden diğerine geçme eylemi anlamına gelir, aynı anlam bu aygıt için de uygulanabilir; çünkü aygıtın bir tarafından alınan sinyal diğer taraftaki anahtarlama işlemini kontrol eder. Dolayısıyla röle, devreleri elektromekanik olarak kontrol eden (açıp kapayan) bir anahtardır. Bu cihazın ana çalışması, herhangi bir insan müdahalesi olmadan bir sinyal yardımıyla AÇIK veya KAPALI geçiş yapmak veya bunlarla teması kesmektir. Esas olarak, düşük güçlü bir sinyal kullanarak yüksek güçlü bir devrenin kontrol edilmesi için kullanılır. Genellikle mikroişlemcilerden gelen dijital sinyaller ile AC ev aletlerini kontrol etmek gibi yüksek voltaj değerlerinde çalışan devrenin kontrol edilmesi için kullanılır.
MALZEME LİSTESİ
Proje kapsamında teorik bilgiler verildikten sonra projenin devamı için gerekli olan malzemeler aşağıdaki tabloda yer verilmiştir. Burada röle devresi hazır PCB üzerinde satılmaktadır.
MALZEME ADI | MALZEME ADET | MALZEME ADI | MALZEME ADET |
NodeMCU | 1 | Mini USB kablosu | 1 |
5 Vdc Röle Devresi (PCB) | 3 | Nötr 220 Vac Kablo | N |
220 Vac Lamba | 1 | Faz 220 Vac Kablo | N |
Lamba için Duy | 1 | Jumper Kablo | N |
220 Vac İkaz Lambası | 1 | 220 Vac Fiş | 1 |
Buzzer | 1 | 3’lü Priz | *** |
5 Vdc Fan | 1 | *** | *** |
220 Vac -> 5Vdc dönüştürücü | 1 | *** | *** |
ŞEMATİK DEVRE
Bu projenin şematik bölümü fritzing programında çizilmiştir. Programda çizilen devreye bakılacak olursa NodeMCU D0-> 1. Röleyi, D1-> 2.Röleyi ve D2-> 3.Röleyi tetiklemektedir. 220 Vac beslemenin nötr hattı rölelerin C (Ortak Uç) çıkışına bağlanmıştır.Buna ek olarak lambanın bir ucu 1.rölenin NO (normalde açık ),ikaz lambasının bir ucu 2.Rölenin NO(normalde açık) ve dönüştürücünün bir ucu NO(normalde açık ) pinine bağlanmıştır. 220 Vac beslemenin faz hattı ise lamba,ikaz lambası ve dönüştürücünün diğer pinine bağlanmıştır. NodeMCU ise 5Vdc ile beslenmektedir.
KAYNAK KODLARI
/*
Program Adı :WiFi ile Röle kontrolü
Donanım : NodeMCU V1.0
Derleyici : Arduino IDE 1.8.5
MCU : 80 MHz
Yazan : Adil Teoman Kurt
Adres : https://electrolog.blog
*/
#include <ESP8266WiFi.h> // ESP8266 kütüphanesi dahil ediliyor
const char* ssid = “xxxxxxxx”; // İnternet Ağının ismi
const char* password = “yyyyyyyyy”; // internet ağının şifresi
int RolePin1 = D0; // D0 pini RolePin1 ile eşleştiriliyor
int RolePin2 = D1; // D1 pini RolePin2 ile eşleştiriliyor
int RolePin3 = D2; // D2 pini RolePin3 ile eşleştiriliyor
int RoleDeger1= LOW; // 1.Rölenin durumu lojik-0 yapılıyor
int RoleDeger2= LOW; // 2.Rölenin durumu lojik-0 yapılıyor
int RoleDeger3= LOW; // 3.Rölenin durumu lojik-0 yapılıyor
WiFiServer server(80); // WiFi ağına 80. porttan bağlınılıyor
void setup() {
Serial.begin(115200); //Seri iletişim başlatılıyor ve Baundrate hızı : 115200
delay(10); // 10 ms bekleme
pinMode(RolePin1, OUTPUT); // D0 pini çıkış olarak ayarlanıyor
pinMode(RolePin2, OUTPUT); // D1 pini çıkış olarak ayarlanıyor
pinMode(RolePin3, OUTPUT); // D2 pini çıkış olarak ayarlanıyor
digitalWrite(RolePin1, LOW); // D0 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin2, LOW); // D1 pini lojik-0 olarak ayarlanıyor
digitalWrite(RolePin3, LOW); // D2 pini lojik-0 olarak ayarlanıyor
// WiFi ağına bağlanma bölümü
Serial.println();
Serial.println();
Serial.print(“Baglanilan ag :”);
Serial.println(ssid);
WiFi.begin(ssid, password); // Bağlanılan Ağın adı ve şifresi girilen internet ağına bağlanılıp ardından WiFi başlatılıyor
while (WiFi.status() != WL_CONNECTED) { // Ağa bağlanılıncaya kadar “.” gönderilir
delay(500);
Serial.print(“.”);
}
Serial.println(“”);
Serial.println(“WiFi baglanildi…”);
//Server başlatılıyor
server.begin();
Serial.println(“Server baslatildi….”);
// NodeMCU ait IP adresi alınıyor
Serial.print(“Baglanmak icin kullanilacak IP : “);
Serial.print(“http://”);
Serial.print(WiFi.localIP()); // Yerel ağ içerisindeki IP alınıyor
Serial.println(“/”);
}
void loop() {
//NodeMCu WiFi agina baglanilip baglanilmadagi kontrol ediliyor
WiFiClient client = server.available();
if (!client) {
return;
}
// NodeMCU veri gelnceye kadar bekleme bölümü
Serial.println(“Yeni cihaz”);
while(!client.available()){
delay(1);
}
// Url Adresin ilk satırının alındığı bölüm
String request = client.readStringUntil(‘r’);
Serial.println(request);
client.flush();
// 1.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf(“/1.Role=ON”) != -1) {
digitalWrite(RolePin1, HIGH);
RoleDeger1 = HIGH;
}
if (request.indexOf(“/1.Role=OFF”) != -1) {
digitalWrite(RolePin1, LOW);
RoleDeger1 = LOW;
}
// 2.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf(“/2.Role=ON”) != -1) {
digitalWrite(RolePin2, HIGH);
RoleDeger2 = HIGH;
}
if (request.indexOf(“/2.Role=OFF”) != -1) {
digitalWrite(RolePin2, LOW);
RoleDeger2 = LOW;
}
// 3.Rölenin ilk satırına göre açılma veya kapatılma bölümü
if (request.indexOf(“/3.Role=ON”) != -1) {
digitalWrite(RolePin3, HIGH);
RoleDeger3 = HIGH;
}
if (request.indexOf(“/3.Role=OFF”) != -1) {
digitalWrite(RolePin3, LOW);
RoleDeger3 = LOW;
}
// Node MCU yayımladığı Web sitesi
client.println(“HTTP/1.1 200 OK”);
client.println(“Content-Type: text/html”);
client.println(“”); // do not forget this one
client.println(“<!DOCTYPE HTML>”);
client.println(“<html>”);
client.println(“<HEAD><TITLE>WI-FI Uygulamasi</TITLE>”);
client.println(“<BODY><H1>WI-FI ILE ROLE KONTROL PROJESINE HOSGELDINIZ</H1>”);
// Web sayfasında 1.Röleye ait kontrol paneli
client.println(“<fieldset>”);
client.println(“<legend>1.Role Kontrol</legend>”);
client.print(“1. Röle Durum :”);
if(RoleDeger1 == HIGH) {
client.print(“Acik”);
} else {
client.print(“Kapali”);
}
client.println(“<br><br>”);
client.println(“<a href=”/1.Role=ON””><button>Role Ac </button></a>”);
client.println(“<a href=”/1.Role=OFF””><button>Role Kapat</button></a><br />”);
client.println(“</fieldset>”);
delay(25);
// Web sayfasında 2.Röleye ait kontrol paneli
client.println(“<fieldset>”);
client.println(“<legend>2.Role Kontrol</legend>”);
client.print(“2. Role Durum : “);
if(RoleDeger2 == HIGH) {
client.print(“Acık”);
} else {
client.print(“Kapali”);
}
client.println(“<br><br>”);
client.println(“<a href=”/2.Role=ON””><button>Role Ac </button></a>”);
client.println(“<a href=”/2.Role=OFF””><button>Role Kapat</button></a><br />”);
client.println(“</fieldset>”);
delay(25);
// Web sayfasında 3.Röleye ait kontrol paneli
client.println(“<fieldset>”);
client.println(“<legend>3.Role Kontrol</legend>”);
client.print(“3.Role Durum : “);
if(RoleDeger3 == HIGH) {
client.print(“Acık”);
} else {
client.print(“Kapali”);
}
client.println(“<br><br>”);
client.println(“<a href=”/3.Role=ON””><button>Role Ac </button></a>”);
client.println(“<a href=”/3.Role=OFF””><button>Role Kapat </button></a><br />”);
client.println(“</fieldset>”);
client.println(“<H2>Proje hakkinda => https://electrolog.blog sayafasini ziyaret edebilirsiniz</H2>”);
client.println(“</BODY>”);
client.println(“</HEAD>”);
client.println(“</html>”);
delay(100);
Serial.println(“Client bağlantı kapatıldı”);
Serial.println(“”);
}
WEB ARAYÜZ PANELİ
Web sitemizi adım adım irdeleyecek olursak;
- Web sitemizin sahip olduğu IP adresi serial hat üzerinden alınan değerdir .Bu değer google adresine yazarak web sitemize ulaşılır.
- Web sitemiz üzerinden 3 adet röle kontrol edilir. Ayrıca web sitesinden bilgi gönderilirken aynı zamanda cihazımızdan web sitesine veri gönderilir. Veriler röle kontrol blokların içerisinde “Pasif” ve “Açık “olacak şekilde gönderilir.
PROJENİN VİDEOSU
Bu projede hazırlanan videoda internet üzerinden NodeMCU veri gönderilerek kontrol edilen rölelerimizn ile gerçek zamanlı elektronik devresi ile ilgili çalışmayı anlatan videoya WiFi-NodeMCU ifadesine tıklayarak izleyebilirsiniz.
EK DOSYALAR
Bu bölümde ise elektronik devrenin fritzing resmi ve devrenin fritzing kaynak dosyası (.fzz) bulunmaktadır.