bclose

MÓDULO GSM/GPRS: recibir llamadas y SMS

Seguimos trabajando con el módulo GPRS

Objetivos

 

 

    • Recibir llamadas y SMS.
    • Identificar quién nos llama.
    • Mostrar los SMS en el monitor serie.
 

Material requerido.

RECIBIR LLAMADAS

 

Ya vimos en la sesión anterior cómo conectar y poner en marcha el módulo GPRS, y si alguien probó en ese momento a llamar a la tarjeta que tenemos colocada en el SIM900, habrá visto como da tono normalmente.

Sin embargo no habrá visto nada que indique que se está recibiendo una llamada, aunque si nos fijamos veremos como uno de los LEDs de la tarjeta se apaga mientras se recibe. Así que lo que vamos a hacer es que nos avise mediante el monitor serie cuando las reciba.

En principio la única diferencia hasta llegar al loop va a ser que declararemos una variable global de tipo char para guardar los caracteres que nos lleguen del SIM900.

char incoming_char = 0; //Variable para guardar los caracteres que envía el SIM900

En el loop simplemente comprobaremos que se están enviando caracteres desde el SIM900 y los iremos mostrando por el monitor serie.

void loop()
   {
      if (SIM900.available() > 0)
         {
            incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
            Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
         }
   }

Si ahora probáis a hacer una llamada al número que tengáis en la tarjeta del SIM900 veréis que en el monitor serie mostrará la palabra “RING” una vez por cada tono, y terminará con un “NO CARRIER”.

monitor serie llamada sim900

Pero muchas veces puede sernos muy útil saber quién nos está llamando para, por ejemplo, realizar una acción sólo si nos llama un número determinado (cosa que veremos en la próxima sesión). Para ello utilizaremos el comando “AT+CLIP=1\r”. Si queremos desactivarlo sólo tenemos que volver a ponerlo a 0. Y con esto ya tendríamos el programa completo para recibir llamadas.

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // 10 y 11 para el Arduino Mega. Configura el puerto serie para el SIM900

char incoming_char = 0; //Variable para guardar los caracteres que envia el SIM900

void setup()
   {
      //digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
      //delay(1000); 
      //digitalWrite(9, LOW);
      delay (5000);  //Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
      SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
      Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
      Serial.println("OK");
      delay (1000);
      SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
      delay(25000); //Tiempo para que encuentre una RED
      Serial.println("PIN OK");
      SIM900.print("AT+CLIP=1\r"); //Activamos la identificación de llamada.
      delay(1000);
}

void loop()
   {
      if (SIM900.available() > 0)
         {
             incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
             Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
         }
   }
monitor serie sim900 ring clip

 

RECIBIR SMS

 

Para recibir también correctamente los SMS, sólo tenemos que incluir un par de comandos AT más en el setup. Uno ya lo conocemos de la sesión anterior, que configura el módulo para poder enviar y recibir SMS “AT+CMGF=1\r”. Y también incluiremos el comando “AT+CNMI=2,2,0,0,0\r” que lo configura para que nos envíe por el puerto serie los SMS que nos lleguen.

Así el programa completo para recibir llamadas y SMS quedaría así:

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); // Configura el puerto serial para el SIM900

char incoming_char = 0; //Variable para guardar los caracteres que envía el SIM900

void setup()
   {
      //digitalWrite(9, HIGH); // Descomentar para activar la alimentación de la tarjeta por Software
      //delay(1000); 
      //digitalWrite(9, LOW);
      delay (5000);  // Nos damos un tiempo para encender el GPRS y la alimentación de la tarjeta
      SIM900.begin(19200); //Configura velocidad del puerto serie para el SIM900
      Serial.begin(19200); //Configura velocidad del puerto serie del Arduino
      Serial.println("OK");
      delay (1000);
      SIM900.println("AT + CPIN = \"XXXX\""); //Comando AT para introducir el PIN de la tarjeta
      delay(25000); //Tiempo para que encuentre una RED
      Serial.println("PIN OK");
      SIM900.print("AT+CLIP=1\r"); // Activamos la identificación de llamadas
      delay(1000);
      SIM900.print("AT+CMGF=1\r"); //Configura el modo texto para enviar o recibir mensajes
      delay(1000);
      SIM900.print("AT+CNMI=2,2,0,0,0\r"); //Configuramos el módulo para que nos muestre los SMS recibidos por comunicacion serie
      delay(1000);
   }

void loop()
   {
      if (SIM900.available() > 0)
         {
            incoming_char = SIM900.read(); //Guardamos el caracter que llega desde el SIM900
            Serial.print(incoming_char); //Mostramos el caracter en el monitor serie
         }
   }

Y cuando recibamos un mensaje se nos mostrará por el monitor serie tanto el número desde el que se envía como el contenido del SMS, con la fecha y hora del envío. Y si nos fijamos, al contrario que en las llamadas, el número vendrá con el prefijo internacional, en mi caso el +34 que pertenece a España.

SMS monitor serie sim900

Y como siempre, podéis descargar el programa completo aquí: recibir_llamadas_y_SMS.

En la siguiente sesión utilizaremos lo que hemos aprendido para que nuestro Arduino se ponga en contacto con nosotros si fuera necesario, y a que realice ciertas órdenes utilizando llamadas y SMS, y asegurándonos de que sólo responda ante nosotros. Y, si os quedáis con ganas de más, os recomendamos que echéis un ojo a esta sesión. En ella encontraréis un programa más trabajado en el que, entre otras cosas, vamos a usar una función para enviar los comandos AT y asegurarnos de que la respuesta del módulo sea la que buscamos.

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • Cómo recibir llamadas y SMS y mostrarlas por el puerto serie.
    • A identificar quién nos está llamando.
    • Ya sabemos recibir y enviar llamadas y SMS.
 
 
 

LikeUsOnFacebook_Icon

(66) Comments

    • Marcelo

    Hola primero que nada agradecer tu colaboración.
    Una consulta: necesito enviar al módulo un mensaje, y que este lo saqué por el puerto serie y lo envié a otro dispositivo, este otro dispositivo responderá, está respuesta necesito que se devuelva al remitente que envió el primer mensaje. Sé entiende?, Se puede.? Mil gracias.

      • Ivan Uriarte

      Sin problema. Guarda lo que te llegue en el mensaje en una variable y cuando lo leas lo envías por el puerto serie como hacemos con un texto normal. En el otro lado lo mismo pero al revés. Usa Arduinos Mega que tienen varios puertos serie hardware para no tener problemas.

    • Gamers2k

    Buenas noches tengo dos dudas le agradeceria grandemente su ayuda o sus sugerencias tengo un sim800l y por SMS enciendo y apago bombillos, mis dudas son: 1) puedo mejorar el tiempo de respuesta, es decir despues que mando el SMS tarda mas de 1min en realizar el proceso y a veces no lo realiza (no se si sera por la compañia telefonica o que se satura el modulo) 2) hay algun codigo AT para que solo ejecute las instrucciones de un celular en especifico, me explico que solo desde mi numero celular pueda llevar a cabo las instrucciones en caso de que de otro numero se envie un tengo mande un sms de advertencia, espero haberme explicado bien y muchas gracias de antemano

    • Lizeth

    ¿Podrìa conectar el modulo al puerto serial 0 del arduino?

      • Ivan Uriarte

      Sin problemas, puedes usar cualquier puerto serie.

    • Robert Melendez

    Amigo. Tengo un Sim800l lo uso para aplicaciones domoticas. Pero actualmente no recibe ni manda mensajes O.o! Me siento confundido. Podria recibir tu asistencia?

      • Ivan Uriarte

      Si anteriormente te mandaba mensajes y ahora no, no puede ser un problema del programa, prueba a ver si en eun móvil te funciona esa SIM.

    • Yusneri Guerrero

    Hola, excelente tutorial. Me gustaría saber si con el modulo sim800l o el sim900l puedo recibir un sms y dependiendo del dato recibido dar una respuesta al mismo numero del cual recibí el sms??? gracias de antemano

      • Ivan Uriarte

      Por supuesto, esta sesión debería encaminarte. Un saludo.

Give a Reply

WordPress Anti-Spam by WP-SpamShield