In acest articol vom incerca sa facem un mic server web cu ajutorul placi de dezvoltare ESP32. Placa folosita in acest exemplu este ESP32-WROOM-32E iar in Arduino IDE vom alege ca si placa esp32-wroom-da module.

    O poza cu modulul folosit este mai jos:

    Codul sursa folosit este cel de mai jos:

#include <WiFi.h>
const char* ssid = "ReteauaTa";
const char* password = "ParolaTa";
WiFiServer server(80);

void setup() {
  Serial.begin(115200);

  Serial.println("\n\n\n");
  Serial.println("======================================");
  Serial.println("ESP32 - SERVER WEB");
  Serial.println("======================================");

  Serial.print("Conectare la ");
  Serial.println(ssid);

  WiFi.begin(ssid, password);

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

  Serial.println("");
  Serial.println("WiFi CONECTAT!");
  Serial.print("Adresa IP: ");
  Serial.println(WiFi.localIP());

  server.begin();
  Serial.println("Server web pornit pe port 80");
  Serial.println("Accesează: http://" + WiFi.localIP().toString());
  Serial.println("======================================");

}

void loop() {
  WiFiClient client = server.available();

  if (client) {
    Serial.println("Client nou conectat!");
    
    String currentLine = "";
    String request = "";
    bool gotRequest = false;
    
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        
         if (!gotRequest) {
          request += c;
          if (c == '\n') {
            gotRequest = true;
            Serial.print("Request: ");
            Serial.println(request);
            
            processRequest(request, client);
            break;
          }
        } 
      }
    }
    
    delay(10);
    client.stop();
    Serial.println("Client deconectat");
    Serial.println("----------------------");
  } 
}

void processRequest(String request, WiFiClient &client) {
    if (request.indexOf("GET / ") != -1 || request.indexOf("GET /index") != -1) {
    sendMainPage(client);
  } 
  else if (request.indexOf("GET /info") != -1) {
    sendInfoPage(client);
  }
  else if (request.indexOf("GET /test") != -1) {
    sendTestPage(client);
  }
  else {
    send404Page(client);
  }
}


void sendMainPage(WiFiClient &client) {
  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();
 
  
  String html = "<!DOCTYPE html>";
  html += "<html lang='ro'>";
  html += "<head>";
  html += "<meta charset='UTF-8'>";
  html += "<meta name='viewport' content='width=device-width, initial-scale=1.0'>";
  html += "<title>ESP32 Server</title>";
  html += "<style>";
  html += "body { font-family: Arial, sans-serif; margin: 0; padding: 20px; background: #f5f5f5; }";
  html += ".container { max-width: 800px; margin: 0 auto; background: white; padding: 30px; border-radius: 10px; box-shadow: 0 2px 10px rgba(0,0,0,0.1); }";
  html += "h1 { color: #333; text-align: center; }";
  html += ".status { background: #e8f5e9; padding: 15px; border-radius: 5px; margin: 20px 0; }";
  html += ".btn { display: inline-block; padding: 12px 24px; margin: 10px 5px; text-decoration: none; border-radius: 5px; font-weight: bold; }";
  html += ".btn-info { background: #9C27B0; color: white; }";
  html += ".menu { text-align: center; margin: 20px 0; }";
  html += "footer { margin-top: 30px; text-align: center; color: #666; font-size: 0.9em; }";
  html += "</style>";
  html += "</head>";
  html += "<body>";
  html += "<div class='container'>";
  html += "<h1>ESP32 Web Server</h1>";
  
  html += "<div class='status'>";
  html += "<h3>Status Sistem</h3>";
  html += "<p><strong>IP:</strong> " + WiFi.localIP().toString() + "</p>";
  html += "<p><strong>Wi-Fi:</strong> " + String(WiFi.RSSI()) + " dBm</p>";
  html += "<p><strong>Timp functionare:</strong> " + String(millis() / 1000) + " secunde</p>";
  html += "</div>";
  
  
  html += "<div class='menu'>";
  html += "<h3>🔗 Navigare</h3>";
  html += "<a href='/info' class='btn btn-info'>Informatii</a>";
  html += "<a href='/test' class='btn'>Testare</a>";
  html += "</div>";
  
  html += "<footer>";
  html += "<p>ESP32 Web Server | Conectat la: <strong>" + String(WiFi.SSID()) + "</strong></p>";
  html += "<p>Accesat la: " + String(millis() / 1000) + " secunde de la pornire</p>";
  html += "</footer>";
  
  html += "</div>";
  html += "</body>";
  html += "</html>";
  
  client.println(html);
}

void sendTestPage(WiFiClient &client) {
  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();
  
  String html = "<!DOCTYPE html>";
  html += "<html>";
  html += "<head><title>Pagina de test</title>";
  html += "<style>body { text-align: center; margin-top: 100px; font-family: Arial; }</style>";
  html += "</head>";
  html += "<body>";
  html += "<h1 style='color: #4CAF50; font-size: 3em;'>Pagina de test</h1>";
  html += "<p style='font-size: 1.5em;'>Acesta este un server web realizat cu ajutorul lui ESP32!</p>";
  html += "<p>IP: " + WiFi.localIP().toString() + "</p>";
  html += "<p style='margin-top: 50px;'>";
  html += "<a href='/' style='padding: 10px 20px; background: #4CAF50; color: white; text-decoration: none;'>Inapoi acasa</a>";
  html += "</p>";
  html += "</body>";
  html += "</html>";
  
  client.println(html);
}


void sendInfoPage(WiFiClient &client) {
  client.println("HTTP/1.1 200 OK");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();
  
  String html = "<!DOCTYPE html>";
  html += "<html>";
  html += "<head><title>Informatii Sistem</title></head>";
  html += "<body style='font-family: Arial; margin: 30px;'>";
  html += "<h1>Informatii Sistem ESP32</h1>";
  
  html += "<table border='1' cellpadding='10' style='border-collapse: collapse; width: 100%;'>";
  html += "<tr style='background: #f0f0f0;'><th>Parametru</th><th>Valoare</th></tr>";
  html += "<tr><td><strong>Adresa IP</strong></td><td>" + WiFi.localIP().toString() + "</td></tr>";
  html += "<tr><td><strong>SSID Wi-Fi</strong></td><td>" + String(WiFi.SSID()) + "</td></tr>";
  html += "<tr><td><strong>Putere semnal (RSSI)</strong></td><td>" + String(WiFi.RSSI()) + " dBm</td></tr>";
  html += "<tr><td><strong>Adresa MAC</strong></td><td>" + WiFi.macAddress() + "</td></tr>";
  html += "<tr><td><strong>Gateway IP</strong></td><td>" + WiFi.gatewayIP().toString() + "</td></tr>";
  html += "<tr><td><strong>Subnet Mask</strong></td><td>" + WiFi.subnetMask().toString() + "</td></tr>";
  html += "<tr><td><strong>Memorie RAM libera</strong></td><td>" + String(ESP.getFreeHeap()) + " bytes</td></tr>";
  html += "<tr><td><strong>Frecventa CPU</strong></td><td>" + String(ESP.getCpuFreqMHz()) + " MHz</td></tr>";
  html += "<tr><td><strong>Timp functionare</strong></td><td>" + String(millis() / 1000) + " secunde</td></tr>";
  html += "</table>";
  
  html += "<p style='margin-top: 20px;'>";
  html += "<a href='/' style='padding: 10px 20px; background: #2196F3; color: white; text-decoration: none;'>Pagina Principala</a>";
  html += "</p>";
  
  html += "</body>";
  html += "</html>";
  
  client.println(html);
}


void send404Page(WiFiClient &client) {
  client.println("HTTP/1.1 404 Not Found");
  client.println("Content-type:text/html");
  client.println("Connection: close");
  client.println();
  
  String html = "<!DOCTYPE html>";
  html += "<html>";
  html += "<head><title>404 - Pagina negasita</title></head>";
  html += "<body style='text-align: center; margin-top: 50px;'>";
  html += "<h1 style='color: red;'>404 - Pagina nu a fost gasita</h1>";
  html += "<p>Pagina pe care o cauti nu exista.</p>";
  html += "<p><a href='/'>Mergi la pagina principala</a></p>";
  html += "</body>";
  html += "</html>";
  
  client.println(html);
}

    Dupa incarcarea acestui cod in placa de dezvoltare in terminalul serial vom vedea daca s-a realizat conexiunea la reteaua wireless cat si adresa ip a acestui server web.

    In functie de adresa ip locala adresa ip a serverului poate sa difere. In acest caz adresa de conectare este urmatoarea: 192.168.0.118, asa cum reiese din terminalul serial.

    Daca vom accesa aceasta adresa vom vedea urmatoarea pagina:

    In partea de jos a paginii avem si 2 linkuri: Informatii si Testare. Daca vom accesa linkul Informatii vom vedea aceasta pagina:

    Dupa ce revenim la pagina principala putem testa si pagina Testare. Aceasta va arata in acest fel:

    In cazul in care gresim linkul si incercam sa accesam o pagina care nu exista se va afisa o pagina de eroare:

Nu sunt comentarii

Acest website foloseste cookie-uri pentru o experienta placuta in timpul navigarii.