Wi-Fi Tabanlı IoT Kontrolü ve Yerel Ağ Entegrasyonu

Hakkında

4 röleyi IoT ile kontrol eden bir kart tasarlamak ister misiniz?

Bu kursta, 4 kanallı bir röle kontrol kartının PCB tasarımını adım adım yapacak ve cihazı uzaktan kontrol edebilmeniz için temel düzeyde çalışan bir kod paylaşacağım. Karmaşık yazılım mimarileri yok; Kodu projenize hızlıca uygulayabilir, ihtiyacınıza göre üzerinde oynayabilirsiniz.

Amaç basit: Kart tasarla, kodu yükle, rölelerini kontrol et.

🔧 PCB Tasarımı + Kullanıma Hazır Temel Kod

Sayılarla

Öğrenci: 3
Ders: 14

Eğitmen

Bu bölümde, projemizi fiziksel sınırların ötesine taşıyarak yerel ağ üzerinden kablosuz kontrol altyapısını kuruyoruz. ESP-12E modülümüzün Wi-Fi Station (STA) modunda mevcut bir ağa nasıl bağlanacağını ve bir Web Sunucusu (Web Server) gibi davranarak tarayıcı üzerinden gelen komutları nasıl dinleyeceğini öğreniyoruz. Ders kapsamında, akıllı telefon veya bilgisayarınızın tarayıcısına girdiğiniz basit IP adresleri üzerinden röleleri açıp kapatabileceğiniz arayüz mantığını, HTTP isteklerini (GET/POST) işlemeyi ve bağlantı kopmalarına karşı otomatik yeniden bağlanma senaryolarını işliyoruz. Bölüm sonunda; kablo kalabalığını ortadan kaldıran, evin herhangi bir noktasından tek bir dokunuşla cihazlarınızı yönetebilen temel bir IoT (Nesnelerin İnterneti) kontrol sistemi oluşturma becerisi kazanıyoruz.


Wİfi Kodu: 

#include <ESP8266WiFi.h>

#include <ESP8266WebServer.h>


const char* ssid = "Wifi_Ad";

const char* password = "Wifi_Sifre";


ESP8266WebServer server(80);

int r[4] = {5, 4, 14, 12};


void root() {

  String h = "<!DOCTYPE html><html><head><meta charset='UTF-8' name='viewport' content='width=device-width,initial-scale=1.0'>";

  h += "<style>body{background:#121212;color:#eee;font-family:sans-serif;display:flex;flex-direction:column;align-items:center;padding:20px;margin:0}";

  h += ".grid{display:grid;grid-template-columns:1fr 1fr;gap:15px;width:90%;max-width:400px;margin-top:20px}";

  h += "button{height:100px;border:none;border-radius:15px;font-size:16px;font-weight:bold;cursor:pointer;transition:all 0.1s ease;background:#333;color:#fff;box-shadow:0 5px #000}";

  h += "button:active{transform:translateY(4px);box-shadow:0 1px #000}";

  h += ".on{background:#2ecc71!important;text-shadow:1px 1px 2px #000}.off{background:#e74c3c!important;text-shadow:1px 1px 2px #000}</style></head>";

  h += "<body><h2 style='margin-bottom:20px'>KONTROL PANELİ</h2><div class='grid'>";

  

  for(int i=0; i<4; i++) h += "<button id='b"+String(i)+"' onclick='t("+String(i)+")'>R"+String(i+1)+"<br>...</button>";

  

  h += "</div><script>function t(i){let b=document.getElementById('b'+i);";

  h += "let isOff=b.classList.contains('off');";

  h += "b.className=isOff?'on':'off';b.innerHTML='R'+(i+1)+(isOff?'<br>AÇIK':'<br>KAPALI');";

  h += "fetch('/t?i='+i).then(r=>r.text()).then(s=>{";

  h += "b.className=s=='1'?'on':'off';b.innerHTML='R'+(i+1)+(s=='1'?'<br>AÇIK':'<br>KAPALI');});}";

  h += "window.onload=()=>{for(let i=0;i<4;i++){fetch('/s?i='+i).then(r=>r.text()).then(s=>{";

  h += "let b=document.getElementById('b'+i);b.className=s=='1'?'on':'off';b.innerHTML='R'+(i+1)+(s=='1'?'<br>AÇIK':'<br>KAPALI');});}};";

  h += "</script></body></html>";

  

  server.send(200, "text/html", h);

}


void status() {

  int i = server.arg("i").toInt();

  server.send(200, "text/plain", String(digitalRead(r[i])));

}


void toggle() {

  int i = server.arg("i").toInt();

  if(i >= 0 && i < 4) {

    digitalWrite(r[i], !digitalRead(r[i]));

    server.send(200, "text/plain", String(digitalRead(r[i])));

  }

}


void setup() {

  Serial.begin(115200);

  WiFi.setSleepMode(WIFI_NONE_SLEEP); 

  

  for(int i=0; i<4; i++) {

    pinMode(r[i], OUTPUT);

    digitalWrite(r[i], LOW);

  }


  WiFi.begin(ssid, password);

  while(WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); }

  

  server.on("/", root);

  server.on("/t", toggle);

  server.on("/s", status);

  server.begin();

}


void loop() {

  server.handleClient();

}

Sorunuz mu var? Sorunuzu gönderin...

Medya Ekle
Sadece .JPEG, JPG ve .PNG Resimler
Henüz soru yok

İlk soru soran siz olun