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.
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.");
}
}