Arduino (IoT): Simple Tutorial GSM Parte II

Arduino Honduras Santiapps Marcio Valenzuela

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:

  1. Computadora (mac)
  2. Arduino MEGA (u otra variante Arduino) o incluso Arduino clone, Edison, Raspberry…  Este tutorial en particular usa una Arduino MEGA.
  3. Modulo SIM900 GSM/GPRS
  4. Arduino IDE (https://www.arduino.cc/en/Main/Software)

Estaremos usando el modulo SIM900 GSM/GPRS para nuestra comunicación:

Arduino - SIM900 GSM_GPRS module Santiapps Marcio Valenzuela
Arduino – SIM900 GSM_GPRS

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:

  1. 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.
  2. 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í:

Arduino Tutorial GSM SMS Santiapps Marcio Valenzuela
Arduino Tutorial GSM SMS

 

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

Arduino GSM Tutorial Enviar SMS Mensajes de Texto Santiapps Marcio Valenzuela
Arduino GSM Tutorial Enviar SMS Mensajes de Texto

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!

Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s