Book Appointment Now
ESP8266-01 ile iki ledi kablosuz bağlantıdan kumanda projesi
Bu projede iki led lambanın veya iki rölenin WiFi üzerinden kumanda edilmesi uygulanacaktır.
Tekrar olmaması için ESP8266-01’in nasıl programlanacağı burada anlatılmayacaktır. Ancak programlamayı bu yazımızda bulabilirsiniz.
Aşağıdaki resimdeki gibi bağlantıları yapın. Besleme geriliminin 3,3 volt olmasına dikkat edin. USB modülünün gücü ESP01’i beslemeye yetmez ise başka bir güç kaynağı kullanmak gerekebilir.

Bu bağlantı ile modülün seri porttan gönderdiği mesajlar Arduino IDE’sinden görülür. Mesajlardan modülün IP adresini öğrenebilirsiniz. Bu programda sabit IP adresi kullanılmaktadır. Sabit IP adresi var olan sisteme göre ayarlanmalıdır. Dolayısıyla IP adresi için Arduino IDE’ye bağlantı gereği yoktur. IP adresini internet tarayıcısının adres satırına girerek modülle bağlantı kurup butonlar kullanılabilir. Arduino IDE ile haberleşecek bağlantının başka yararı, varsa hatayı düzeltecek bilgiler alınabilmesidir. Geliştirme tamamlanınca aşağıdaki gibi bağlantı yaparak modülü bağımsız kullanabilirsiniz.

/*********
Bu projede iki led kablosuz ağdan kumanda edilir
*********/
// Wi-Fi kütüphanesini yüklenmesi
#include <ESP8266WiFi.h>
// Sizin ağ özelliklerine göre değiştirin
const char* ssid = "Kablosuz ağ adı";
const char* password = "Kablosuz ağ şifresi";
// Sunucu port numarası 80'e ayarlanır
WiFiServer server(80);
// Bağlantının sabit IP ile yapılması için ayarlar (Kendi ağınıza göre düzenleyiniz)
IPAddress staticIP(192,168,1,116);
IPAddress gateway(192,168,1,1);
IPAddress subnet(255,255,255,0);
// HTTP isteklerini için değişken tanımı
String header;
// Çıkışların durumlarını kaydedecek değişkenler
String output5State = "off";
String output4State = "off";
// Çıkış değişkenlerine pin numarası atanması
const int output5 = 0;
const int output4 = 2;
// Geçerli zaman
unsigned long currentTime = millis();
// Önceki zaman
unsigned long previousTime = 0;
// Bekleme süresinin mili saniye cinsinden ayarlanması (örnek: 2000ms = 2s)
const long timeoutTime = 2000;
void setup() {
Serial.begin(115200);
// Pinlerin çıkış olarak ayarlanması
pinMode(output5, OUTPUT);
pinMode(output4, OUTPUT);
// Çıkışların düşük olarak ayarlanması
digitalWrite(output5, LOW);
digitalWrite(output4, LOW);
// Wi-Fi ağına SSID ve password ile bağlanma
Serial.print("Connecting to ");
Serial.println(ssid);
WiFi.config(staticIP, gateway, subnet);
WiFi.begin(ssid, password);
while (WiFi.status() != WL_CONNECTED) {
delay(500);
Serial.print(".");
}
// Web server IP adresinin seri porttan yazdırılması
Serial.println("");
Serial.println("WiFi connected.");
Serial.println("IP address: ");
Serial.println(WiFi.localIP());
server.begin();
}
void loop() {
WiFiClient client = server.available(); // Gelen istemci için dinleme
if (client) { // Eğer yeni bir istemci varsa,
Serial.println("New Client."); // Seri porttan bir mesaj verilir
String currentLine = ""; // İstemciden gelenleri tutmak için değişken tanımlanır
currentTime = millis();
previousTime = currentTime;
while (client.connected() && currentTime - previousTime <= timeoutTime) { // loop while the client's connected
currentTime = millis();
if (client.available()) { // Eğer istemciden okunan bayt varsa,
char c = client.read(); // Bir bayt oku, sonra
Serial.write(c); // Seri porttan yazdır
header += c;
if (c == '\n') { // Eğer bayt yeni satır işareti ise
// Eğer gelen satır boşsa, ozaman iki yeni satır işareti alınır.
// Bu, istemci HTTP isteğinin sonudur, bu nedenle bir yanıt gönderin:
if (currentLine.length() == 0) {
// HTTP başlıkları her zaman bir yanıt koduyla başlar (HTTP/1.1 200 OK gibi)
// ve istemcinin ne geleceğini bilmesini sağlayacak bir içerik türü, ardından boş bir satır:
client.println("HTTP/1.1 200 OK");
client.println("Content-type:text/html");
client.println("Connection: close");
client.println();
if (header.indexOf("GET / HTTP/1.1") >= 0) {
// HTML web sayfasını görüntüle
client.println("<!DOCTYPE html><html>");
client.println("<head><meta name=\"viewport\" charset=\"UTF8\" content=\"width=device-width, initial-scale=1\">");
client.println("<link rel=\"icon\" href=\"data:,\">");
// Açma/kapama düğmelerini biçimlendirmek için CSS kodları
// Tercihlerinize uyacak şekilde arka plan rengi ve yazı tipi boyutu niteliklerini değiştirmekten çekinmeyin
client.println("<style>html { font-family: Helvetica; display: inline-block; margin: 0px auto; text-align: center;}");
client.println(".button { background-color: #195B6A; border: none; color: white; padding: 16px 40px;");
client.println("text-decoration: none; font-size: 30px; margin: 2px; cursor: pointer;}");
client.println(".button2 {background-color: #FF0000;}</style></head>");
// Web sayfası başlığı
client.println("<body><h1>ESP8266 Web Server</h1>");
client.println("<p>GPIO durumu</p>");
if (output5State=="off"){
client.println("<p id=\"dugme1\">LED1: <button class=\"button\" onclick=btn(\"LED1on\")>ON</button></p>");
}
else {
client.println("<p id=\"dugme1\">LED1: <button class=\"button button2\" onclick=btn(\"LED1off\")>OFF</button></p>");
}
if (output4State=="off"){
client.println("<p id=\"dugme2\">LED2: <button class=\"button\" onclick=btn(\"LED2on\")>ON</button></p>");
} else {
client.println("<p id=\"dugme2\">LED2: <button class=\"button button2\" onclick=btn(\"LED2off\")>OFF</button></p");
}
client.println("<p></p>");
client.println("<script>");
client.println("function btn(str) {");
client.println("var istek = new XMLHttpRequest();");
client.println("istek.open(\"GET\", \"dosya.php?q=\" + str, true);");
client.println("istek.send();");
client.println("istek.onreadystatechange = function() {");
client.println("if (this.readyState == 4 && this.status == 200) {");
client.println("var donus=this.responseText.trim();");
client.println("switch(donus){");
client.println("case \"LED1on\" :");
client.println("document.getElementById(\"dugme1\").innerHTML = 'LED1: <button class=\"button button2\" onclick=btn(\"LED1off\")>OFF</button>';");
client.println("break;");
client.println("case \"LED1off\" :");
client.println("document.getElementById(\"dugme1\").innerHTML = 'LED1: <button class=\"button\" onclick=btn(\"LED1on\")>ON</button>';");
client.println("break;");
client.println("case \"LED2on\" :");
client.println("document.getElementById(\"dugme2\").innerHTML = 'LED2: <button class=\"button button2\" onclick=btn(\"LED2off\")>OFF</button>';");
client.println("break;");
client.println("case \"LED2off\" :");
client.println("document.getElementById(\"dugme2\").innerHTML = 'LED2: <button class=\"button\" onclick=btn(\"LED2on\")>ON</button>';");
client.println("break;}}}");
client.println("setTimeout(btn, 1000, \"ghi\");}");
client.println("setTimeout(btn, 1000, \"ghi\");");
client.println("</script></body></html>");
// HTTP yanıtı başka bir boş satırla sona eriyor
client.println();
}
// GPIO'ları açıp ve kapatılması
if (header.indexOf("LED1on") >= 0) {
Serial.println("GPIO 5 on");
output5State = "on";
digitalWrite(output5, HIGH);
client.println("LED1on");
} else if (header.indexOf("LED1off") >= 0) {
Serial.println("GPIO 5 off");
output5State = "off";
digitalWrite(output5, LOW);
client.println("LED1off");
} else if (header.indexOf("LED2on") >= 0) {
Serial.println("GPIO 4 on");
output4State = "on";
digitalWrite(output4, HIGH);
client.println("LED2on");
} else if (header.indexOf("LED2off") >= 0) {
Serial.println("GPIO 4 off");
output4State = "off";
digitalWrite(output4, LOW);
client.println("LED2off");
}
// While döngüsünden çıkın
break;
} else { // eğer yeni bir satır aldıysa, o zaman currentLine'ı temizlenir
currentLine = "";
}
} else if (c != '\r') { // eğer satır başı karakterinden başka bir karakter varsa,
currentLine += c; // onu currentLine'ın sonuna ekle
}
}
}
// Header değişkenini temizle
header = "";
// Bağlantıyı kapat
client.stop();
Serial.println("Client disconnected.");
Serial.println("");
}
}