bclose

MÓDULO GSM/GPRS: llamar y enviar SMS

Empezando con el módulo GPRS

Objetivos

 

 

    • Presentar la tarjeta GSM/GPRS basado en el módulo SIM900.
    • Aprender a conectarlo y a ponerlo en marcha.
    • Usarlo para realizar llamadas y enviar SMS.
 

Material requerido.

 

  Tienda España Tienda Mexico
Vista principal Arduino UNO Arduino UNO
Vista principal Shield GPRS Shield GPRS

 

 

GSM Y GPRS

 

Hemos visto varias formas de conectar nuestro Arduino al exterior, como Ethernet y wifi, pero puede que alguna vez queramos comunicarnos con él y no tengamos acceso a ninguna de estas redes, o no queramos depender de ellas. Puede ser muy útil, por ejemplo, para colocar en una estación meteorológica.

Para este tipo de propósitos podemos utilizar un módulo GSM/GPRS con una tarjeta SIM, de forma que podamos comunicarnos con él como si se tratase de un teléfono móvil. Y es que esta tarjeta basada en el módulo SIM900 nos permite enviar y recibir llamadas y SMS y conectarnos a Internet, transformando nuestro Arduino en un teléfono móvil.

gprs shield

EL GSM (Global System for Global Communications) es el sistema de comunicaciones que más se utiliza en teléfonos móviles y es un estándar en Europa.  La primera funcionalidad de esta tecnología es la transmisión de voz, pero también permite la transmisión de datos (SMS, Internet), eso sí,  a una velocidad muy baja de 9kb/s.

El GPRS (General Packet Radio Service) es una extensión del GSM basada en la transmisión por paquetes que ofrece un servicio más eficiente para las comunicaciones de datos, especialmente en el caso del acceso a Internet. La velocidad máxima (en teoría) del GPRS es de 171kb/s, aunque en la práctica es bastante más pequeña.

 

CONEXIONES Y PUESTA EN MARCHA

 

El módulo que vamos a usar para el tutorial no tiene pines para montarla directamente sobre el Arduino, pero hay modelos que sí lo permiten. De todas formas la conexión es muy sencilla.

Esta tarjeta está basada en el módulo SIM900, y la configuraremos y controlaremos vía UART utilizando los comandos AT.

Lo primero tendremos que colocar la tarjeta SIM que vayamos a usar. El adaptador para las tarjetas es del tamaño de las SIM normales, que en su mayoría han sido sustituidas por MicroSIM  y NanoSim, así que tendremos que hacernos con una o enganchar una de estas últimas en un adaptador (el módulo que utilizamos en la sesión y que podéis conseguir en la tienda de esta página incluye adaptadores para todos los tamaños de tarjeta). Con un poco de paciencia y de pericia también podríamos colocar una nano o una micro directamente, pero en correremos peligro de que se mueva y deje de hacer contacto.

Antes de conectar nada al Arduino, vamos a colocar los jumpers que tiene la tarjeta de forma que utilicemos para comunicarnos los pines 7 y 8.

bridges gprs

Para conectarla a nuestro Arduino tenemos dos opciones, y para las dos necesitaremos una fuente de alimentación externa, ya que con conectar el Arduino por USB será suficiente para encender el módulo, pero no para alimentar también la tarjeta. Si conectamos la alimentación externa al shield GPRS y alimentamos el Arduino con el USB o una fuente aparte, sólo tendremos que unir los pines 7 y 8 para la comunicación serie y el GND entre ambas tarjetas.

 
  • Si utilizáis un Arduino Mega, la conexión sería de los pines 7 y 8 del GPRS a los pines 10 y 11 del Mega.
  • En la programación también habría que cambiar la instrucción en la que definimos la instancia Software Serial que creamos y ponerle los pines 10 y 11 (lo recordaremos más adelante).
 

 

montaje gprs

Si conectamos la alimentación externa al Arduino a parte de las tres conexiones anteriores tendremos que unir los pines 5V del Arduino y del GPRS.

arduino gprs shield

Para encender el shield tenemos que colocar el interruptor en la posición correcta. Las dos posiciones corresponden a cada uno de los tipos de conexión que hemos explicado arriba. Una vez hagamos esto se encenderán dos LEDs

Para activar la alimentación de la tarjeta SIM también nos encontramos con dos opciones. Podemos hacerlo manualmente presionando el pulsador que hay en uno de los laterales durante uno o dos segundos y veremos que se enciende otro LED, y que uno de los que se había encendido antes empieza a parpadear una vez por segundo. Este parpadeo nos indica que está buscando la red. Cuando la encuentre y se conecte cambiará la frecuencia de parpadeo y lo hará cada 3 o 4 segundos. Eso sí, no se conectará hasta que no metamos el PIN de la SIM, que ya veremos ahora cómo hacerlo.

encendido modulo sim900

También podemos activarla por programa, pero antes tendremos que realizar una soldadura en el pad «R13» que está justo al lado de la regleta de pines roja «J16». Y una vez hecho esto la activaremos mandando un pulso de 1 segundo al pin 9 de la tarjeta. Así que si queréis usar este tipo de activación tendréis que añadir un cable entre un pin digital (en nuestro caso el 9) y el pin 9 de la tarjeta que hemos conectado. Eso sí, recordad que si está activada la tarjeta y volvemos a meter el pulso, lo que haremos será apagarla.

activar tarjeta software

PROBANDO LOS COMANDOS AT

 

Para poder comunicarnos vía comandos AT tendremos que cargar un programa para la comunicación serie como hemos hecho tantas veces anteriormente. Crearemos una instancia llamada SIM808 y seleccionaremos los pines del Arduino que queramos usar para comunicarnos (Rx y Tx). Nosotros hemos elegido el 7 y el 8, pero podéis usar cualquiera que sea compatible con la librería. También podéis cambiar la velocidad de comunicación, pero debe ser la misma para el puerto serie y para la instancia que hemos creado. Nosotros hemos elegido 19200 porque es la que usa el SIM900, de forma que podamos usar los programas que ya tenemos de esas sesiones.

#include <SoftwareSerial.h>
SoftwareSerial SIM900(7, 8); //Seleccionamos los pines 7 como Rx y 8 como Tx

void setup()
{
 SIM900.begin(19200);
 Serial.begin(19200);
 delay(1000);
}

void loop()
{
 //Envíamos y recibimos datos
 if (Serial.available() > 0)
 SIM808.write(Serial.read());
 if (SIM808.available() > 0)
 Serial.write(SIM808.read());
}

Una vez hayamos cargado el programa abrimos el monitor serie y seleccionamos la velocidad correcta. El primer comando AT nos servirá simplemente para saber si el módulo responde y que por lo tanto la comunicación funciona. Y este comando es simplemente AT, lo escribimos y pulsamos INTRO. Debería respondernos con un OK; si no deberíamos repasar que esté todo en orden: conexiones, encendido y velocidad correcta.

monitor serie AT

Comprobado esto, ya podemos meter el PIN de la tarjeta SIM, que se hace mediante el comando AT+CPIN=»XXXX»; donde tendréis que sustituir XXXX por el pin que corresponda, en mi caso 1867, o sea, AT+CPIN=»1867″. Obtendremos un mensaje de respuesta indicando si el PIN es correcto, y en caso de que lo sea, el LED que parpadeaba una vez por segundo pasará a hacerlo cada 3 segundos (más o menos), indicando que ha encontrado la red móvil.

comando at pin sim

Y ahora ya estamos en disposición de enviar y recibir llamadas y conectarnos a Internet. Para comprobar que efectivamente podéis llamaros al numero de teléfono de la SIM que hayáis puesto en el módulo, o usar el comando ATDXXXXXXXXX; (sustituyendo las X por el número de teléfono y respetando el «;») para llamar a quien queráis. Y si le conectáis unos cascos y un micrófono al módulo podréis hablar como si fuera un teléfono normal.

monitor serie llamar recibir

O si llamáis al número de teléfono de la SIM que hayáis colocado, oiréis tono y en el monitor serie veréis como aparece «RING».

 

REALIZANDO LLAMADAS DESDE ARDUINO

 

Para comunicarnos con el módulo utilizaremos comandos AT, pero lo primero que haremos será incluir la librería SoftwareSerial.h y configurar la comunicación por los pines 7 y 8 (10 y 11 para el Arduino Mega).

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

El módulo utiliza una velocidad de comunicación de 19200KHz, así que en el setup configuraremos el puerto serie para el SIM900 y para Arduino a esa velocidad.

Además introduciremos el PIN de la tarjeta para desbloquearla utilizando comandos AT y le daremos un poco de tiempo para que se conecte a la red. El comando que utilizaremos es AT+CPIN=«XXXX«, donde sustituiremos XXXX por el PIN de nuestra tarjeta.

 
  • Recordad que como vamos a meter el comando dentro de un println, tendremos que utilizar las \ antes de cada “ para que no se comporten como un carácter especial.
 

Así que el setup nos quedaría así:

Contenido solo disponible para suscriptores.

¡¡¡Suscribete Aquí!!!

serie llamar

 

ENVIAR SMS

 

La programación para enviar un SMS va a ser idéntica, pero crearemos otra función que se encargará de mandar los comandos AT para enviar el SMS.

Primero usaremos el comando AT+CMGF=1\r para indicarle al módulo GPRS que vamos a mandar un mensaje, y a continuación introducimos el número al que va dirigido con el comando AT+CMGS = «XXXXXXXXX».

Una vez hecho esto simplemente le enviamos el contenido del mensaje y lo finalizamos con el caracter ^Z. La función quedaría así:

Contenido solo disponible para suscriptores.

¡¡¡Suscribete Aquí!!!

Aquí os dejamos un vídeo para que veáis cómo nos ha ido a nosotros:

 

En la siguiente sesión aprenderemos a recibir llamadas y SMS. Y, si os habéis 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 esperamos.

 

Resumen de la sesión

 

En esta sesión hemos aprendido varias cosas importantes:

 
    • Podemos hacer que nuestro Arduino se comporte como un teléfono móvil.
    • Cómo conectar y configurar la tarjeta GPRS.
    • A enviar llamadas y SMS a cualquier teléfono.
 
 
 

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

(337) Comments

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Jose, y qué problema tienes?

  • Avatar for Ivan Uriarte
    • Jose

    Hola como estas recien adquiri una tarjeta totalmente nueva pero ya le e cargado variedades de codigos, me podrias ayudar

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Marcelo, normalmente se debe a que la alimentación del GPRS no es suficiente. Un saludo.

  • Avatar for Ivan Uriarte
    • Marcelo villa

    Buenas noches quisiera que alguien me ayude tengo un sim900, cargue un SKECTK para prender un led con llamada telefónica y ahora solo enciende el módulo sim900 pero el led de color azul que parpadea cuando encuentra la red no prende no sé que paso por favor ayúdenme .

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Diego, pues no es muy común no jajaja. Me alegro de que te haya servido de ayuda. Un saludo.

  • Avatar for Ivan Uriarte
    • DIEGO

    Hola Iván, muchas gracias por compartir tus conocimientos. He seguido tus tutoriales del módulo GSM/GPRS, los he adaptado para usar 2 puertos de comunicación con Arduino Mega 2560 y el módulo SIM800L y cada ejemplo funcionó al primer intento, lo cual no es muy común en esto. Ahora con lo aprendido me puedo acercar a mi meta.
    Saludos desde Argentina, Diego.

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Matías, puedes usar el modo sleep y despertarlo mediante interrupciones. Depende de cómo quieres que funcione puede servirte o no. Échale un ojo a esta sesión y si necesitas algo nos dices. Un saludo.

  • Avatar for Ivan Uriarte

    Buenas Noches, ante que nada, muchas gracias por la cantidad de aportes que realizan en esta Web y lo detallados que son.
    Solo quisiera hacerles una consulta, si tenemos un modulo Arduino UNO con su shield GSM en la ubicación X y de la misma manera disponemos de modulo Arduino y Shield GSM en la ubicación Y. Si se envía un SMS desde la ubicación X a la Y, se puede tener el modulo GSM de la ubicación Y en reposo hasta que sea necesario activarse (encenderse) para recibir el SMS? Hay alguna manera de configurar esto o no es posible hacerlo y siempre deben quedar encendidos los módulos lado X e Y?. Muchas gracias!

  • Avatar for Ivan Uriarte

    hola que tal quiero alimentar una batería de 9v al arduino mega…mi pregunta es en la placa estara conectado un teclado 4×4, pantalla 16×2, modulo gsm sim 900 y unos sensores magneticos resistira el volatje de 9v esos dispositivos…gracias

  • Avatar for Ivan Uriarte
    • Ivan Uriarte

    Hola Asdrubal, en está sesión tenemos el programa pero más completo y detectamos si los comandos AT han dado error https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

  • Avatar for Ivan Uriarte
    • Asdrubal

    como saber si la llamada que haces falló como detectar esa falla muchas gracias

  • Avatar for Ivan Uriarte
    • Admin

    Uno de dos amperios es perfecto Alex

  • Avatar for Ivan Uriarte

    Que tal saludos, una pregunta pienso alimentar el arduino y el modulo gsm con una adaptador de 9v a 2A. Crees que haya inconvenientes en el funcionamiento de los módulos odebería usar uno de 1A.

  • Avatar for Ivan Uriarte
    • Ivan

    Hola José Luis, he visto que estabas tenías varios comentarios, pero te respondo en este. Si te funciona la llamada por lo menos vamos bien encaminados. El programa más completo que tenemeos es el de la sesión https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

    Por otra parte, ¿puedes recibir las llamadas y los SMS correctamente? Deberías poder verlos en el puerto serie. Y por último, prueba a eliminar el +56 o lo que sea que es tu prefijo internacional donde pones el número al que va dirigido el mensaje. Prueba un poco y nos cuentas. Un saludo.

  • Avatar for Ivan Uriarte
    • Jose Luis

    Hola, no puedo mandar mensajes pero si llamar a qué se debe?

  • Avatar for Ivan Uriarte
    • Ivan

    Hola Andrés, lo más probable es que tengas puesta la velocidad del monitor serie diferente que la del módulo. Recuerda que tienes que ponerla a 19200 igual que en el programa en el selector de abajo a la derecha del monitor serie. Un saludo.

  • Avatar for Ivan Uriarte
    • Ivan

    Hola Andrés, en esta sesión explicamos como encender y apagar el módulo por software, entre otras cosas. Un saludo.

    https://www.prometec.net/gprs-enviar-recibir-llamadas-sms/

  • Avatar for Ivan Uriarte

    hola Ivan muy buena explicación, tengo una pregunta estoy haciendo una alarma con el arduino mega y modulo shield como hago para evitar estar presionando manualmente ese pulsador es decir que ya salga directamente que quede permanente sin estar pulsando como seria las conexiones entre ellos….gracias

  • Avatar for Ivan Uriarte

    Buenas tardes!
    Cuando utilizo el código que habéis proporcionado en la página, por que puede ser que cuando enciendo el monitor serial me aparecen caracteres raros en lugar de aparecer «Realizando llamada» o lo que se tenga puesto.
    Un saludo, espero respuesta!

  • Avatar for Ivan Uriarte
    • Ivan

    Hola Daniel, por supuesto que puedes llamarle, y ademas puedes descolgar la llamada yu si le conectas unos cascos y un micro hablar por teléfono. Para colgar no tendrías más que leer el pulsador y mandar el comando ATH que cuelga la llamada. Despúes envías el sms y listo. Un saludo.

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