Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Conectar un DFRobot WiDo a Ubidots a través de HTTP
Conectar un DFRobot WiDo a Ubidots a través de HTTP

Aprende a configurar el WiDo y enviar datos a la Plataforma de Desarrollo de Aplicaciones IoT de Ubidots.

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

La placa WiDo integra un Arduino Leonardo y un chip WiFi en una sola placa. Por $29.90 USD obtendrás el equivalente a un Arduino y un módulo WiFi, que costarían más si se compran por separado.

En esta guía aprenderemos cómo enviar una lectura de temperatura desde el nodo IoT WiDo a Ubidots. Esta placa es diseñada y vendida por DF Robot.

Siguiendo esta guía podrás POST datos a Ubidots usando el DFRobot WiDo en solo un par de minutos!

Requisitos

Paso a Paso

  1. Configurando el IDE de Arduino

  2. Enviando (POST) datos a Ubidots
    - Enviar múltiples valores a Ubidots

  3. Resumen

1. Configurando el IDE de Arduino

1. Descarga la biblioteca bifurcada de CC3000 e instálala. Para una explicación detallada de cómo instalar bibliotecas usando el IDE de Arduino, consulta esta guía.

NOTA DE PROBLEMAS: Si recibes un mensaje diciendo que ya tienes una biblioteca llamada “Adafruit_CC3000_Library-master”, esto es porque ya tienes una instalación para el módulo CC3000 de Adafruit. Para resolver esto, abre el archivo .ZIP de WiDo y cambia el nombre de la carpeta a algo como “Adafruit_CC3000_Library-Wido”, luego intenta instalar la biblioteca nuevamente.

2. Selecciona el "Arduino Leonardo" como la placa con la que estás trabajando en el IDE de Arduino. Para seleccionarlo, presiona Herramientas –> Placas > Arduino Leonardo.

2. Enviando (POST) datos a Ubidots

Con el siguiente código de ejemplo podrás POSTear las lecturas ANALÓGICAS tomadas del puerto analógico A0 de la placa WiDo.

1. Para enviar tu primer valor a Ubidots, abre el IDE de Arduino y pega el código de ejemplo a continuación. Una vez que hayas pegado el código, necesitarás asignar tu TOKEN Ubidots único y el ID de Variable de las variables que estarás actualizando en Ubidots. Si no tienes los IDs de las variables, simplemente crea variables de shell y luego actualiza tu firmware para contener los IDs de Variable correctos. Para localizar los IDs de variable, simplemente haz clic aquí.

     /***************************************************      * Este es un ejemplo para el DFRobot Wido - Sensor y nodo de control IoT integrado Wifi     * Página del producto y más información: http://www.dfrobot.com/index.php?route=product/product&product_id=1159     * Diseñado específicamente para trabajar con los productos DFRobot Wido:     *      * La biblioteca está bifurcada de Adafruit     *      * Contribuido por James     * Licencia BSD, todo el texto anterior debe ser incluido en cualquier redistribución     * Modificado por Agustin Pelaez para Ubidots, Inc.     ****************************************************/    /*    Este código de ejemplo se utiliza para conectar el servicio en la nube de Ubidots (Página de inicio oficial: http://www.ubidots.com).     El dispositivo requerido es solo:     1. Sensor de temperatura LM35 de bajo costo o cualquier dispositivo que uses para subir datos     2. Y Wido     Nota: ¡No olvides cambiar la configuración a continuación antes de usar!     1. WLAN_SSID & WlAN_PASS      2. API_key     3. ID del dispositivo      */    #include <Adafruit_CC3000.h>    #include <ccspi.h>    #include <SPI.h>    #define Wido_IRQ   7    #define Wido_VBAT  5    #define Wido_CS    10    #include "utility/debug.h"    Adafruit_CC3000 Wido = Adafruit_CC3000(Wido_CS, Wido_IRQ, Wido_VBAT,SPI_CLOCK_DIVIDER); // puedes cambiar esta velocidad de reloj    // La seguridad puede ser WLAN_SEC_UNSEC, WLAN_SEC_WEP, WLAN_SEC_WPA o WLAN_SEC_WPA2    #define WLAN_SECURITY   WLAN_SEC_WPA2    #define WLAN_SSID       "Abriles_LTE"         // ¡no puede tener más de 32 caracteres!    #define WLAN_PASS       "12345678"        // Para conectar el router o AP, ¡no olvides establecer el SSID y la contraseña aquí!!    #define TCP_TIMEOUT      3000    #define TOKEN  "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"      // Actualiza tu token de Ubidots    #define VARIABLE_ID   "xxxxxxxxxxxxxxxxxxxxxx"       // Reemplaza con el id de la variable a la que deseas transmitir datos    void setup(){      Serial.begin(115200);      Serial.println(F("¡Hola, CC3000!\n"));      /* Inicializa el módulo */      Serial.println(F("\nInicializando el CC3000 ..."));      if (!Wido.begin())      {        Serial.println(F("¡No se pudo inicializar el CC3000! ¿Revisa tu cableado?"));        while(1);      }      /* Intenta conectarse a un punto de acceso */      char *ssid = WLAN_SSID;             /* Máx 32 caracteres */      Serial.print(F("\nIntentando conectarse a "));       Serial.println(ssid);      /* NOTA: ¡Las conexiones seguras no están disponibles en modo 'Tiny'!       Por defecto, connectToAP intentará indefinidamente, sin embargo, puedes pasar un       número máximo opcional de reintentos (mayor que cero) como el cuarto parámetro.       */      if (!Wido.connectToAP(WLAN_SSID, WLAN_PASS, WLAN_SECURITY)) {        Serial.println(F("¡Fallido!"));        while(1);      }      Serial.println(F("¡Conectado!"));      /* Espera a que DHCP complete */      Serial.println(F("Solicitando DHCP"));      while (!Wido.checkDHCP())      {        delay(100); // ToDo: ¡Insertar un tiempo de espera de DHCP!      }      }    uint32_t ip = 0;    // Almacena la dirección IP de Ubidots    float temp = 0;     // Almacena datos temporales del sensor para enviar    Adafruit_CC3000_Client WidoClient;    void loop(){      static unsigned long RetryMillis = 0;      static unsigned long uploadtStamp = 0;      static unsigned long sensortStamp = 0;      if(!WidoClient.connected() && millis() - RetryMillis > TCP_TIMEOUT){        // Actualiza la marca de tiempo para reconectar la ip         RetryMillis = millis();        Serial.println(F("Intentando conectarse a Ubidots..."));        // Conéctate a Ubidots         ip = Wido.IP2U32(50,23,124,68);                       WidoClient = Wido.connectTCP(ip, 80);                 Serial.println(F("Conectado exitosamente a Ubidots."));      }      if(WidoClient.connected() && millis() - uploadtStamp > 1000){        // Si el dispositivo está conectado al servidor en la nube, sube los datos cada 1000ms.        uploadtStamp = millis();        // enviar flujo de datos http a Ubidots        sendstream2Ubidots(VARIABLE_ID, String(analogRead(0)));  // enviar la lectura del sensor de temperatura del sensor LM35 al servidor        /********** Obtener la respuesta de la página http e imprimir la respuesta ***********/        unsigned long rTimer = millis();        Serial.println(F("Leyendo la respuesta de la nube...\r\n"));        while (millis() - rTimer < 2000) {          while (WidoClient.connected() && WidoClient.available()) {            char c = WidoClient.read();            Serial.print(c);          }        }        delay(1000);             // Espera 1s para terminar de enviar el flujo de datos           WidoClient.close();      // Cierra la conexión del servicio        RetryMillis = millis();  // Restablece la marca de tiempo para aplicar la conexión con el servicio      }    }    void sendstream2Ubidots(String variable, String value){      Serial.print("RAM libre: "); Serial.println(getFreeRam(), DEC);      // Variables para almacenar la longitud del cuerpo del paquete http       int length = 0;      char lengthstr[5];      String httpBodyPackage = "{\"value\":" + value + "}";      Serial.println(httpBodyPackage);                       // Depurar el flujo del cuerpo http      //Hacer una solicitud HTTP al servidor Ubidots      Serial.print(F("Enviando solicitud Http..."));      WidoClient.fastrprint(F("POST /api/v1.6/variables/"));      WidoClient.fastrprint(VARIABLE_ID);      WidoClient.fastrprintln(F("/values HTTP/1.1"));      WidoClient.fastrprintln(F("Host: industrial.api.ubidots.com"));      WidoClient.fastrprint(F("X-Auth-Token: "));      WidoClient.fastrprintln(TOKEN);      WidoClient.fastrprintln(F("Content-Type: application/json"));      WidoClient.fastrprint(F("Content-Length: "));      WidoClient.println(String(httpBodyPackage.length()));      WidoClient.fastrprintln(F(""));      WidoClient.println(httpBodyPackage);      Serial.println(F("Hecho....."));    }

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

3. Sube el código a tu WiDo (Arduino Leonardo). Para hacer esto, elige el ícono de "flecha derecha" al lado del ícono de "marca de verificación".

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

NOTA: Si no se ve ninguna respuesta en el monitor serial, intenta desconectar tu WiDo y luego volver a conectarlo. Además, asegúrate de que la velocidad de baudios del monitor serial esté configurada a la misma que se especifica en tu código 115200.

En este punto, las variables asignadas en el código estarán actualizando las lecturas analógicas tomadas de la placa.

Enviando múltiples valores a Ubidots

Si deseas enviar más de una variable a la vez, utiliza el punto final de la API de colecciones reemplazando la función “sendstream2Ubidots(String var, Sting val)” con esta función:

    void send3Ubidots(String var1, String val1, String var2, String val2, String var3, String val3){      // Variables para almacenar la longitud del cuerpo del paquete http      String httpBodyPackage = "[{\"variable\":\"" + var1 + "\",\"value\":" + val1 + "}, {\"variable\":\"" + var2 + "\",\"value\":" + val2 + "}, {\"variable\":\"" + var3 + "\",\"value\":" + val3 + "}]";      Serial.println(httpBodyPackage);                       // Depurar el flujo del cuerpo http      //Hacer una solicitud HTTP al servidor Ubidots      Serial.print(F("Enviando solicitud Http..."));      WidoClient.fastrprintln(F("POST /api/v1.6/collections/values/ HTTP/1.1"));      WidoClient.fastrprintln(F("Host: industrial.api.ubidots.com"));      WidoClient.fastrprint(F("X-Auth-Token: "));      WidoClient.fastrprintln(TOKEN);      WidoClient.fastrprintln(F("Content-Type: application/json"));      WidoClient.fastrprint(F("Content-Length: "));      WidoClient.println(String(httpBodyPackage.length()));      WidoClient.fastrprintln(F(""));      WidoClient.println(httpBodyPackage);      Serial.println(F("Hecho....."));    }

3. Resumen

Con este simple tutorial puedes POSTear datos a Ubidots con la facilidad del IDE de Arduino y una placa DFRobot Wido.

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

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

¿Ha quedado contestada tu pregunta?