ESP8266 Tutorial Parte 3: Ejecución de un servidor web simple

Puede descargar nuestro libro electrónico ‘Aprender Arduino’ desde este enlace

La última vez que aprendió cómo conectar el ESP8266 a una red WiFi y descargar datos desde una URL. Hoy exploraremos una forma de escuchar conexiones como un servidor; un servidor web de hecho. El ESP escuchará las conexiones en el puerto 80 y brindará páginas simples a los clientes conectados. Para este ejemplo, se tomará un enfoque diferente para programar el ESP8266. La estructura que usamos en nuestro último tutorial era puramente procedimental. El problema con los programas estructurados por procedimientos es que es difícil y complicado manejar múltiples conexiones simultáneas. En este ejemplo, usaremos controladores que son una forma de estructurar nuestros programas para servir a múltiples clientes y al mismo tiempo mantener el código en buen estado.

El código escuchará las conexiones en el puerto 80, servirá una página web que muestra un enlace con «LED encendido» o «LED apagado». Una vez que se hace clic, el LED integrado se enciende o se apaga, respectivamente. El LED integrado está en GPIO 1, el pin utilizado por TXD, por lo que no podremos usar Serial.print() en nuestro programa.

Empezamos con lo básico. Cargando bibliotecas y conectándose a una red WiFi.

#include <ESP8266WiFi.h>  #include <WiFiClient.h>  #include <ESP8266WebServer.h>  #include <ESP8266mDNS.h>    const char* ssid = "your wifi SSID";  const char* password = "password";    ESP8266WebServer server(80);    MDNSResponder mdns;    String pageTurnOn = "<html><body><h1>LED is ON</h1><a href="/turnoff">Turn Off</a></body></html>";    String pageTurnOff = "<html><body><h1>LED is OFF</h1><a href="/turnon">Turn On</a></body></html>";    void setup() {      pinMode(LED_BUILTIN, OUTPUT);      WiFi.begin(ssid, password);       delay(1000);      while (WiFi.status() != WL_CONNECTED) {      delay(200);        //a flashing LED means the ESP is not connected      digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));    }      //a stable LED on means the ESP is now connected    digitalWrite(LED_BUILTIN,true);      mdns.begin("esp8266", WiFi.localIP());    

No olvides cambiar el SSID y la CONTRASEÑA por los tuyos.

MDNSResponder nos permite nombrar nuestro ESP8266 y usarlo en lugar de la dirección IP. Piense en ello como un dominio local personal. El LED_BUILTIN es el LED a bordo del ESP que está conectado a GPIO1. “digitalWrite(LED_BUILTIN,!digitalRead(LED_BUILTIN));” la línea mantendrá el LED parpadeando hasta que se establezca una conexión a la red WiFi. Luego llamamos al MDNS para que nos permita usar el nombre “esp8266.local”. A continuación, definimos nuestros comandos, que son básicamente llamadas a una página web diferente.

  server.on("/turnon", [](){     server.send(200, "text/html", pageTurnOn);       digitalWrite(LED_BUILTIN,HIGH);     });     server.on("/turnoff", [](){     server.send(200, "text/html", pageTurnOff);       digitalWrite(LED_BUILTIN,LOW);   });       server.onNotFound([](){         server.send(404, "text/html", "Command Not Found");       });      server.begin();    }    void loop(void){    server.handleClient();  }    

La estructura server.on actúa como eventos. Cuando se cumple un cierto criterio (la página), ejecuta algunos comandos.

servidor.on(“/activar”, [](){
server.send(200, “text/html”, pageTurnOn);
digitalWrite(LED_BUILTIN, ALTO);
});

Las líneas en rojo son parte de la declaración del controlador, mientras que las verdes son las operaciones que se ejecutarán una vez que se active este controlador.

El server.send es el comando que usamos para enviar la página web a los clientes. El 200 es el código de error del servidor HTTP que en este caso está bien. El segundo es el tipo de datos llamado tipo mime.

Ahora se puede acceder a nuestro servidor desde esta url http://esp8266.local/turnon

Cuando accedemos a esp8266.local/turnon se enciende el LED y se envía al cliente la página con texto en pageTurnOn var, y se proporciona un enlace para apagar el led.

El server.onNotFound es un controlador especial. Procesa solicitudes que no forman parte de ningún server.on. Entonces, el notFound se activa cuando no sabemos lo que el cliente nos envió. Esta vez estamos enviando un código de error diferente, error 404, No encontrado

¡Feliz codificación!