
Tutorial GSM
En el tutorial anterior vimos como hacer una llamada desde el modulo SIM900. Ahora veremos como verificar si un numero que llama esta autorizado (grabado en nuestro SIM) y si lo es, enviar mensajes de texto tipo SMS. Esto es muy util para autenticar una llamada para ejecutar código en un proyecto Arduino.
Requisitos:
- Computadora (mac)
- Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry… Este tutorial en particular usa una Arduino MEGA.
- Modulo SIM900 GSM/GPRS
- Arduino IDE (https://www.arduino.cc/en/Main/Software)
Estaremos usando el modulo SIM900 GSM/GPRS para nuestra comunicación:

Como podemos ver, el modulo tiene un pin 5V, 2 pines GND y los típicos 2 pines para Rx y Tx. Por ende la conexión es bastante sencillo. Sin embargo nuevamente si vamos a subir las instrucciones a la UNO via el Serial 0 & 1 como Rx y Tx, no podremos usarlos para comunicación con el modulo Sim900 así que tendremos que definir pines de Rx y Tx via software, usando la libreria SoftwareSerial como hicimos en el tutorial WiFi.
Ahora aprenderemos no solo a usar la call, sino también la sms:
#include "SIM900.h"
#include <SoftwareSerial.h>
#include "sms.h" //Ahora si enviaremos mensajes
#include "call.h"//Usaremos llamadas
CallGSM call; //Objeto para llamadas
SMSGSM sms; //Objeto para mensajes
char number[20];
int value=0;
void setup(){
//Serial connection.
Serial.begin(9600);
Serial.println("GSM testing.");
if (gsm.begin(2400))
Serial.println("\nstatus=READY");
else Serial.println("\nstatus=IDLE");
};
void loop(){
//Revisa estatus de numero almacenado desde pos 1 a 3
stat=call.CallStatusWithAuth(number,1,3);
Serial.println(stat);
//Revisar si numero esta autorizado en SIM
if(stat==CALL_INCOM_VOICE_AUTH){
Serial.println("Authorized Call received...");
//Cortar llamada
call.HangUp();
delay(2000);
//Enviar sms a number
sms.SendSMS(number,"Gutten tagh");
}
delay(1000); //Esperar...
//O enviar SMS automaticamente y ya...
sms.SendSMS(number,"Hola desde ArduinoHonduras");
};
Aquí estamos enviando dos mensajes de texto. Verán que el código que envía el mensaje es sms.SendSMS() y hay 2:
- Uno esta al final de loop() y esta afuera del bloque IF. Esto es porque el bloque IF lo que hace es UNICAMENTE enviar un SMS si el numero esta dentro de los números registrados en el SIM. Eso depende de su chip SIM y si el comando sms.SendSMS() estuviera dentro del bloque IF, se ejecutaría pero si el numero NO estuviera registrado en el Address Book de su SIM no se enviaria el SMS.
- Otro esta adentro del IF y como explicamos solo se ejecutará si el numero que llama esta dentro de sus posiciones 1-3 del chip SIM.
En todo caso es necesario llamar al numero del chip SIM desde un celular para ejecutar el código. Así que una vez cargado el sketch o código, hagamos la llamada al chip SIM de Arduino desde un celular.
Primero vemos algunos mensajes de debug:
GSM Shield testing.
ATT: OK
DB:ELSE
DB:CORRECT BR
RIC: OK
RIC: ATE0
ATT: +CPMS:
RIC:
+CPMS: 53,190,53,190,53,190
ATT: SHUT OK
RIC: SHUT OK
status=READY
DEBUG:SMS TEST
RIC: NO STRING RCVDATT: OK
RING
+CLIP: “+504sunumerodecelular”,145,””,,””,0
ATT: +CPBR
RIC:
+CPBR: 1,”+numerodecelular”,145,”ArduinoHN”
//Posicion 1 del SIM
ATT: +CPBR
RIC:
+CPBR: 2,”104″,129,”Educacion” //Posicion 2 del SIM
CHIAMANTE +504sunumerodecelular
SALVATO 104
ATT: +CPBR
RIC:
+CPBR: 3,”111″,129,”INHFA” //Posicion 3 del SIM
CHIAMANTE +504sunumerodecelular
SALVATO +504sunumerodecelular
Authorized Call received…
DEBUG:SMS TEST
ATT:
>RIC: ATH
OK
AT+CMGS=”+504sunumerodecelular”
>
DEBUG:>
ATT:
+CMGSRIC: Gutten tagh
+CMGS: 3
Aquí vemos que debido a que nuestro numero de celular no esta almacenado en la SIM, solo se ejecuta el código afuera del IF block. Tenemos que usar comandos AT manuales para agregar nuestro numero al chip SIM. El comando es: AT+CPBW=sunumero:
Serial.print(“AT+CPBW=3,\+504sunumerocelular,129,ArduinoHonduras\r”);
Pero lo mas fácil es agregarlo poniendo el chip en un celular y simplemente modificando la posición 1.
Los resultados del sms afuera del if-block se puede ver aquí:

Y aquí el resultado del comando de sms adentro del if-block:

Que podemos hacer con esta tecnología:
- Utilizar GPRS para transmitir datos entre nuestro proyecto Arduino y la nube. Por ejemplo parse datos en nuestros proyectos de servicios web como twitter o servicios meteorológicos.
- Postear datos remotamente desde nuestros proyectos así como crear proyectos que actúen como servidores de información en la nube.
- Enviar instrucciones a proyectos y controlarlos via llamadas o SMS desde números telefónicos autorizados.
Ahora podemos dar a nuestro robot control realmente remoto!