Ir al contenido principal
Todas las coleccionesConecta tus dispositivos
Usa una SIM IoT de Soracom para conectarte a Ubidots
Usa una SIM IoT de Soracom para conectarte a Ubidots

Aprende a enviar datos de sensores a Ubidots utilizando un Arduino MKR GSM 1400 junto con una tarjeta SIM IoT de Soracom.

Santiago Pachon Robayo avatar
Escrito por Santiago Pachon Robayo
Actualizado hace más de 3 meses
Soracom agrega LTE a la conectividad SIM IoT y M2M | Soracom

Para implementaciones globales de IoT que requieren una tarjeta SIM en múltiples países, Soracom tiene lo que necesitas. La tarjeta SIM de Soracom puede transmitir datos hacia y desde tu dispositivo a través de redes celulares, ya sea con 2G, 3G, 4G LTE o Cat-M1. Además, la SIM tiene un alcance global y proporciona conectividad IoT a dispositivos M2M en más de 300 países.

En este artículo, aprenderás cómo usar una SIM de Soracom junto con un Arduino MKR GSM 1400 para enviar y recuperar datos de Ubidots. Puedes comprar un Kit de Inicio IoT directamente de Soracom, para más información sobre cómo comenzar con este Kit, por favor consulta esta guía.

Requisitos

1. Registrar la SIM IoT en una cuenta de Soracom

Si compraste un Kit de Inicio IoT de Soracom, puedes omitir este paso, ya que tu SIM habrá sido enviada pre-registrada.

Si obtuviste tu tarjeta IoT por separado, por favor sigue estos pasos para registrar tu SIM IoT en tu cuenta de Soracom.

2. Configuración del Hardware

  1. Conecta la antena al Arduino MKR GSM 1400.

  2. Aunque es posible usar el puerto USB de la PC como fuente de alimentación, no se recomienda ya que el módulo GSM puede consumir picos de hasta 2A, lo que puede exceder el límite de corriente del puerto USB. Por esa razón, recomendamos usar una fuente de alimentación externa como una batería LiPo o una fuente de alimentación a través de Vin con un límite de corriente más alto.

3. Configuración del Arduino IDE

Una vez que se ha descargado el Arduino IDE, hay dos cosas principales que instalar antes de usar un Arduino MKR GSM 1400: la definición de la placa y su biblioteca. Por favor sigue estos pasos en la guía de Soracom para configurar el Arduino IDE.

4. Registro IMEI

Algunos países requieren que el módulo GSM esté registrado de acuerdo con sus regulaciones para evitar que sea bloqueado. Por favor verifica si tu país requiere este proceso y cómo debe hacerse.

5. Enviar Datos a Ubidots

Para enviar datos a Ubidots, simplemente copia el siguiente código en tu IDE, asigna el Token y la etiqueta del Dispositivo, luego súbelo a la placa:

#include <Arduino.h>#include <MKRGSM.h>#define SERIAL_SPEED 9600#define PINNUMBER     ""#define GPRS_APN      "soracom.io"#define GPRS_LOGIN    "sora"#define GPRS_PASSWORD "sora"#define UBIDOTS_TOKEN "<YOUR_UBIDOTS_TOKEN>"#define DEVICE_LABEL "<DEVICE_LABEL>"#define UBIDOTS_SERVER "industrial.api.ubidots.com"#define UBIDOTS_PORT 80GSMModem modem;GSM gsmAccess(false); // set true to see and debug modem AT commands on the Serial portGPRS gprs;GSMClient client;boolean notConnected = true;void setup(){  Serial.begin(SERIAL_SPEED);  SerialGSM.begin(115200);  delay(1000);  pinMode(LED_BUILTIN, OUTPUT);  digitalWrite(LED_BUILTIN, HIGH);  delay(250);  for (int loopCount = 0; loopCount <= 60; loopCount++)    while (!Serial) // Wait for a serial connection, timeout after 60 loops (close to 1 min)    {      digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));      delay(1000);    }  Serial.println();  Serial.println(F("Iniciando prueba de Soracom Ubidots.. "));  while (!SerialGSM)    delay(1000);  Serial.println(F("Iniciando conexión de Modem, GSM, GPRS y Ubidots Cloud"));  while (notConnected)  {    digitalWrite(LED_BUILTIN, LOW);    if (gsmAccess.begin(PINNUMBER, true, true) == GSM_READY)    {      //delay(1000);      Serial.print(F("\t[1/3] GSM_READY "));      Serial.print(F(" IMEI del Modem : "));      Serial.print(modem.getIMEI());      Serial.print(F(" ICCID de la SIM : "));      Serial.println(modem.getICCID());      if (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD, true) == GPRS_READY)      {        //delay(1000);        Serial.println(F("\t[2/3] GPRS_READY "));        if (client.connect(UBIDOTS_SERVER, UBIDOTS_PORT) == true)        {          //delay(1000);          Serial.println(F("\t[3/3] Conexión a Ubidots lista "));          notConnected = false;        }        else        {          Serial.println("Conexión fallida");          client.stop();        }      }      else      {        gprs.detachGPRS();      }    }    else    {      gsmAccess.shutdown();    }    Serial.print(F("."));    delay(1000);  }}void loop(){  if (client.connected())  {        float value1 = random(0, 9) * 10;    float value2 = random(0, 9) * 100;    float value3 = random(0, 9) * 1000;          String payload = "{\"var1\":"+String(value1)+",\"var2\":"+String(value2)+",\"var3\":"+String(value3)+"}";    int payloadSize = payload.length();    Serial.println(F("\t Enviando mensaje a Ubidots"));    digitalWrite(LED_BUILTIN, HIGH);    Serial.print(F("La conexión a Ubidots está ACTIVA, enviando '"));    Serial.print(payload);    client.print(F("POST /api/v1.6/devices/"));    client.print(DEVICE_LABEL);    client.println(F(" HTTP/1.1"));    client.print(F("Host: "));    client.println(UBIDOTS_SERVER);    client.println(F("User-Agent: Soracom/1.0"));    client.println(F("Content-type: application/json"));    client.print(F("X-Auth-Token: "));    client.println(F(UBIDOTS_TOKEN));    client.print(F("Content-Length: "));    client.println(payloadSize);    client.println();    client.println(payload);    while(!client.available());        if (client.ready() == 0)    {      Serial.print(F("."));      delay(500);    }    while (client.available())    {      char c = client.read();      Serial.print(c);    }    digitalWrite(LED_BUILTIN, LOW);  }  else  {    Serial.println("No conectado, entrando en el bucle else");    client.connect(UBIDOTS_SERVER, UBIDOTS_PORT);  }  delay(5000);}

NOTA: Este código se basa en el código encontrado aquí.

En este caso, usamos la etiqueta del Dispositivo "soracom-test"

Una vez que el código ha sido subido, puedes comenzar a ver el flujo de datos en tu cuenta de Ubidots.

6. Obtener Datos de Variables de Ubidots

Para recuperar el último Dot de una variable de Ubidots, simplemente copia el siguiente código en tu IDE, asigna el Token, la etiqueta del Dispositivo y la etiqueta de la Variable, luego súbelo a la placa:

#include <Arduino.h>#include <MKRGSM.h>#define SERIAL_SPEED 9600#define PINNUMBER     ""#define GPRS_APN      "soracom.io"#define GPRS_LOGIN    "sora"#define GPRS_PASSWORD "sora"#define UBIDOTS_TOKEN "<YOUR_UBIDOTS_TOKEN>"#define DEVICE_LABEL "<DEVICE_LABEl>"#define VARIABLE_LABEL "<VARIABLE_LABEL>"#define UBIDOTS_SERVER "industrial.api.ubidots.com"#define UBIDOTS_PORT 80GSMModem modem;GSM gsmAccess(false); // set true to see and debug modem AT commands on the Serial portGPRS gprs;GSMClient client;boolean notConnected = true;void setup(){  Serial.begin(SERIAL_SPEED);  SerialGSM.begin(115200);  delay(1000);  pinMode(LED_BUILTIN, OUTPUT);  digitalWrite(LED_BUILTIN, HIGH);  delay(250);  for (int loopCount = 0; loopCount <= 60; loopCount++)    while (!Serial) // Wait for a serial connection, timeout after 60 loops (close to 1 min)    {      digitalWrite(LED_BUILTIN, !digitalRead(LED_BUILTIN));      delay(1000);    }  Serial.println();  Serial.println(F("Iniciando prueba de Soracom Ubidots.. "));  while (!SerialGSM)    delay(1000);  Serial.println(F("Iniciando conexión de Modem, GSM, GPRS y Ubidots Cloud"));  while (notConnected)  {    digitalWrite(LED_BUILTIN, LOW);    if (gsmAccess.begin(PINNUMBER, true, true) == GSM_READY)    {      //delay(1000);      Serial.print(F("\t[1/3] GSM_READY "));      Serial.print(F(" IMEI del Modem : "));      Serial.print(modem.getIMEI());      Serial.print(F(" ICCID de la SIM : "));      Serial.println(modem.getICCID());      if (gprs.attachGPRS(GPRS_APN, GPRS_LOGIN, GPRS_PASSWORD, true) == GPRS_READY)      {        //delay(1000);        Serial.println(F("\t[2/3] GPRS_READY "));        if (client.connect(UBIDOTS_SERVER, UBIDOTS_PORT) == true)        {          //delay(1000);          Serial.println(F("\t[3/3] Conexión a Ubidots lista "));          notConnected = false;        }        else        {          Serial.println("Conexión fallida");          client.stop();        }      }      else      {        gprs.detachGPRS();      }    }    else    {      gsmAccess.shutdown();    }    Serial.print(F("."));    delay(1000);  }}void loop(){  if (client.connected())  {    Serial.println(F("\t Recuperando último Dot de Ubidots"));    digitalWrite(LED_BUILTIN, HIGH);    Serial.println(F("La conexión a Ubidots está ACTIVA, obteniendo último Dot '"));    client.print(F("GET /api/v1.6/devices/"));    client.print(DEVICE_LABEL);    client.print("/");    client.print(VARIABLE_LABEL);    client.print("/values/?page_size=1");    client.println(F(" HTTP/1.1"));    client.print(F("Host: "));    client.println(UBIDOTS_SERVER);    client.println(F("User-Agent: Soracom/1.0"));    //client.println(F("Connection: close"));    client.println(F("Content-type: application/json"));    client.print(F("X-Auth-Token: "));    client.println(F(UBIDOTS_TOKEN));    client.println();    while(!client.available());        if (client.ready() == 0)    {      Serial.print(F("."));      delay(500);    }    while (client.available())    {      char c = client.read();      Serial.print(c);    }    digitalWrite(LED_BUILTIN, LOW);  }  else  {    Serial.println("No conectado, entrando en el bucle else");    client.connect(UBIDOTS_SERVER, UBIDOTS_PORT);  }  delay(5000);}

NOTA: Este código se basa en el código encontrado aquí.

En este caso, usamos la etiqueta del Dispositivo "soracom-test" y la etiqueta de la Variable "var1"

Una vez que el código esté en ejecución, puedes ver el valor recuperado en el monitor serial del Arduino IDE:

Resumen

En este artículo, hemos revisado el proceso de usar una SIM IoT de Soracom para enviar y recuperar datos a Ubidots. Ahora es tu turno de desarrollar y desplegar tu aplicación IoT utilizando la SIM IoT de Soracom en todo el mundo.

¿Ha quedado contestada tu pregunta?