Cómo emplear el ESP8266 como servidor HTTP


En esta entrada vamos a empezar a ver el uso de ESP8266 como servidor, uno de los roles más habituales en los que vamos a emplear y que, ya adelantamos, va a ocuparnos unas cuantas entradas.

En la entrada anterior sobre el ESP8266 vimos el funcionamiento como cliente y remarcamos que, aunque a veces es un rol olvidado, es tan importante como el de servidor.

Recordar que en una M2M (machine to machine) el cliente es el dispositivo que inicia la conexión. Por su parte, el servidor recibe las peticiones de los clientes, ejecuta las acciones oportunas en el backend, y devuelve una respuesta.

¿Para qué usarlo cómo servidor?

En este caso, vamos a emplear el ESP8266 como servidor. Por tanto, el ESP8266 servidor va a estar permanentemente encendido y a recibir peticiones de los clientes (por ejemplo, un ordenador, un móvil u otro ESP8266).

Los clientes se conectan con el ESP8266 servidor y realizan una petición HTTP a una URI. Opcionalmente envían información sobre la petición como parámetros.

Anuncio:

El ESP8266 servidor recibe y procesa la petición, ejecuta las acciones oportunas en el backend (encender un LED, mover un motor, leer un sensor) y devuelve una respuesta al cliente.

En muchas ocasiones, el servidor va a devolver un fichero HTML para renderizarse en el cliente (frontend). Pero remarcar que no siempre es así. Alguna (o todas) de las URIs pueden ser simplemente endpoints que ofrecen un API al cliente.

Como vemos, hay bastante mandanga que explicar, y nos va a ocupar unas cuantas entradas, de más a menos fácil. Empezamos por lo más sencillo, como montar un servidor simple con el ESP8266.

ESP8266 como servidor sencillo

De forma similar a lo que pasaba al actuar como cliente y la librería ESP8266HTTPClient, el uso del ESP8266 como servidor es muy sencillo gracias al trabajo de la comunidad en el desarrollo de la librería ESP8266WebServer.

Para usarla primero debemos instanciar un objeto de la clase ESP8266WebServer a través de uno de sus constructores.

E iniciarlo a través de una de sus funciones ‘begin(…)’

A continuación, tenemos que definir los «ruteos», es decir, la asociación entre la URI de la petición y la acción de callback que se ejecutará. Para ello disponemos de las funciones ‘on(…)’, que establecen los ruteos.

Posteriormente, en el Loop, simplemente debemos llamar a la función ‘handleClient()’ que se encarga de recibir las peticiones de los clientes y lanzar las funciones de callback asociadas en el ruteo.

Para enviar la respuesta al cliente empleamos las funciones ‘send(…)’. Finalmente, podemos finalizar la conexión del cliente con ‘close()’ o parar el servidor por completo con ‘stop()’.

Ejemplo

Vamos a verlo mejor con un ejemplo práctico, un típico y sencillo ‘Hola mundo’. En este ejemplo nos conectamos al WiFi, y creamos un servidor en el puerto 80. A continuación definimos 2 endpoints, ‘/’ y ‘/inline’, y una función default para el caso en que se solicite una URI no reconocida.

Si cargamos este programa en el ESP8266 veremos que nos indica la dirección IP de nuestro dispositivo.

Ahora, si nos conectamos con un navegador a esta dirección IP veremos el contenido servido desde el ESP8266.

¡Enhorabuena, ya tenéis un servidor correctamente configurado!

ESP8266WebServer en detalle

Los métodos ‘on(…)’ admiten distintas sobrecargas que permiten, por ejemplo, distinguir el tipo de petición recibida.

Por su parte, las funciones ‘send(…) también tienen distintas variantes con diferentes parámetros

Siendo:

  • Code: Código de respuesta HTTP (200, 301, 303, 404…)
  • Type: Tipo de contenido HTTP (text/plain, text/html, text/json, image/png…)
  • Content: El contenido del cuerpo de la respuesta.

También tenemos otras funciones para enviar datos al cliente que son útiles, por ejemplo, para enviar la información en varias instrucciones del ESP8266.

Por otro lado, tenemos funciones para recibir los parámetros de la petición, como veremos en la siguiente entrada.

Y funciones para obtener y gestionar las cabeceras de la petición HTTP.

Como veis, la clase ESP8266WebServer da mucho más juego de lo que parece y convierte al ESP8266, pese a sus limitaciones de memoria y procesado, es un auténtico servidor con una gran cantidad de opciones.

En la siguiente entrada de la serie del ESP8266 continuaremos profundizando en el ESP8266 como servidor recibiendo e interpretando distintos tipos de peticiones y sus parámetros. ¡Hasta pronto!

Anuncio:

Previous WinSCP, transfiere archivos entre Windows y Rasperry Pi
Next Librería de Arduino I2C Scanner
1000
1 Comment threads
1 Thread replies
0 Followers
 
Most reacted comment
Hottest comment thread
2 Comment authors
newest oldest
Nicolás

Hola, estoy siguiendo cada uno de tus publicaciones y estoy quedando encantado con todas estas publicaciones, estoy haciendo cada uno de tus ejemplos, y quisiera saber si puedes llegar a hacer una en la que le llegue informacion a estos servidores y la guarden en alguna base de datos, quisiera que nos enseles a como manejar estas bases de datos o como crearlas, tu me entiendes, gracias nuevamnete por tu tiempo y dedicación con estas entregas