Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar un LinkIt ONE a Ubidots usando Wi-Fi sobre HTTP
Conectar un LinkIt ONE a Ubidots usando Wi-Fi sobre HTTP

Aprende a configurar y conectar la popular placa LinkIt ONE con Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de una semana

La placa de desarrollo LinkIt ONE es una placa de código abierto para prototipar proyectos de IoT. ¡Nos gustó mucho el hecho de que ya incluye conectividad integrada como GSM, GPRS, Wi-Fi, Bluetooth y GPS!

Siguiendo esta guía, podrás POST datos a Ubidots utilizando el módulo LinkIt One en solo un par de minutos!

Requisitos

Paso a Paso

  1. Configurando Arduino IDE

  2. Enviando (POST) datos a Ubidots

  3. Recibiendo (GET) datos de Ubidots

  4. Resumen

1. Configurando Arduino IDE

1. Para poder trabajar con el LinkIt One en el Arduino IDE, instala la plataforma MediaTek utilizando el Administrador de Placas de Arduino preconfigurado. Si no estás familiarizado con la adición de una placa en el Arduino IDE, consulta este artículo para obtener orientación adicional.

2. Con la plataforma MediaTek instalada, selecciona el dispositivo LinkItOne con el que estás trabajando. En este caso, estamos trabajando con un “LinkIt One”. Para seleccionar tu placa desde el Arduino IDE, selecciona Herramientas > Placa “LinkIt One”

2. Enviando (POST) datos a Ubidots

Con el siguiente código de ejemplo podrás publicar la lectura tomada del A0 de la placa LinkIt One.

1. Para publicar tu primer valor en Ubidots, abre el Arduino IDE y pega el código de ejemplo a continuación. Una vez que hayas pegado el código, asigna tu único TOKEN de Ubidots, SSID (Nombre de WiFi), y la Contraseña de la red disponible.

    /*   Ubidots WiFi client   This sketch reads an analog input and sends this value to Ubidots   Change the macro WIFI_AP, WIFI_PASSWORD, WIFI_AUTH, URL, TOKEN and VARIABLE_ID accordingly.   based on the Web Client example created 13 July 2010   by dlf (Metodo2 srl)   modified 31 May 2012   by Tom Igoe   modified 20 Aug 2014   by MediaTek Inc.   modified 2 Sep 2015   by Ubidots, Inc.   modified 6 Oct 2016   by Ubidots, Inc.   */  #include <LTask.h>  #include <LWiFi.h>  #include <LWiFiClient.h>  #define WIFI_AP "MTK Hackathon"  #define WIFI_PASSWORD ""  #define WIFI_AUTH LWIFI_OPEN  // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP.  // Ubidots information  #define URL    "industrial.api.ubidots.com"  #define TOKEN  "Sxxxxxxxxx9m4wX"          // replace with your Ubidots token generated in your profile tab  #define LABEL "linkit-one"                // your device label  void setup()  {    LTask.begin();    LWiFi.begin();    Serial.begin(19200);    // keep retrying until connected to AP    Serial.println("Connecting to AP");    while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD)))    {      delay(1000);    }  }  boolean wifi_status(LWifiStatus ws){    switch(ws){      case LWIFI_STATUS_DISABLED:        return false;      break;      case LWIFI_STATUS_DISCONNECTED:        return false;      break;      case LWIFI_STATUS_CONNECTED:        return true;      break;    }    return false;  }  void loop()  {       Serial.println("Connecting to Ubidots...");    LWiFiClient c;    while (!c.connect(URL, 80))    {      Serial.println("Retrying to connect...");      delay(100);    }    Serial.println("Connected!");    while(1){      LWifiStatus ws = LWiFi.status();      boolean status = wifi_status(ws);      if(!status){        Serial.println("Connecting to AP");        while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD)))        {          delay(500);        }      }      String payload = "{\"temp\":"+ String(analogRead(A0)) + "}";      String le = String(payload.length());          if(!c.connected()){        while (!c.connect(URL, 80)){          delay(100);        }        Serial.println("Client reconnected!");      }         // Build HTTP POST request      c.print(F("POST /api/v1.6/devices/"));      c.print(LABEL);      c.println(F(" HTTP/1.1"));      c.println(F("User-Agent: LinKit One/1.0"));      c.print(F("X-Auth-Token: "));      c.println(TOKEN);      c.println(F("Connection: close"));      c.println(F("Content-Type: application/json"));      c.print(F("Content-Length: "));      c.println(le);      c.print(F("Host: "));      c.println(URL);      c.println();       c.println(payload);      c.println();       int v;      while(c.available()){          v = c.read();        if(v < 0){          Serial.println("No response.");          break;        }        // Serial.print((char)v);  // Add this line to the code in test case      }      delay(1000);    }  }

2. Verifica tu código dentro del Arduino IDE. Para hacer esto, en la esquina superior izquierda de nuestro Arduino IDE verás el icono de "Marca de Verificación"; presiónalo para verificar tu código.

3. Sube el código a tu “LinkIt One”. Para hacer esto, elige el icono de "flecha derecha" junto al icono de "marca de verificación".

4. Para verificar la conectividad del dispositivo y los datos enviados, abre el monitor serial seleccionando el icono de "lupa" en la esquina superior derecha del Arduino IDE para ver los registros de conectividad.

NOTA: Si no se ve ninguna respuesta, intenta desconectar el LinkIt One y luego volver a conectarlo. Asegúrate de que la velocidad de baudios del monitor serial esté configurada a la misma que se especifica en tu código 19200.

5. Confirma los datos en Ubidots. Ahora deberías ver los datos publicados en tu cuenta de Ubidots, ubicados en el dispositivo llamado "linkit-one".

3. Recibiendo (GET) datos de Ubidots

Con el siguiente código de ejemplo podrás suscribirte a un valor de Ubidots para comenzar a controlar cualquier activo que desees.

1. Para comenzar a recibir valores de Ubidots, abre el Arduino IDE y pega el código de ejemplo a continuación. Una vez que hayas pegado el código, asegúrate de asignar los siguientes parámetros:

/*  Ubidots WiFi client  This sketch reads an analog input and sends this value to Ubidots  Change the macro WIFI_AP, WIFI_PASSWORD, WIFI_AUTH, URL, TOKEN and VARIABLE_ID accordingly.  based on the Web Client example created 13 July 2010  by dlf (Metodo2 srl)  modified 31 May 2012  by Tom Igoe  modified 20 Aug 2014  by MediaTek Inc.  modified 2 Sep 2015  by Ubidots, Inc.*/#include <LTask.h>#include <LWiFi.h>#include <LWiFiClient.h>#define WIFI_AP "xxxxxxx"#define WIFI_PASSWORD "xxxxxxx"#define WIFI_AUTH LWIFI_OPEN  // choose from LWIFI_OPEN, LWIFI_WPA, or LWIFI_WEP.// Ubidots information#define URL    "industrial.api.ubidots.com"#define TOKEN  "BBFF-xxxxxxxxx"          // replace with your Ubidots token generated in your profile tab#define VAR_LABEL "temperature"#define DEVICE_LABEL "maka-test"//Variables for String response;int value_index;String value_string;String value;void setup(){  LTask.begin();  LWiFi.begin();  Serial.begin(9600);  // keep retrying until connected to AP  Serial.println("Connecting to AP");  while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD)))  {    delay(1000);  }}boolean wifi_status(LWifiStatus ws) {  switch (ws) {    case LWIFI_STATUS_DISABLED:      return false;      break;    case LWIFI_STATUS_DISCONNECTED:      return false;      break;    case LWIFI_STATUS_CONNECTED:      return true;      break;  }  return false;}float get_value(char* variable_label) {  LWiFiClient c;  if (c.connect(URL, 80)) {    Serial.println("Connected to Ubidots");    String response = "";    // Build HTTP GET request    c.print(F("GET /api/v1.6/devices/"));    c.print(DEVICE_LABEL);    c.print(F("/"));    c.print(variable_label);    c.print(F("/values/?page_size=1&token="));    c.print(TOKEN);    c.println(F(" HTTP/1.1"));    c.println(F("Content-Type: application/json"));    c.print(F("Host: "));    c.println(URL);    c.println();    int count = 0;    while (!c.available()  && count < 10000) {      count++;      delay(1);    }    int v;    while (c.available()) {      v = c.read();      if (v < 0) {        Serial.println("No response.");        break;      }      Serial.println((char)v);      response.concat((char)v);    }    Serial.println("Printing response:");    value_index = response.indexOf("\"value\": ");    value_string = response.substring(value_index);    value = value_string.substring(9, value_string.indexOf(","));    Serial.println(value);    return atof(value.c_str());  }  else {    Serial.println("Couldn't connect to Ubidots");    return -1;  }}void check_wifi() {  LWifiStatus ws = LWiFi.status();  boolean status = wifi_status(ws);  if (!status) {    Serial.println("Connecting to AP");    while (0 == LWiFi.connect(WIFI_AP, LWiFiLoginInfo(WIFI_AUTH, WIFI_PASSWORD))) {      delay(500);    }  }}void loop(){  check_wifi();  char* variable_label = VAR_LABEL;  float last_value = get_value(variable_label);  Serial.print("The value received is: ");  Serial.println(last_value);  delay(1000);}

2. Verifica & Sube el código a la placa siguiendo los mismos pasos proporcionados en el paso POST anterior.

3. Para verificar la conectividad del dispositivo y los datos que se están recibiendo, abre el monitor serial seleccionando el icono de "lupa" en la esquina superior derecha del Arduino IDE para ver los registros de conectividad.

NOTA: Si no se ve ninguna respuesta, intenta desconectar el Linkit One y luego volver a conectarlo. Asegúrate de que la velocidad de baudios del monitor serial esté configurada a la misma que se especifica en tu código 9600.

4. En el monitor serial, podrás ver el último valor recibido en Ubidots de la variable especificada en el firmware.

4. Resumen

Con este simple tutorial puedes POST & GET datos a/de Ubidots con la facilidad del Arduino IDE y un LinkIt One. Si deseas manejar valores de contexto o timestamp en tu solicitud, consulta Ubidots REST API y modifica la solicitud construida en el código de ejemplo proporcionado.

¡Ahora es tiempo de crear Dashboards de Ubidots para visualizar tus datos y desplegar tu solución de IoT! ¡Feliz Hackeo! :)

Otros lectores también han encontrado útil...

¿Ha quedado contestada tu pregunta?