Arduino (IoT): Simple Tutorial GSM Parte III

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GSM

Veamos que mas podemos hacer cuando el numero que llama es autorizado sin necesariamente esta almacenado en una SIM.  O sea, podemos “parse” los resultados de la llamada para obtener cierta informacion.  En este caso la informacion que vamos a parse del numero que llama es precisamente el numero que nos da el Caller ID.

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.  En este caso como estamos usando la MEGA, no es necesario usar el SoftwareSerial library porque la MEGA tiene mas puertos seriales, en este caso particular como estamos conectados al 18/19, esos son los que podemos usar haciendo referencia a Serial1.  Si usáramos una Arduino UNO nos veríamos obligados a usar un puerto serial definido en software como el 7 & 8.

Las conexiones se ven así, igual que para los proyectos anteriores:

Arduino GSM SIM900 Tutorial Santiapps Marcio Valenzuela
Arduino GSM SIM900

Veamos un ejemplo sencillo:


#include "SIM900.h"
#include <SoftwareSerial.h>
char inchar;
//SoftwareSerial SIM900(7,8); //Solo usar en caso de Arduino UNO
int onoff=0; // 0 = off, 1 = on
void setup() {
Serial.begin(19200);
Serial.println("setting up");
// set up the digital pins to control
pinMode(12, OUTPUT);
pinMode(13, OUTPUT); // LEDs - off = red, on = green
digitalWrite(12, HIGH);
digitalWrite(13, LOW); // Turn ON RED LED and OFF GREEN LED
// wake up the GSM shield
SIM900power();
Serial1.begin(19200);
delay(20000); // give time to log on to network.
Serial1.print("AT+CLIP=1\r");
delay(100);
}
void SIM900power(){ // funciona para re-iniciar el modulo GSM
digitalWrite(9, HIGH);
Serial.println("9 is HIGH");
delay(1000);
digitalWrite(9, LOW);
Serial.println("9 is LOW");
delay(7000);
}
void doSomething(){ //Este metodo almacena lo que queremos hacer si la llamada es del numero que esperamos. Aquí encendemos unas LEDs
if (onoff==0){
onoff=1;
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
Serial.println("D12 high D13 low");
}
else
if (onoff==1){
onoff=0;
digitalWrite(12, LOW);
digitalWrite(13, HIGH);
Serial.println("D12 low D13 high");
}
}
void loop() {
Serial.println("looping");
if(Serial1.available() >0)
{
Serial.println("Reading SIM");
inchar=Serial1.read();
if (inchar=='5')
{
delay(10);
inchar=Serial1.read();
if (inchar=='0')
{
delay(10);
inchar=Serial1.read();
if (inchar=='4')
{
delay(10);
inchar=Serial1.read();
if (inchar=='A')
{
delay(10);
inchar=Serial1.read();
if (inchar=='B')
{
delay(10);
inchar=Serial1.read();
if (inchar=='C')
{
delay(10);
inchar=Serial1.read();
if (inchar=='D')
{
delay(10);
inchar=Serial1.read();
if (inchar=='W')
{
delay(10);
inchar=Serial1.read();
if (inchar=='X')
{
delay(10);
inchar=Serial1.read();
if (inchar=='Y')
{
delay(10);
inchar=Serial1.read();
if (inchar=='Z')
{
Serial.println("do sometehing");
delay(10);
// Si el numero es 504-ABCD-WXYZ entonces llamamos el método para hacer algo.
doSomething();
// Esperamos un rato y volvemos a monitorear la linea para otra llamada
delay(60000);
}
}
}
}
}
}
}
}
}
}
}
}
}

Aquí estamos haciendo algo solo si el numero que llama es el que queremos, en este caso el 504-ABCD-WXYZ.

Los resultados en el monitor son asi:
setting up
9 is HIGH
9 is LOW
looping
…//Aqui entra la llamada
looping
Reading SIM
looping
Reading SIM
do something
D12 high D13 low

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.

Ahora podemos dar a nuestro robot habilidades realmente avanzadas!

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