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
Configuración de Hardware
Enviando (POST) Datos a Ubidots
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...