WelcomeHere.ro
NIVEL: INTERMEDIAR

Tutorial: Web Server pe ESP32 pentru Control LED

Un proiect clasic de IoT. Vom crea o pagină web simplă, găzduită direct de ESP32, care ne va permite să aprindem și să stingem un LED de la distanță, prin Wi-Fi.

Componente Necesare

  • 1x Placă de dezvoltare ESP32
  • 1x LED și un rezistor de 220Ω
  • 1x Breadboard și fire de legătură
  • Datele de conectare la rețeaua ta Wi-Fi (nume și parolă)

Asamblarea Circuitului

Circuitul este foarte simplu. Vom conecta un LED la unul dintre pinii GPIO, de exemplu pinul 2.

Schema circuitului

Codul Sursă

Înainte de a încărca codul, **modifică liniile cu numele rețelei (SSID) și parola** pentru a se potrivi cu rețeaua ta Wi-Fi. După încărcare, deschide Serial Monitor pentru a vedea adresa IP pe care o primește ESP32-ul. Introdu acea adresă într-un browser de pe un dispozitiv conectat la aceeași rețea.

#include 

// Modifica aceste date cu cele ale retelei tale
const char* ssid = "NUMELE_RETELEI_TALE";
const char* password = "PAROLA_RETELEI_TALE";

// Seteaza serverul web pe portul 80
WiFiServer server(80);

// Pinul la care este conectat LED-ul
const int ledPin = 2;

void setup() {
  Serial.begin(115200);
  pinMode(ledPin, OUTPUT);
  digitalWrite(ledPin, LOW); // Stinge LED-ul la inceput

  // Conectarea la Wi-Fi
  Serial.print("Conectare la ");
  Serial.println(ssid);
  WiFi.begin(ssid, password);
  while (WiFi.status() != WL_CONNECTED) {
    delay(500);
    Serial.print(".");
  }
  Serial.println("");
  Serial.println("Wi-Fi conectat.");
  
  // Porneste serverul
  server.begin();
  Serial.println("Server pornit");
  Serial.print("Adresa IP: ");
  Serial.println(WiFi.localIP());
}

void loop() {
  WiFiClient client = server.available(); // Asculta pentru clienti noi

  if (client) {
    Serial.println("Client nou.");
    String currentLine = ""; // String pentru a retine datele primite de la client
    while (client.connected()) {
      if (client.available()) {
        char c = client.read();
        if (c == '\n') { // Daca am ajuns la sfarsitul unei linii
          if (currentLine.length() == 0) { // si linia e goala, inseamna ca request-ul HTTP s-a terminat
            // Trimitem raspunsul HTTP (pagina web)
            client.println("HTTP/1.1 200 OK");
            client.println("Content-type:text/html");
            client.println("Connection: close");
            client.println();

            // Pagina HTML propriu-zisa
            client.println("");
            client.println("");
            client.println("");
            
            client.println("

ESP32 Web Server

"); // Afiseaza starea curenta a LED-ului if (digitalRead(ledPin) == HIGH) { client.println("

LED - ON

"); } else { client.println("

LED - OFF

"); } // Afiseaza butoanele ON si OFF client.println("

"); client.println("

"); client.println(""); // Raspunsul HTTP s-a terminat client.println(); break; // Iesim din bucla while } else { currentLine = ""; } } else if (c != '\r') { currentLine += c; } // Verificam ce buton a fost apasat if (currentLine.endsWith("GET /on")) { digitalWrite(ledPin, HIGH); } if (currentLine.endsWith("GET /off")) { digitalWrite(ledPin, LOW); } } } // Inchidem conexiunea client.stop(); Serial.println("Client deconectat."); } }