Cómo emplear un ESP8266 como cliente de un API REST con Json


Continuamos con la sección del ESP8266 y empezamos a meternos en "asuntos serios" de verdad, ya que nos toca ver cómo emplear el ESP8266 como cliente de un API REST que proporcione información a través de ficheros Json.

En las últimas entradas hemos visto múltiples formas de conectar un ESP8266 como servidor con una página web servida al cliente. Así, vimos Ajax y Websockets asíncronos. También vimos en su día cómo emplear el ESP8266 como cliente HTTP.

Como hemos comentado en esta serie de entradas para comunicar dos dispositivos a través de HTTP el servidor tiene que proporcionar un cierto API a través de endpoints. Actualmente lo más habitual es emplear un API REST y el intercambio de información se realice mediante ficheros Json.

Siendo la tendencia a seguir, lo lógico es que en nuestros proyectos con ESP8266 seamos capaces de interactuar y obtener datos de un API REST. Esto es, precisamente, lo que vamos a hacer en esta primera entrada, viendo como actuar como cliente. En la siguiente veremos como servir un API REST desde el ESP8266.

Anuncio:

Imaginad, por ejemplo, que tenéis una Raspberry Pi que expone un API donde podemos leer o guardar valores de un sensor. O que actuamos con un servidor en IoT para actuar sobre los distintos servidores.

Para esta entrada usaremos nuestro API REST de ejemplo habitual que vimos en esta entrada, que se ejecuta en NodeJs. También emplearemos de ficheros Json por lo que os recomendamos que leáis la entrada sobre ficheros Json en Arduino.

Con todo eso, tenemos los componentes para hacer nuestro ejemplo de ESP8266 como cliente de un API REST. ¿Cómo de complicado es? Tranquilos, no demasiado si somos organizados. Así que ¡manos a la obra!

En primer lugar, nuestro bucle principal queda de la siguiente forma.

Donde vemos que es similar al ejemplo de ESP8266 como cliente Http, pero hemos añadido la referencia a 'ArduinoJson.h' y a un fichero 'API.hpp' que contendrá las funciones a llamar para actuar con el API REST.

Estas funciones las ejecutamos en el 'Setup' que en el ejemplo se lancen una única vez e ilustrar su uso. Por supuesto, en un proyecto las llamaríamos donde las necesitáramos en nuestro código.

Por otro lado, tenemos el fichero 'API.hpp' que contiene las funciones que interactúan con el API REST. En este ejemplo queda así,

Como veis, tenemos una función para cada endpoint expuesto por nuestro API REST de ejemplo, y que ilustran las peticiones habituales para Get, Replace, Update y Delete, cada una con sus métodos y con los parámetros necesarios, bien en la URL o en el cuerpo de la petición codificados como Json.

Por otro lado, tenemos la función 'processResponse(...)' que se encarga de recoger las respuestas del servidor y realizar con ellas las acciones oportunas. En este caso, simplemente las mostramos por puerto serie. En un proyecto real interpretaríamos los datos recibidos (seguramente otro fichero Json) y ejecutaríamos las acciones oportunas.

Si ejecutamos el código veremos que se ejecutan correctamente todas las peticiones al API REST servido en nuestro servidor en NodeJS, y que estamos obteniendo las respuestas enviadas por el servidor.

Así como también verificamos que en la consola del servidor en NodeJS estamos recibiendo las peticiones.

¿No ha sido demasiado complicado verdad? Ahora ya sabemos cómo interactuar con el ESP8266 como cliente, con un API REST de forma correcta y normalizada.

En la próxima pondremos "la guinda" viendo cómo servir un API REST desde el propio ESP8266. ¡Esto empieza a ponerse en interesante! Hasta pronto.

Descarga el código

Todo el código de esta entrada está disponible para su descarga en GitHub.

Si te ha gustado esta entrada y quieres leer más sobre ESP8266 puedes consultar la sección
tutoriales de ESP8266

Anuncio:

Previous Usar VueJs, Vuetify y Axios para consumir un API Rest
Next Qué es el Slicer y cuál es su función en la impresión 3D
1000