Ya sabemos como usar un cliente WiFi para conectarnos a Internet y poder recoger datos o ejecutar acciones sobre servidores con el ESP8266. Veamos ahora cómo configurar el ESP8266 como un servidor web y poder manejarlo remotamente.
Para ello veamos el ejemplo WiFiWebServer que podemos encontrar en Archivos – Ejemplos – ESP8266WiFi – WiFiWebServer.
Este ejemplo muestra cómo hacer un servidor web en el ESP8266 y mostrar una web una vez el ESP8266 se ha conectado a una red WiFi de un punto de acceso.
La clase server crea servidores que proporcionan información a los clientes conectados:

Una vez conectado el ESP8266 a una wifi se inicia el servidor con server.begin(); y para saber la IP asignada uso la instrucción Serial.println(WiFi.localIP());
Dentro de loop, para saber cuando un cliente se conecta al servidor iniciado uso la instrucción WiFiClient client = server.available(); https://www.arduino.cc/en/Reference/WiFiServerAvailable y en la variable client corresponde al cliente conectado a nuestro servidor.
Una vez se ha conectado un cliente uso la instrucción String req = client.readStringUntil(‘\r’); donde guardo en req lo que manda el cliente que en este caso es el navegador que se ha conectado a nuestro ESP8266.
En función de la petición hecha, el ESP8266 enciende o apaga el led colocado en el pin 2.
Una vez ejecutada la acción solicitada manda la respuesta con una página web simple:
HTTP/1.1 200 OK
Content-Type: text/html
<!DOCTYPE HTML>
<html>
GPIO is now on
</html>
Ejercicio Propuesto: modifica el ejemplo para que encienda y apague el led integrado en la placa que es LED_BUILTIN y si sabes un poco de html, hacerlo con un botón mostrado por el servidor.
Solución: https://github.com/jecrespo/aprendiendoarduino-curso-esp8266-youtube/blob/master/WiFiWebServerMejorado/WiFiWebServerMejorado.ino
En este caso la web mostrada por el ESP8266 es:
<!DOCTYPE html>
<html>
<body>
<p>LED APAGADO</p>
<form action=»» method=»post»>
<input type=»submit» value=»Enciende Led» />
</form>
</body>
</html>
Cuando se solicita la web se hace mediante GET y cuando se pulsa el botón se hace mediante POST, de esta forma se diferencian las acciones. También se hace una función muestraWeb() encarga de mandar la web cuando se solicite.