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

Aprende a configurar y conectar el GPRSBee para enviar datos a través de HTTP a la plataforma de desarrollo de aplicaciones IoT de Ubidots.

Sergio M avatar
Escrito por Sergio M
Actualizado hace más de 2 meses

El GPRSBBee es una alternativa para el Arduino GPRS Shield y tiene el factor de forma de abeja que se puede usar en cualquier sistema que tenga un zócalo de abeja como el Seeeduino Stalker o el Arduino Fio. El GPRSbee utiliza tarjetas SIM del factor de forma MicroSIM para conectarse y comunicarse con Internet.

Tiene el factor de forma XBee, por lo que cualquier proyecto electrónico con un zócalo XBee debería ser compatible con el GPRSBee.

En este tutorial exploraremos y detallaremos cómo enviar un valor a Ubidots con el dispositivo GPRSBee.

Siguiendo esta guía podrás POST datos a Ubidots utilizando el dispositivo GPRSBee conectado a un kit Seeeduino Stalker v2.3 en solo un par de minutos!

Requisitos

  • Una placa de microcontrolador para gestionar y monitorear el GPRSBee a través de una interfaz UART. Usaremos un kit Seeeduino Stalker v2.3 en este tutorial.

Paso a Paso

  1. Configuración de Hardware

  2. Enviando (POST) Datos a Ubidots

  3. Resumen

1. Configuración de Hardware

1. Para comenzar, coloca el GPRSBee sobre el kit Seeeduino Stalker v2.3 y aplica una ligera presión para conectar los pines del GPRSBee con los conectores de la placa. Ahora, con el GPRSBee + Seeeduino Stalker ensamblado, podrás conectarte a Internet a través de celular.

2. Ahora, para poder programar el kit Seeeduino Stalker v2.3 necesitarás una interfaz UART, como un módulo UartSBee (imagen abajo):

3. Sigue el diagrama y la tabla a continuación para establecer la conexión entre el kit Seeeduino Stalker v2.3 y el UartSBee correctamente:

Después de establecer la conexión, podrás programar la placa a través de la interfaz UartSBee.

2. Enviando (POST) datos a Ubidots

Siguiendo el código a continuación podrás POST valores a Ubidots a través de celular.

1. Para publicar tu primer valor en 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 los siguientes parámetros:

  • 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í.

  • APN credenciales de tu proveedor de celular dentro del método configGPRS() del código de ejemplo proporcionado

      /*      GPRSBee Seeeduino      Circuito:      Pin GND:   GND de UARTSBee      Pin 2:     RX de UARTSBee      Pin 3:     TX de UARTSBee      Pin USB5v: VCC de UARTSBee      GPRSBee en el zócalo de abeja del Seeeduino      Batería LiPo conectada al GPRSBee      NOTA: Asegúrate de encender el GPRSBee usando su botón de encendido      Creado el 13 de febrero de 2015      por Alejandro Gomez para Ubidots      Este código de ejemplo es de dominio público.    */      #include <SoftwareSerial.h>    //SoftwareSerial para salida del Monitor Serial    #define PIN_RX 2    #define PIN_TX 3    SoftwareSerial monitorSerial = SoftwareSerial(PIN_TX, PIN_RX);    String inputString = "";    char input[512];    boolean stringComplete = false;    //Información de Ubidots    char ubidotstoken[] = "xxxxxxxxxxxxxxxxxxxxxx";      //tu token aquí    char idvariable1[] = "xxxxxxxxxxxxxxxxxxxxxx";             //ID de tu variable    void setup(){      //Configura la velocidad en baudios para cada puerto Serial      monitorSerial.begin(9600);      Serial.begin(4800);      delay(2000);    }    void loop(){      configGPRS();      send2Ubidots(888, idvariable1);      delay(4000);      checkResponse(10000);      delay(60000);    }    void configGPRS(){      //el comando AT necesario para configurar el GPRS para enviar datos      while(!SendATCommand("AT", "OK"));      while(!SendATCommand("AT+CGATT=1", "OK"));      SendATCommand("AT+CSTT=\"web.vmc.net.co\"", "OK");      SendATCommand("AT+CIICR", "OK");      SendATCommand("AT+CIFSR");      while(!SendATCommand("AT+CIPSTART=\"tcp\",\"industrial.api.ubidots.com\",\"80\"", "CONNECT OK"));    }    void send2Ubidots(int value, char* id){      //Enviar un valor a ubidots      SendATCommand("AT+CIPSEND");      char url1[] = "POST /api/v1.6/variables/";      char* url2 = id;      char url3[] = "/values HTTP/1.1\n";      int lurl = strlen(url1) + strlen(url2) + strlen(url3);      char url[lurl];      sprintf(url,"%s%s%s",url1,url2,url3);      Serial.print(url);      delay(100);      checkResponse(100);      Serial.print("X-Auth-Token: ");      delay(100);      checkResponse(100);      Serial.print(ubidotstoken);      delay(100);      checkResponse(100);      Serial.print("\n");      delay(100);      checkResponse(100);      Serial.print("Content-Type: application/json\n");      delay(100);      checkResponse(100);      Serial.print("Host: industrial.api.ubidots.com\n");      delay(100);      checkResponse(100);      Serial.print("Content-Length: ");      delay(100);      checkResponse(100);      char data1[] = "{\"value\":";      char data2[get_int_len(value)+1];      char data3[] = "}";      itoa(value,data2,10);      int ldata = strlen(data1) + strlen(data2) + strlen(data3);      char data[ldata];      sprintf(data,"%s%s%s",data1,data2,data3);      Serial.print(ldata);      delay(100);      checkResponse(100);      Serial.print("\n");      delay(100);      checkResponse(100);      Serial.print("\n");      delay(100);      checkResponse(100);      Serial.print(data);      delay(100);      checkResponse(100);      Serial.print("\n");      delay(100);      checkResponse(100);      Serial.print((char)26);      delay(100);      checkResponse(100);      Serial.print("\n");      delay(100);      checkResponse(100);      checkResponse(10000);    }    //Este método envía un comando AT al GPRSbee    void SendATCommand(char* data){      flushSerial();      monitorSerial.print("ATCommand: ");      monitorSerial.println(data);      Serial.println(data);      delay(2000);      checkResponse();      delay(1000);    }    //Este método envía un comando AT y verifica la respuesta    boolean SendATCommand(char* data, char* response){      flushSerial();      monitorSerial.print("ATCommand: ");      monitorSerial.println(data);      Serial.println(data);      delay(100);      return checkResponse(response);    }    //Verifica si hay una respuesta en el búfer interno    void checkResponse(){      long contador = 1;      while(contador < 10000){        while(Serial.available() > 0){          char inChar = (char)Serial.read();          inputString += inChar;          if (inChar == '\n') {            stringComplete = true;          }         }        if(stringComplete) {          monitorSerial.println(inputString);          inputString = "";          stringComplete = false;        }        contador++;      }    }    //Verifica si hay una respuesta específica en el búfer interno    boolean checkResponse(char* data){      long contador = 1;      int cont = 0;      while(contador < 100000){        while(Serial.available() > 0){          char inChar = (char)Serial.read();          if ((inChar == '\n')) {            stringComplete = true;            break;          }else{          input[cont] = inChar;          cont++;          }        }        if(stringComplete) {          //monitorSerial.print(input);          //monitorSerial.print(" Comparado con ");          //monitorSerial.println(data);          //int a = strcmp(input, data);          if(strncmp(input, data, strlen(data)) == 0){            resetInput();            cont = 0;            stringComplete = false;            return true;          }          resetInput();          cont = 0;          stringComplete = false;        }        contador++;      }      return false;    }    //Verifica si hay una respuesta en el búfer interno con un tiempo de espera específico    void checkResponse(long timeout){      long contador = 1;      while(contador < timeout){        while(Serial.available() > 0){          char inChar = (char)Serial.read();          inputString += inChar;          if (inChar == '\n') {            stringComplete = true;          }         }        if(stringComplete) {          monitorSerial.println(inputString);          inputString = "";          stringComplete = false;        }        contador++;      }    }    //vaciar la entrada serial    void flushSerial() {        while (Serial.available())         Serial.read();    }    //restablecer el búfer temporal para leer datos    void resetInput(){      for(int i=0; i<255; i++){        input[i]=0;      }    }    //usado para contar el número de caracteres en un valor    long get_int_len (long value){      int l=1;      while(value>9){ l++; value/=10; }      return l;    }

2. A continuación, 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"; presiónalo para verificar tu código.

3. Sube el código a tu Seeeduino Stalker + GPRSBee. 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 la placa y luego volver a conectarla. Además, asegúrate de que la velocidad en baudios del monitor serial esté configurada a la misma que se especifica en tu código 115200.

En este punto, la variable asignada en el código se estará actualizando con las lecturas tomadas de la placa.

3. Resumen

Con este simple tutorial puedes POST datos a Ubidots con la facilidad del IDE de Arduino y un Seeeduino Stalker + GPRSBee.

¡Ahora es el 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?