NodeMCU İle Webserver(AP) Oluşturma
Bu yazımızda NodeMCU(Esp8266) ile webserver oluşturmayı öğreneceğiz. Hiç bir ağa bağlanmadan kendi wifi ağımızı oluşturmayı öğreneceğiz. Bu ağ sayesinde sensörlerden alınan veri değerlerini telefonumuzdan bağlanarak anlık bir şekilde görebileceğiz.
Öncelikle NodeMCU, iki modda kullanılabilir. Bunlardan bir tanesi AP(Acces Point) Modu ve Wifi İstasyon(Station STA) Modu’dur. İlk olarak ap modunu kısa bir şekilde açıklayalım.
AP Modu: Türkçe karşılığı bağlantı noktasıdır. Bu modda wifi ağı bizzat NodeMCU tarafından oluşturulur. İçerisine yazılan kodlarla kendi web arayüzünü yayımlar. Aşağıdaki resim bu modu açıklamaktadır.

STA Modu: Türkçe karşılığı istasyon modudur. Bu modda NodeMCU daha önceden oluşturulmuş bir ağa bağlanır ve bu ağ içerisinde veri paylaşımı yapar. Ağın sahibi değildir. Aşağıdaki resim bunu açıklamaktadır.

Artık öğrendiğimize göre küçük bir örnek ile devam edelim. Örneğimizde DHT11 sensörü ile ortamın sıcaklığını ve nem değerlerini, ldr sensörü ile ortamın ışık seviyesini kendi oluşturduğumuz web panelde anlık olarak yayınlayacağız.
Gerekli malzemeler:
Malzemelerimizi topladıysak artık bağlantılarımızı aşağıdaki şemaya göre kuralım.

Devremizi kurduysak kısa bir şekilde açıklayalım. NodeMCU analog pinden ortamın ışık değerini okumakta ve bunu oluşturduğu web server üzerinde değer ve voltaj olarak göstermektedir. Şimdi koda geçelim. Kodumuzun açıklaması kod içerisinde yorum satırı olarak açıklanmıştır. Sadece web kısmı açıklanmamıştır o da basit bir html ve css bilgisi ile anlaşılmaktadır.
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>
const char* ssid = "NodeMCU"; // Wifi ağının adı
const char* password = "123456789"; //Wifi ağının şifresi
IPAddress local_ip(192,168,1,1); // Nodemcu cihazımızın ip adresini belirliyoruz.
IPAddress gateway(192,168,1,1); // Ağ geçidi adresimiz
IPAddress subnet(255,255,255,0); // Alt ağ adresini ayarlayıyoruz
ESP8266WebServer server(80); // 80. portta başlayacağını ayarlıyoruz
int ldr=A0; // ldr pinimizi tanımlıyoruz
int deger=0; // ldr değerinin tutulacağı değişkeni tanımlıyoruz
double voltaj=0.0; // Voltaj değerinin tutulacağı değişkeni tanımlıyoruz
void setup() {
Serial.begin(115200); // Seri haberleşmeyi başlatıyoruz
pinMode(ldr,INPUT); // ldr pinini giriş pini olarak tanımlıyoruz
WiFi.softAP(ssid, password); // Wifi kütüphanemize ağ adı ve şifre bilgilerini giriyoruz.
WiFi.softAPConfig(local_ip, gateway, subnet); // ağ geçitlerini ayarlıyoruz
delay(100); // 100 milisaniye bekletiyoruz
server.on("/", handle_OnConnect); // web arayüze girilince yönledirilecek sayfanın bilgilerini yönlendiriyoruz.
server.onNotFound(handle_NotFound); // Eğer aranılan sayfa bulunamazsa yazdırılacak koda yönlendiriyoruz.
server.begin(); // Serveri başlatıyoruz
Serial.println("Web Server Baslatildi!"); // Başlatıldığını serial monitörde yazdırıyoruz
}
void loop() {
server.handleClient(); // Serverin kontrol edileceğini bildiriyoruz
}
void handle_OnConnect() {
Serial.println("Arayuze Baglanildi");
server.send(200, "text/html", SendHTML()); // Servera arayüz kodlarımızı yönlendiriyoruz.
}
void handle_NotFound(){
server.send(404, "text/plain", "Sayfa Bulunamadi"); // Sayfanın bulunamadığını yazdırıyoruz
}
String SendHTML(){
String ptr = "<!DOCTYPE html> <html>\n";
ptr +="<head><meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />";
ptr +="<head><meta name=\"viewport\" content=\"width=device-width, initial-scale=1.0, user-scalable=no\">\n";
ptr +="<title>LED Control</title>\n";
ptr +="<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}\n";
ptr +="body{margin-top: 50px;} h1 {color: #444444;margin: 50px auto 30px;} h3 {color: #444444;margin-bottom: 50px;}\n";
ptr +=".button {display: block;width: 80px;background-color: #1abc9c;border: none;color: white;padding: 13px 30px;text-decoration: none;font-size: 25px;margin: 0px auto 35px;cursor: pointer;border-radius: 4px;}\n";
ptr +=".button-on {background-color: #1abc9c;}\n";
ptr +=".button-on:active {background-color: #16a085;}\n";
ptr +=".button-off {background-color: #34495e;}\n";
ptr +=".button-off:active {background-color: #2c3e50;}\n";
ptr +="p {font-size: 14px;color: #888;margin-bottom: 10px;}\n";
ptr +="</style>\n";
ptr +="</head>\n";
ptr +="<body>\n";
ptr +="<table border=\"2\" align=\"center\">";
ptr +="<tr><td colspan=\"2\" align=\"center\"><h1>Arduino Destek</h1></td></tr>";
ptr +="<tr><td colspan=\"2\" align=\"center\"><h2>NodeMCU ile Webserver Oluşturma</h2></td></tr>";
deger=analogRead(ldr);
voltaj=(deger/4095.0)*3.3;
ptr +="<tr><td colspan=\"2\" align=\"center\"><h3>Değer:"+String(deger)+"</h3></td></tr>";
ptr +="<tr><td colspan=\"2\"><h3>Voltaj:"+String(voltaj)+"</h3></td></tr>";
ptr +="<tr><td colspan=\"2\"><h3><a href=\"https://www.arduinodestek.com\">www.arduinodestek.com</a></h3></td></tr>";
ptr +="</table>";
ptr +="</body>\n";
ptr +="</html>\n";
return ptr;
}
Olabildiğince kısa tutmaya çalıştık umarım yararlı bir yazı olmuştur. Yeni yazılar için bizi takip etmeyi unutmayın 🙂

