5. ThingSpeak: Internet of Things

A continuación, veremos como conectarnos al servidor de ThingSpeak a través de su API para mandarle los datos recibidos desde los sensores.

1. ¿Qué es ThingSpeak?

"ThingSpeak is an open source Internet of Things (IoT) application and API to store and retrieve data from things using the HTTP protocol over the Internet or via a Local Area Network. ThingSpeak enables the creation of sensor logging applications, location tracking applications, and a social network of things with status updates".

Es un conjunto de servidor web, más una base de datos y una API que nos permite almacenar y transmitir datos usando el protocolo HTTP. Al ser de código abierto nos permite bajarnos dicho código y hacer una instancia de ThingSpeak en nuestro propio servidor o incluso realizar modificaciones en su API para atender a nuestras necesidades.

Lo que caracteriza e ThingSpeak es su sencillez, y es que nos permite desarrollar una aplicación visual para mostrar nuestros datos en pocos minutos y así centrarnos en la parte Hardware.

Además ThingSpeak, al estar desarrollada por Mathworks, ofrece total integración con el archiconocido por todos: Matlab.

Hay muchas otras plataformas de desarrollo del estilo de ThingSpeak que ofrecen sus APIs preparadas para desarrollar proyectos de IoT, pero en este taller usaremos ThingSpeak por ser una de las más sencillas, conocidas y fáciles de usar, además de cumplir con los requisitos necesarios para el taller.

2. Creación de una cuenta en ThingSpeak

El primer paso para empezar a utilizar esta potente herramienta, será registrarnos en su servicio web. Nos iremos a su web https://thingspeak.com/ y registraremos una cuenta en el apartado de Sign Up. Será necesario disponer de una cuenta de email válida.

Una vez registrados, nos logueamos y vamos al apartado de Channels

En ThingSpeak cada uno de nuestros proyectos irá en un canal, donde podremos poner hasta 8 variables distintas. ThingSpeak también permite la creación de un canal mediante su API, pero esta vez lo haremos a través de la web.

Nos pedirá un Nombre para el canal, así como una descripción y algunos datos más. Es importante que definamos los campos que vamos a usar para almacenar las variables, y anotemos el orden de estos para que saber que variable de nuestro proyecto, irá a que campo.

Por ahora introduciremos los siguientes campos como se ven en la imagen adjunta:

  • Field1: Temperatura: Corresponde con la variable temperatura que obtenemos del sensor DHT11
  • Field2: Humedad relativa: También recogida por el sensor DHT11
  • Field3: Humedad suelo: Será la variable humedad de suelo después de ser procesada.

Si no hemos equivocado o queremos hacer cambios, podremos editar toda esta configuración desde el apartado de Channel Settings.

  • En Private View o Public View si hemos marcado la opción Public podremos ver las gráficas que se irá actualizando en tiempo real según vayamos enviando datos.

3. Obtención de la API KEY

El siguiente paso será obtener una API Key con la que poder conectarnos a ThingSpeak. La API Key es una contraseña que nos permite que solo podamos enviar datos a la web si disponemos de este pass ya que no queremos que nadie pueda falsear los datos de nuestra planta, ¿verdad?.

Existe una APIKey para leer y otra para escribir. En nuestro caso queremos leer, pero ThingSpeak también dispone de métodos en su API para leer a través de un GET.

Será importante anotar nuestra Write API Key para conectarnos posteriormente.

Adicionalmente, se muestra a la derecha del panel de la contraseña información relativa a las funciones de la API para crear, actualizar o borrar un canal. Eso no nos interesa por el momento.

4. ¿Qué es una API?

La abreviatura viene del término en inglés Application Programming Interfaces (Interfaces de programación de aplicaciones) y según explica el científico en computación Benjy Weinberger en su blog, una API es una especificación formal sobre cómo un módulo de un software se comunica o interactúa con otro.

En otras palabras, las API son un conjunto de comandos, funciones y protocolos informáticos que permiten a los desarrolladores crear programas específicos para ciertos sistemas operativos. Las API simplifican en gran medida el trabajo de un creador de programas, ya que no tiene que «escribir» códigos desde cero. Estas permiten al informático usar funciones predefinidas para interactuar con el sistema operativo o con otro programa.

Las funciones que nos interesan son las de escritura, las cuales se basan en una llamada HTTP a una petición POST. No entraremos en detalle sobre lo que esto significa, pero a grandes rasgos conviene saber que:

  • GET: Pedir al servidor un servicio
  • POST: Actualizar una variable creando un nuevo registro
  • PUT: Modificar un valor de un registro
  • DELETE: Borrar un valor de un registro

Para consultar la forma de utilizar la API de ThingSpeak, nos vamos a la pestaña de Data Import/Export dentro de nuestro Channel. Observamos que a parte de permitirnos exportar e importar valores desde un archivo local separado por comas (CSV), también nos indica a la derecha la comunicación con la API para realizar API Request o peticiones, ya sean POST para escribir o GET para leer.

Nos interesa el POST:

POST https://api.thingspeak.com/update.json
     api_key=XXXXXXXXXXXXXXXX
     field1=73

donde la api_key será nuestra contraseña y field1 será el valor que queremos actualizar.

5. ThingTweet: Vamos a Twittear un rato

Ya era hora, ¿no?. Efectivamente: El siguiente paso es conectarnos con Twitter y dejarlo todo preparado para poder twittear desde nuestro dispositivo ESP8266.

Para este cometido, usamos ThingTweet, también de ThingSpeak (¿veis por que no era casualidad la elección de esta plataforma?. Podríamos conectarnos directamente con la API de Twitter (se lo que estáis pensando, todo el mundo tiene una API hoy en día), pero ThingTweet facilita las cosas enormemente.

Nos dirigimos a la pestaña de Apps dentro de ThingSpeak y, junto con un montón de aplicaciones de gran utilidad que te recomiendo que investigues, encontramos ThingTweet. Nos pedirá que enlacemos nuestra cuenta de Twitter, no deberíamos tener demasiados problemas para ello. Simplemente loguearnos a nuestra cuenta (si no tienes, ya estás tardando en creartela) y autorizar a ThingSpeak a conectarse con ella.

Hecho esto nos generará una API Key (si, otra), que utilizaremos para realizar POST y poner Tweets de esta manera:

POST https://api.thingspeak.com/apps/thingtweet/1/statuses/update
    api_key=XXXXXXXXXXXXXXXX
    status=I just posted this from my thing!

En vez de ThingTweet podríamos haber utilizado la aplicación de React la cual nos permite reaccionar a un valor de un campo de uno de los canales que tengamos para realizar una acción que elijamos. Nosotros esta reacción la vamos a hacer desde Arduino por aquello de decir: "¡He enviado un tweet con un Arduino!".