#22 Envío de temperatura a plataforma IoT por medio de comunicación 3G

Introducción

En este tutorial, explicaremos como enviar la temperatura, medida con un sensor TMP36 a la plataforma IoT Thingspeak por medio de comunicación 3G. Anteriormente en el ejemplo 20 se hizo uso de esta plataforma junto al módulo GPRSBee, en este caso se reutilizaron algunas partes del código de ese ejemplo. Lo que haremos es utilizar una tarjeta Gateway Shield, que consiste en una placa que contiene dos socket XBee, la cual conecta dos módulos de comunicación diferentes. En nuestro caso se conectó al socket 1 el módulo 3GBee, que es el encargado de transmitir los datos a la plataforma IoT por medio de una conexión TCP y al socket 2 se conectó un módulo XBee, el cual se encarga de recibir datos de otro módulo XBee que está conectado al sensor de temperatura TMP36.

Lo primero que debes hacer es configurar los módulos XBee, para esto debes conectar cada uno de los módulos al XBee Explorer USB, es necesario instalar el programa X-CTU para realizar las configuraciones. Aquí está el link para instalarlo.

Es necesario cambiar el baud rate del módulo 3GBee, para esto se utilizo el programa Hércules, que puedes descargarlo en el área de descargas.

En la sección de demostración encontraras un vídeo con la explicación paso a paso de lo que debes hacer para que funcione el proyecto.

.

Pasos a seguir:

#1 Armar el circuito según la imagen

#2 Abrir el IDE de Arduino y conectar la tarjeta PICARO al computador

#3 Seleccionar el tipo de tarjeta como Arduino Uno

#4 Elegir el puerto serial en que se encuentra conectada la tarjeta PICARO

#5 Copiar el código de ejemplo al IDE, compilarlo y subirlo

Listado de componentes :

Descargas:

Código:

En este programa utilizamos la librería SoftwareSerial.h, está ha sido desarrollada para permitir la comunicación en serie utilizando pines diferentes al 0 y 1 del Arduino,es un software para replicar la funcionalidad (de ahí el nombre “SoftwareSerial”). Se utiliza el pin 3 como RX (Receptor)  y el pin 2 como TX (Transmisor). De igual manera utilizaremos la librería AltSoftSerial.h, que se encarga de crear un puerto serial utilizando los pines digitales 8 (RX) y 9 (TX) para la recepción y transmisión de datos del socket 2, donde se encuentra conectado el XBee.

Luego de incluir las librerías, se declaran las variables que se usaran en el transcurso del programa. En el void Setup()       Se inician los puertos seriales configurándoles la velocidad, se inicia el modem 3GBee enviando un HIGH (alto) seguido por un LOW (bajo) y luego otro (HIGH), allí el módulo inicia la transmisión y recepción.

Se llama a la función para configurar el módulo 3GBee, donde se realiza lo siguiente:

Se envía el comando AT para verificar el correcto funcionamiento del modem, seguidamente se envía el comando para configurar el protocolo a utilizar y el APN de la SIM card que se está utilizando, se envía el comando para activar el contexto GSM, se configura para que no haya control de flujo y por ultimo inicia la conexión TCP por el puerto 80 con el host remoto.

 En el void loop(), se inicia la recepción de datos del socket 2 , Se asegura que llegue le mensaje completo, 7E es el byte de inicio y se descartan los bytes hasta llegar al dato análogo, que es la temperatura, el valor de la variable analogReading tendrá un valor de 0 1024 ya que viene de un ADC, las operaciones siguientes son para calcular la temperatura del sensor y mostrarlas en grados centígrados.

 Se establece un rango de valores permitidos para enviar la temperatura a la plataforma, esto sucede porque como es un sensor analógico interfiere en el muchos factores que nos pueden afectar, lo que causa que envie valores altos o bajos sin que exista cambio de temperatura, al cumplirse la condición se llama a la función SendtempGPRSBee() la cual abre la conexión TCP con el dominio, indica que va a enviar datos y manda la trama, finaliza el mensaje con el char(26) y cierra la conexión del 3GBee, al encontrarse estos procesos en el void loop, se repetirán consecutivamente.

#include 

#include  //Libreria para manejar el segundo socket

SoftwareSerial GPRSBee(3,2); // RX, TX

AltSoftSerial mySerial;



float temp;

float volt;

int PowerModem = 7;

int salida=0;

char dato;

float aux=26.00; //Valor para comparar y almacenar el valor anterior de temp

#define SENSOR_TEMP1 "Tem"



void setup() {

  pinMode(PowerModem, OUTPUT);

  Serial.begin(9600); //Inicia los puertos seriales

  mySerial.begin(9600);

  GPRSBee.begin(9600);

  digitalWrite(PowerModem, HIGH); //Para iniciar el modem

  serial();

  delay(1000);

    while(salida==0)

    {

    configuracionGPRSBee(); //Se configuran parametros para usar el modulo

    delay(1000);

    }

  serial();

}



void loop() {

 //Leer dato Recibido por el XBee

  if (mySerial.available()>= 21){

   if (mySerial.read() == 0x7E){    //Byte de inicio de trama

    for (int i=0; i<18; i++){  //Como se usa el pin D0 en el XBee los bytes 19 y 20 son los de datos

      byte discardByte= mySerial.read(); //Descarta los bytes iniciales

    }

    int analogMSB = mySerial.read(); //Selecciona los byte de datos analogos

    int analogLSB= mySerial.read();

    int analogReading = analogLSB + (analogMSB*256); //Une los bytes

    volt= analogReading * (1.2/1024);

    temp= (volt -0.5) *100;

    if (((aux-5) < temp) && (temp < (aux+5))) { //Se establece un rango para mostrar los valores

    aux= temp ;

  String Tem = String(temp);  

  delay(2000);

  SendtempGPRSBee(SENSOR_TEMP1, Tem); //Enviar datos de temperatura

    } else {

      aux=temp;

      }

}

}

  }

int serial() //Función para mostrar en el monitor serial lo que se recibe o envia del otro puerto serial

{

  while(Serial.available() != 0)

  {

    dato = Serial.read();

    GPRSBee.print(dato);

  }

  while(GPRSBee.available() != 0)

  {

    dato = GPRSBee.read();

    Serial.print(dato);

  }

 }

int configuracionGPRSBee()

{

  GPRSBee.println("AT"); //Verifica funcionamiento

  serial();

  delay(3000);

  GPRSBee.println("AT+CGDCONT=1,\"IP\",\"imovil.entelpcs.cl\""); // APN de la compañia de tu SIM

  serial();

  delay(3000);

  GPRSBee.println("AT#SGACT=1,1"); //Activa el contexto GSM

  serial();

  delay(3000);

  GPRSBee.println("AT&K0"); //Se configura sin control de flujo

  serial();

  delay(3000);

  GPRSBee.println("AT#SD=1,0,80,\"api.thingspeak.com\",0,0,1"); //Abre la conexión remota a través del socket

   serial();

  delay(3000);

  salida=1;

}

int SendtempGPRSBee(String sensor_name, String valor) //Funcion para enviar temperatura

{

  GPRSBee.println("AT#SD=1,0,80,\"api.thingspeak.com\",0,0,1"); //Abre la conexión remota a través del socket

  delay(3000);

  serial();

  delay(1000);

  GPRSBee.println("AT#SSEND=1"); //Enviar datos

  serial();

  delay(700);

  GPRSBee.println("GET /update?key=GPMAE3VSQ60KKKYT&field1="+valor); //pagina web a la que enviamos los datos

  serial();

  delay(2000);

  GPRSBee.println((char)26); //Caracter para finalizar el mensaje

  delay(500);

  serial();

  GPRSBee.println("AT#SH=1"); //Finaliza conexion

  delay(500);

  serial();

}

 

Demostración

Acá tenemos un vídeo donde se explica el procedimiento necesario para la implementación de tu proyecto, iniciamos configurando los módulos de comunicación, seguido de la ejecución del programa en la tarjeta PICARO, obteniendo como resultado, la transmisión de la temperatura a la plataforma IoT.

¿En busca del Kit PICARO?

Con el PICARO Starter Kit podrás realizar estos ejemplos ¡y mucho más!
Producto Chileno. Encuéntralo en MCI Electronics.

Contacto

Direccion Luis Thayer Ojeda 0115 Of. 1105, Providencia, Santiago, Chile.

Phone: +56 2 2333 9579 / +56 2 2231 9268

Horario Lunes a Viernes de 8:00 a 18:00

Nosotros

En MCI Electronics, estamos aquí para mantener la industria en movimiento. Nuestro objetivo es difundir y hacer accesible el uso de la electrónica a todo aquel que tenga el interés. Para ello nos esforzamos para traer los mejores componentes y módulos de manera que puedas aprender desarrollando tus propios proyectos.

Somos tu aliado en electrónica.

Suscríbete a nuestro boletín