Nodemcu HTML çalışmıyor

Steve Rogers

Kilopat
Katılım
15 Nisan 2020
Mesajlar
4.080
Makaleler
5
Çözümler
51
Daha fazla  
Cinsiyet
Erkek
Meslek
.
@SideWinder hocam, Nodemcu'da basit bir HTML yazdım fakat çalışmıyor, sebebi ne olabilir? Dün laptop'da denediğimde olmuştu fakat şimdi masaüstü bilgisayarda olmuyor. Serial portta yazan IP adresini tarayıcının URL kısmına yazıyorum, böyle oluyor:
1607157188186.png


Bir de şey var; URL kısmına "http://192.168.1.25/led1on" yazdığımda LED yanıyor, "http://192.168.1.25/led1off" yazdığımda da LED kapanıyor.

Kodum bu:

C++:
#include <ESP8266WiFi.h>

WiFiClient client;
WiFiServer server(80);

#define led D1
#define led2 D2

void setup()
{
  Serial.begin(9600);
  WiFi.begin("WiFi-Isim", "Sifre");
  while(WiFi.status() != WL_CONNECTED)
  {
    delay(200);
    Serial.print("..");
  }
  Serial.println();
  Serial.println("NodeMCU is connected!");
  Serial.println(WiFi.localIP());
  server.begin();
  pinMode(led, OUTPUT);
  pinMode(led2, OUTPUT);
}

void loop()
{
  client = server.available();
  if (client == 1)
  {
    String request =  client.readStringUntil('\n');
    Serial.println(request);
    request.trim();
    if(request == "GET /led1on HTTP/1.1")
    {
      digitalWrite(led, HIGH);
    }
    if(request == "GET /led1off HTTP/1.1")
    {
      digitalWrite(led, LOW);
    }
    if(request == "GET /led2on HTTP/1.1")
    {
      digitalWrite(led2, HIGH);
    }
    if(request == "GET /led2off HTTP/1.1")
    {
      digitalWrite(led2, LOW);
    }
  }
  client.println("<html>");
  client.println("");
  client.println("<!DOCTYPE HTML>");
  client.println("<h1>Web Siteme hoşgeldin!</h1>");
  client.println("<br>");
  client.print("<h3>Led kontrolleri:</h3>");
  client.print("<a href=\"/led1on\"\"><button>Ac, Led1</button></a>");
  client.println("<a href=\"/led1off\"\"><button>Kapa, Led1</button></a>");
  client.print("<a href=\"/led2on\"\"><button>Ac, Led2</button></a>");
  client.println("<a href=\"/led2off\"\"><button>Kapa, Led2</button></a>");
  client.println("</html>");
}

İnternetten aldığım farklı bir kod çalışıyor. Yani bu kodda bir şey var sanırım.
 
Burada bir <html> tagını fazladan koymuşsunuz.(Sanırım.)

HTML:
client.println("<html>");
client.println("");
client.println("<!DOCTYPE HTML>");
Hocam, aynı kodla dün sıkıntısız çalışıyordu. Şimdi neden çalışmıyor anlam veremiyorum. @SideWinder hocam, bakabilir misiniz?
 
/led1on ve /led2on kodlarını URL kısmının sonuna ekleyince sıkıntısız çalışıyor. Aynı kod dün çalışmıştı, bugün çalışmayınca anlam veremedim.
İnternetten aldığım başka bir kod ise sıkıntısız çalıştı. Neden olduğunu anlamadım.
Çalışan kod:
C++:
#include <ESP8266WiFi.h>
#include <ESP8266WebServer.h>

/*Put your SSID & Password*/
const char* ssid = ".....";  // Enter SSID here
const char* password = "....";  //Enter Password here

ESP8266WebServer server(80);

uint8_t LEDpin = D1;
bool LEDstatus = LOW;

void setup() {
  Serial.begin(9600);
  delay(100);
  pinMode(LEDpin, OUTPUT);

  Serial.println("Connecting to ");
  Serial.println(ssid);

  //connect to your local wi-fi network
  WiFi.begin(ssid, password);

  //check wi-fi is connected to wi-fi network
  while (WiFi.status() != WL_CONNECTED) {
  delay(1000);
  Serial.print(".");
  }
  Serial.println("");
  Serial.println("WiFi connected..!");
  Serial.print("Got IP: ");  Serial.println(WiFi.localIP());

  server.on("/", handle_OnConnect);
  server.on("/ledon", handle_ledon);
  server.on("/ledoff", handle_ledoff);
  server.onNotFound(handle_NotFound);

  server.begin();
  Serial.println("HTTP server started");
}
void loop() {
  server.handleClient();
  if(LEDstatus)
  digitalWrite(LEDpin, HIGH);
  else
  digitalWrite(LEDpin, LOW);
}

void handle_OnConnect() {
  LEDstatus = LOW;
  server.send(200, "text/html", SendHTML(false));
}

void handle_ledon() {
  LEDstatus = HIGH;
  server.send(200, "text/html", SendHTML(true));
}

void handle_ledoff() {
  LEDstatus = LOW;
  server.send(200, "text/html", SendHTML(false));
}

void handle_NotFound(){
  server.send(404, "text/plain", "Not found");
}

String SendHTML(uint8_t led){
  String ptr = "<!DOCTYPE html>\n";
  ptr +="<html>\n";
  ptr +="<head>\n";
  ptr +="<title>LED Control</title>\n";
  ptr +="</head>\n";
  ptr +="<body>\n";
  ptr +="<h1>LED</h1>\n";
  ptr +="<p>Click to switch LED on and off.</p>\n";
  ptr +="<form method=\"get\">\n";
  if(led)
  ptr +="<input type=\"button\" value=\"LED OFF\" onclick=\"window.location.href='/ledoff'\">\n";
  else
  ptr +="<input type=\"button\" value=\"LED ON\" onclick=\"window.location.href='/ledon'\">\n";
  ptr +="</form>\n";
  ptr +="</body>\n";
  ptr +="</html>\n";
  return ptr;
}
 
String SendHTML(uint8_t led){
String ptr = "<!DOCTYPE html>\n";
ptr +="<html>\n";
ptr +="</html>\n";
return ptr;
}

HTML:
client.println("<html>");
  client.println("");
  client.println("<!DOCTYPE HTML>");

İlk yazımın bu şekildeydi. DOCTYPE kullanımını <html> taglarından önce kullanmalısın. Daha önce de bağlanabiliyorsan aynı kodla; muhtemelen içerikte bir sorun yok.
 
Kodu böyle değiştirdim:
C++:
client.println("<!DOCTYPE HTML>");
  client.println("<html>");
  client.println("<h1>Web Siteme hosgeldin!</h1>");
  client.println("<br>");
  client.print("<h3>Led kontrolleri:</h3>");
  client.print("<a href=\"/led1on\"\"><button>Ac, Led1</button></a>");
  client.println("<a href=\"/led1off\"\"><button>Kapa, Led1</button></a>");
  client.print("<a href=\"/led2on\"\"><button>Ac, Led2</button></a>");
  client.println("<a href=\"/led2off\"\"><button>Kapa, Led2</button></a>");
  client.println("</html>");
Yine aynı, URL kısmından kod girince çalışıyor LED'ler.
1607168533672.png

Hatta buradan da verileri alabiliyorum. İlginç olan şey, dün kod sıkıntısız çalıştı. Hatta "Hoşgeldiniz" yazarken "ş" kullandığım için garip harfler de gelmişti, sonra "s" yapmıştım "ş"yi. Şimdi neden çalışmıyor anlamıyorum.
 
Kodunda Web sayfası oluşturmak için bir yer olduğunu düşünmüyorum. Yani HTML kısmı çalışmıyor gibi. Kendin sıfırdan yazmaya çalışma da, hazır bir örnek alıp onun üzerinden geliştir. Çünkü ESP8266 için olan kodlar farklılık gösterebiliyor normalden.

İşin URL kısmı ise HTML ile alakalı değil, o nedenle çalışması normal.

Şu örneğe bakabilirsin:

 

Yeni konular

Geri
Yukarı