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.

 

  Tienda España Tienda Mexico
Vista principal de un arduino uno Arduino UNO Arduino UNO
Vista principal Shield GPRS Shield GPRS

 

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í:

Contenido solo disponible para suscriptores. ¡Accede al contenido! 

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
Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login

(66) Comments

  • Avatar for Ivan Uriarte
    • 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.

  • Avatar for Ivan Uriarte
    • 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?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

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

  • Avatar for Ivan Uriarte
    • 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

  • Avatar for Ivan Uriarte
    • Emmanuel

    lograste guardar la cadena de caracteres en el buffer???
    Yo estoy trabajando con el pic18f4550 … pero no puedo guardar la cadena del mensaje recibido desde el sim800l

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Martín, no he usado el modulo más que con Arduinos, a ver si alguien puede ayudarte.

  • Avatar for Ivan Uriarte
    • Emiliano Piovano

    Hola! Seguramente pusiste algunos «dalay» para la actualización de los datos de esos ds18b20 y eso hace que el codigo tarde en volver a dar la vuelta. Recuerda que los caracteres se van agregando uno por vuelta del loop.

  • Avatar for Ivan Uriarte
    • Martin

    Hola, estoy tratando de recibir sms con PIC 16f877A y SIM800L.
    Yo recibo el SMS y lo guardo en un buffer. Mi duda es en que posicion del buffer comienza el cuerpo del SMS.
    Conecte en SIM800L al Hyperterminal y cuando llega el SMS el modulo me envia esto:

    +CMT: «+54935341xxxxx»,»»,»18/09/01,19:14:34-12″
    Prueba

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola, pues la verdad es que no tengo ni idea, a no ser que tengas algún delay por ahí que te pueda estar fastidiando.

  • Avatar for Ivan Uriarte
    • CaNiTo_O

    Buenas, ante todo muchas gracias por toda la información proporcionada que me está siendo de mucha ayuda. Tengo una pregunta, mi interés es comunicarme vía sms con arduino. He cargado los comandos del tutorial para hacer las pruebas de recepción de sms y ver que se identifica… Estoy trabajando con un arduino mega 2560, la conexión la he hecho en los pines 10 y 11, tengo un lcd 16×2 conectado por i2c para mostrar información además de la que leo por puerto serie, tengo 3 sondas ds18b20 en el pin 3, y ademas una sonda temperatura y humedad en el pin 2. El problema que «tengo» es que la información por puerto serie que me envía el modulo sim900 se muestra muy lenta, cada caracter que me aparece puede tardar unos 20 segundos en aparecer… imagina lo que tarda en poner PIN OK… tengo configurado el puerto serie en 19200 tanto en arduino como en la sim900, y en el monitor serie tambien a 19200. ¿Que puedo estar haciendo mal?

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Muchas gracias por la información Eduardo. Muy útil!

  • Avatar for Ivan Uriarte
    • Eduardo García Villacé

    Buenas noches.

    Yo estuve mucho tiempo igual. Tienes que poner los sensores, por lo menos a 5 metros del modem, si no, la propia señal GSM te los activa como si detectaran presencia. Es más, yo el problema no lo noté llamando al modem, sino que el propio modem se conecta cada 4 horas exactas al repetidor para comprobación y decir «sigo aquí». Así que cada 4 horas me llamaba, y como no estaba delante del equipo no podía ver qué ocurría. Muchas horas perdí con eso. Supongo que los sensores sean igual que los que puse yo en mi alarma: https://www.youtube.com/watch?v=r6WbH2MZNdg

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola! ¿Qué pi nes estás utilizando para los sensores de presencia? La verdad es que no tendría que ocurrir eso que dices, tienes razón. De todas formas si quieres utilizar un programa para enviar y recibir llamadas y que esté más perfeccionado prueba con el de esta sesión https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

  • Avatar for Ivan Uriarte
    • TribuTres

    Buenas Noches.
    El programa lo probé en mi arduino UNO y me funciona sin problemas. Adicional a esto estoy probando que realice una llamada a mi teléfono movil ante la activación de un sensor de presencia, hasta ahí todo va bien funciona. Ahora con este código adicional, el problema se da cuando yo realizo la llamada al arduino, en ese momento las entradas que estoy utilizando para los sensores de presencia se activan logrando pasar las instrucciones IF, y realizan la llamada de alerta. Esto no debería de pasar, por que los sensores no están actuando. De seguro existe algo que me falta, razón por la cual es que ante una llamada que recibe el arduino estas entradas se activan. Por favor le pido que me de una mano para resolver este problema.

    Y gracias por todo el material que comparte, es de mucha ayuda en particular para los que estamos iniciando en esto.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Xavi, podrías hacerte una función que, por ejemplo, cuente algun caracter que se repita y a partir de que pase el número que necesitas partes la cadena. Un saludo.

  • Avatar for Ivan Uriarte
    • Xavi

    Buenas, mira estoy haciendo un proyecto en el que uso este shield y me interesa guardar como variable el mensaje que recibo pero a la hora de querer guardarlo no solo se guarda el SMS enviado sino que se guarda también el numero de telefono y la fecha y hora exacta en la que se ha enviado el mensaje.
    Algun consejo? Gracias.

    Codigo que me sale al enviar mensaje (el num. de telefono lo he borrado parcialmente):
    +CMT: «+3462——-«,»»,»18/02/12,18:16:01+04″
    Hola

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Pues la verdad es que debería ser igual, aunque mi experiencia con los leonardo está llena de situaciones inesperadas. De todas formas a ver si saco un rato y reviso el tutorial por si acaso. Un saludo.

  • Avatar for Ivan Uriarte
    • Jesus

    Hola, yo estoy usando el SIM900 con el Arduino Leonardo, y el envío de mensaje y la realización de llamadas funciona OK, el problema que tengo es muy similar a los comentarios anteriores ya que a la hora de la recepcion de llamadas y mensajes no recibo información en el monitor serie, y el tono de llamada si lo da, sera que debo usar el Arduino UNO, o hay alguna configuración especial para el Leonado, gracias de antemano, saludos.

  • Avatar for Ivan Uriarte

    Pues al parecer se programan igual, solo que el sim800l utiliza una mayor velocidad de comunicación, pero de resto es lo mismo creo. Leí por ahí que como ambos módulos utilizan los mismo comandos AT, se programan igual.

  • Avatar for Ivan Uriarte

    Jesus, supiste cómo enviar y recibir sms con el 800l, tengo la mism duda…

Para porder realizar consultas a nuestros expertos, tienes que ser suscriptor. Suscribiendote nos ayudas a mantener este proyecto en marcha.

¡ Quiero Suscribirme !

Si ya eres premium y no puedes comentar haz login. Hacer login