ESP32 - Controla LED vía web

En este tutorial, vamos a aprender cómo controlar un LED a través de una interfaz web utilizando un navegador en una PC o teléfono inteligente, empleando el ESP32. En detalle, el ESP32 se programará para funcionar como un servidor web. Supondremos que la dirección IP del ESP32 es 192.168.0.2. A continuación se presentan los detalles de cómo funciona:

Navegador web LED para ESP32

Aprenderemos a través de dos códigos de ejemplo:

El tutorial ofrece los fundamentos que puedes personalizar de forma rápida e innovadora para lograr lo siguiente:

Hardware Requerido

1×Módulo de Desarrollo ESP32 ESP-WROOM-32
1×Cable USB Tipo-A a Tipo-C (para PC USB-A)
1×Cable USB Tipo-C a Tipo-C (para PC USB-C)
1×LED Kit
1×LED (red)
1×LED Module
1×220Ω Resistor
1×Protoboard
1×Cables Puente
1×(Recomendado) Placa de Expansión de Terminales de Tornillo para ESP32
1×(Recomendado) Breakout Expansion Board for ESP32
1×(Recomendado) Divisor de Alimentación para ESP32

Or you can buy the following kits:

1×DIYables ESP32 Starter Kit (ESP32 included)
1×DIYables Sensor Kit (30 sensors/displays)
1×DIYables Sensor Kit (18 sensors/displays)
Divulgación: Algunos de los enlaces proporcionados en esta sección son enlaces de afiliado de Amazon. Podemos recibir una comisión por las compras realizadas a través de estos enlaces sin costo adicional para usted. Apreciamos su apoyo.

Buy Note: Use the LED Module for easier wiring. It includes an integrated resistor.

Acerca de LED y ESP32

Si no conoces LED y ESP32 (disposición de pines, cómo funciona, cómo programar ...), aprende sobre ellos en los siguientes tutoriales:

Diagrama de Cableado

Diagrama de cableado de LED para ESP32

This image is created using Fritzing. Click to enlarge image

Si no sabe c\u00f3mo alimentar ESP32 y otros componentes, encuentre instrucciones en el siguiente tutorial: C\u00f3mo alimentar ESP32.

Código ESP32 - El contenido HTML está incrustado en el código ESP32

/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-controls-led-via-web */ #include <DIYables_ESP32_WebServer.h> #define LED_PIN 18 // ESP32 pin GPIO18 connected to LED int LED_state = LOW; // WiFi credentials const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create web server instance DIYables_ESP32_WebServer server; // Page handlers String getHTML() { String html = "<!DOCTYPE HTML>"; html += "<html>"; html += "<head>"; html += "<link rel='icon' href='data:,'>"; html += "</head>"; html += "<p>LED state: <span style='color: red;'>"; if (LED_state == LOW) html += "OFF"; else html += "ON"; html += "</span></p>"; html += "<a href='/led1/on'>Turn ON</a>"; html += "<br><br>"; html += "<a href='/led1/off'>Turn OFF</a>"; html += "</html>"; return html; } // home page void handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str()); } void handleLedOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); LED_state = HIGH; digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str()); } void handleLedOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); LED_state = LOW; digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str()); } void setup() { Serial.begin(9600); delay(1000); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LED_state); Serial.println("ESP32 Web Server"); // Configure routes server.addRoute("/", handleHome); server.addRoute("/led1/on", handleLedOn); server.addRoute("/led1/off", handleLedOff); // Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD); } void loop() { server.handleClient(); // Your code here }

Pasos R\u00e1pidos

  • Si es la primera vez que usas ESP32, consulta cómo configurar el entorno para ESP32 en Arduino IDE.
  • Realiza el cableado como en la imagen anterior.
  • Conecta la placa ESP32 a tu PC mediante un cable micro USB.
  • Abre el IDE de Arduino en tu PC.
  • Selecciona la placa ESP32 adecuada (p. ej. ESP32 Dev Module) y el puerto COM.
  • Abre el Administrador de Bibliotecas haciendo clic en el icono Library Manager en la barra de navegación izquierda del IDE de Arduino.
  • Busca “DIYables ESP32 WebServer”, luego encuentra la biblioteca Web Server creada por DIYables.
  • Haz clic en el botón Install para instalar la biblioteca Web Server.
Biblioteca del servidor web para ESP32
  • Copia el código anterior y ábrelo con el IDE de Arduino
  • Cambia la información de Wi-Fi (SSID y contraseña) en el código por la tuya
  • Haz clic en el botón Subir en el IDE de Arduino para subir el código al ESP32
  • Abre el Monitor serie
  • Ver el resultado en el Monitor serie.
COM6
Send
Connecting to WiFi... Connected to WiFi ESP32 Web Server's IP address: 192.168.0.2
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Verás una dirección IP, por ejemplo: 192.168.0.2. Esta es la dirección IP del servidor web ESP32
  • Abre un navegador web y escribe uno de los tres formatos que se muestran a continuación en la barra de direcciones:
192.168.0.2
192.168.0.2/led1/on
192.168.0.2/led1/off
  • Por favor, tenga en cuenta que la dirección IP podría variar. Verifique el valor actual en el Monitor Serial.
  • También verá la salida que se muestra a continuación en el Monitor Serial.
COM6
Send
Connecting to WiFi... Connected to WiFi ESP32 Web Server's IP address: 192.168.0.2 ESP32 Web Server: New request recieved: GET / ESP32 Web Server: New request recieved: GET /led1/on ESP32 Web Server: New request recieved: GET /led1/off
Autoscroll Show timestamp
Clear output
9600 baud  
Newline  
  • Comprobar el estado del LED
  • Verá la página web de la placa ESP32 en el navegador web como se muestra a continuación
Navegador web LED para ESP32
  • Ahora ya puedes controlar el LED encendido/apagado a través de la interfaz web

Código ESP32 - El contenido HTML está separado del código ESP32

Dado que una página web gráfica contiene una gran cantidad de contenido HTML, incrustarlo en el código ESP32 como antes resulta inconveniente. Para abordar esto, necesitamos separar el código ESP32 y el código HTML en archivos diferentes:

  • El código ESP32 se colocará en un archivo .ino.
  • El código HTML (incluyendo HTML, CSS y JavaScript) se colocará en un archivo .h.

Pasos R\u00e1pidos

  • Abre el IDE de Arduino y crea un nuevo sketch. Dale un nombre, por ejemplo, newbiely.com.ino
  • Copia el código de abajo y ábrelo con el IDE de Arduino
/* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-controls-led-via-web */ #include <DIYables_ESP32_WebServer.h> #include "index.h" // Include the index.h file #define LED_PIN 18 // ESP32 pin GPIO18 connected to LED int LED_state = LOW; // WiFi credentials const char WIFI_SSID[] = "YOUR_WIFI_SSID"; const char WIFI_PASSWORD[] = "YOUR_WIFI_PASSWORD"; // Create web server instance DIYables_ESP32_WebServer server; // Page handlers String getHTML() { String html = webpage; // Use the HTML content from the index.h file html.replace("%LED_STATE%", LED_state ? "ON" : "OFF"); // update the led state return html; } // home page void handleHome(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); server.sendResponse(client, getHTML().c_str()); } void handleLedOn(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); LED_state = HIGH; digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str()); } void handleLedOff(WiFiClient& client, const String& method, const String& request, const QueryParams& params, const String& jsonData) { Serial.println("ESP32 Web Server: New request received"); LED_state = LOW; digitalWrite(LED_PIN, LED_state); server.sendResponse(client, getHTML().c_str()); } void setup() { Serial.begin(9600); delay(1000); pinMode(LED_PIN, OUTPUT); digitalWrite(LED_PIN, LED_state); Serial.println("ESP32 Web Server"); // Configure routes server.addRoute("/", handleHome); server.addRoute("/led1/on", handleLedOn); server.addRoute("/led1/off", handleLedOff); // Start web server with WiFi connection server.begin(WIFI_SSID, WIFI_PASSWORD); } void loop() { server.handleClient(); // Your code here }
  • Cambia la información de WiFi (SSID y contraseña) en el código por la tuya
  • Crea el archivo index.h en el IDE de Arduino mediante:
    • Haz clic en el botón justo debajo del icono del monitor serie y elige Nueva pestaña, o usa las teclas Ctrl+Shift+N.
    Arduino IDE 2 añade un archivo
    • Indique el nombre del archivo index.h y haga clic en el botón Aceptar
    Arduino IDE 2 añade el archivo index.h
    • Copia el código de abajo y pégalo en index.h.
    /* * Este código de ESP32 fue desarrollado por es.newbiely.com * Este código de ESP32 se proporciona al público sin ninguna restricción. * Para tutoriales completos y diagramas de cableado, visite: * https://es.newbiely.com/tutorials/esp32/esp32-controls-led-via-web */ #ifndef WEBPAGE_H #define WEBPAGE_H const char* webpage = R"=====( <!DOCTYPE HTML> <html> <head> <link rel='icon' href='data:,'> </head> <p>LED state: <span style='color: red;'>%LED_STATE%</span></p> <a href='/led1/on'>Turn ON</a> <br><br> <a href='/led1/off'>Turn OFF</a> </html> )====="; #endif
    • Ahora tienes el código en dos archivos: newbiely.com.ino y index.h
    • Haz clic en el botón Subir del IDE de Arduino para subir el código al ESP32
    • Accede a la página web de la placa ESP32 a través de un navegador en tu PC o teléfono, como antes. Verás que es similar al código anterior, como se muestra a continuación:
    Navegador web LED para ESP32

    ※ Nota:

    • Si modifica el contenido HTML en el index.h y no toca nada en el archivo newbiely.com.ino, al compilar y subir el código al ESP32, el IDE de Arduino no actualizará el contenido HTML.
    • Para que Arduino IDE actualice el contenido HTML en este caso, haga un cambio en el archivo newbiely.com.ino (p. ej., añadiendo una línea en blanco, añadiendo un comentario....)

    Puedes personalizar de forma rápida e innovadora el código anterior para lograr lo siguiente:

    • Controlando varios LEDs a través de la web
    • Rediseñando la interfaz de usuario web (UI)

※ NUESTROS MENSAJES

  • No dude en compartir el enlace de este tutorial. Sin embargo, por favor no use nuestro contenido en otros sitios web. Hemos invertido mucho esfuerzo y tiempo en crear el contenido, ¡por favor respete nuestro trabajo!