sábado, 4 de febrero de 2017

Interacción con ESP8266 a través de thinger.io

En artículos anteriores hemos podido comprobar como thinger.io es capaz de mostrar los valores obtenidos a través de los sensores conectados a nuestro módulo ESP8266 pero en esta ocasión el sentido de la comunicación será diferente, veremos como controlar el dispositivo a través de la plataforma.

En este artículo vamos a controlar simplemente el encendido y el apagado de un led a través de thinger.io. Es interesante tener en cuenta que no es necesario disponer de una IP fija para controlar los dispositivos conectados a nuestro módulo. El esquema es el siguiente:


Vamos a crear un nuevo dispositivo en thinger.io para realizar esta práctica:


Los parámetros Devide id y Device credentials son los que utilizaremos para la conexión con thinger.io

La estructura de la función de encendido y apagado es la siguiente:

Imagen obtenida de ESPloradores
  • NOMBRE DEL RECURSO: es el nombre de una variable en la que se agrupan los datos de comunicación entre el módulo ESP8266 y la  plataforma thinger.io. Este nombre nos permitirá identificar o seleccionar los datos a utilizar, cuando hagamos uso de ellos con los dashboards, data buckets o endpoints.
  • OPERADOR y PARÁMETROS: nos indican el sentido en el que circula la información entre el recurso y la plataforma, así como su forma de codificación.En nuestro caso, los datos son de entrada al recurso desde la plataforma y vienen codificada en formato JSON. El formato JSON es un tipo de variable que puede contener booleanos, números enteros, números decimales, cadenas, e incluso información estructurada como un documento JSON.
  • CUERPO: en el apartado se indica la forma de actuar sobre uno o varios dispositivos conectados al módulo, a partir de los datos suministrados desde la plataforma (y en su caso desde el propio módulo).
En el sketch vamos a utilizar la misma función, pero añadiendo en el cuerpo las instrucciones para leer el estado inicial del LED (cuando el módulo se conecta). De esta manera  thinger.io lo podrá representar inicialmente de una forma correcta.

  // Recurso para el cambio de estado del LED desde THINGER.IO
  thing["LED MONOCROMO"] << [](pson & in) {
    if (in.is_empty()) {
      in = (bool) !digitalRead(D1); //Lee estado inicial del led
    }
    else {
      digitalWrite(D1, in ? LOW : HIGH); //Modifica estado del led
    }
  };

Nota: El estado de encendido y apagado visualmente está al contrario de lo que yo me esperaría de forma natural por lo que en el sketch utilizo el operador !(not) al leer el estado inicial del led.

El código completo es el siguiente:

#include <ESP8266WiFi.h> //Librería WiFi del módulo ESP8266
#include <ThingerESP8266.h> //Librería plataforma THINGER.IO

// Parámetros del dispositivo ESP8266
#define username "USERNAME" //sustituir por vuestro usuario
#define deviceId "LEDS"
#define deviceCredential "CREDENTIAL" // sustituir

// Parámetros de nuestra red wifi
#define wifi_ssid "WLAN_E17C"
#define wifi_password "ced0ccb58c84e525e35f"

ThingerESP8266 thing(username, deviceId, deviceCredential);

void setup() {
  // Inicialización de la WiFi para comunicarse con THINGER.IO
  thing.add_wifi(wifi_ssid, wifi_password);

  // Inicialización del LED
  pinMode(D1, OUTPUT); // Puerto D1 de nuestro módulo

  // Recurso para el cambio de estado del LED desde THINGER.IO
  thing["LED MONOCROMO"] << [](pson & in) {
    if (in.is_empty()) {
      in = (bool) !digitalRead(D1); //Lee estado inicial del led
    }
    else {
      digitalWrite(D1, in ? LOW : HIGH); //Modifica estado del led
    }
  };
}

void loop() {
  thing.handle();
}

En thinger.io vamos a Devices, comprobamos que estamos conectados (Connected) y elegimos LEDS. Podemos comprobar que se ha iniciado la comunicación entre la plataforma y nuestro dispositivo (Online)


Nos muestra el Dashboard y hacemos click en ViewAPI. A continuación hacemos click en LED MONOCROMO - Private y nos muestra un recurso de entrada (Resource Input) a modo de interruptor con el que podemos modificar el estado del Led.



Fuentes

No hay comentarios:

Publicar un comentario

Nota: solo los miembros de este blog pueden publicar comentarios.