Arduino (IoT): Simple Tutorial GSM Parte V

GSM Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GSM: Parte V

Ahora queremos hacer cosas mas precisas como hacer algo si recibimos un SMS.

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.

Veamos un ejemplo sencillo:


#include <SoftwareSerial.h>
char inchar;
//SoftwareSerial SIM900(7, 8);
int led1 = 10;
int led2 = 11;
int led3 = 12;
int led4 = 13;
void setup(){
Serial.begin(19200);
pinMode(led1, OUTPUT);
pinMode(led2, OUTPUT);
pinMode(led3, OUTPUT);
pinMode(led4, OUTPUT);
digitalWrite(led1, LOW);
digitalWrite(led2, LOW);
digitalWrite(led3, LOW);
digitalWrite(led4, LOW);
SIM900power();
Serial1.begin(19200);
delay(20000);
Serial1.print("AT+CMGF=1\r"); // modo texto
delay(100);
Serial1.print("AT+CNMI=2,2,0,0,0\r");
delay(100);
Serial.println("Ready...");
}
void SIM900power() {
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
void loop() {
//Si entra algun caracter por el modulo GSM...
if(Serial1.available() >0){
inchar=Serial1.read();
if (inchar=='#'){
delay(10);
inchar=Serial1.read();
if (inchar=='a'){
delay(10);
inchar=Serial1.read();
if (inchar=='0'){
digitalWrite(led1, LOW);
} else if (inchar=='1'){
digitalWrite(led1, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='b'){
inchar=Serial1.read();
if (inchar=='0'){
digitalWrite(led2, LOW);
} else if (inchar=='1'){
digitalWrite(led2, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='c'){
inchar=Serial1.read();
if (inchar=='0'){
digitalWrite(led3, LOW);
}else if (inchar=='1'){
digitalWrite(led3, HIGH);
}
delay(10);
inchar=Serial1.read();
if (inchar=='d'){
delay(10);
inchar=Serial1.read();
if (inchar=='0'){
digitalWrite(led4, LOW);
}else if (inchar=='1'){
digitalWrite(led4, HIGH);
}
delay(10);
}
}
Serial1.println("AT+CMGD=1,4"); // borrar todos los SMS
}
}
}
}
}

Aquí estamos haciendo algo al recibir un SMS.  Ya hemos visto como enviar uno pero aquí estamos recibiendo uno.  Ademas de recibirlo, podemos parse el contenido del mismo.  Luego escribimos este contenido al monitor serial.  Perfectamente podríamos también llevar a cabo bloques de código dependiendo de lo que se recibió como mensaje 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.

Ahora podemos dar a nuestro robot habilidades realmente avanzadas!

Arduino (IoT): Simple Tutorial GSM Parte IV

GSM Arduino Santiapps

Arduino Honduras Santiapps Marcio Valenzuela

Tutorial GSM IV

Ahora exploraremos como llamar a Arduino para hacer algo mas especifico.  Aquí vamos a parse otra informacion sobre la llamada entrante.

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.  Seguiremos usando los pins 18 & 19 en nuestra MEGA como Serial1.

En este caso leeremos cuantas veces suena el timbre.  El timbre suena y manda una señal “RING”.  Mejor dicho la librería nos permite identificar 1 ring a la vez.  El modulo se comunica a traves de tonos y cada tono significa algo distinto.  Esto significa que podemos saber cuantas veces ha sonado el timbre de la llamada entrante y reaccionamos en base a esa informacion.

Veamos un ejemplo sencillo:

#include <SoftwareSerial.h>
char inchar;
//SoftwareSerial SIM900(7, 8);
int numring=0;
int comring=3;
int onoff=0; // 0 = off, 1 = on
void setup(){
Serial.begin(19200);
// set up the digital pins to control
pinMode(12, OUTPUT);
pinMode(13, OUTPUT);
digitalWrite(12, HIGH);
digitalWrite(13, LOW);
// wake up the GSM shield
SIM900power();
Serial1.begin(19200);
Serial1.print("AT+CLIP=1\r");
delay(100);
}
void SIM900power(){
digitalWrite(9, HIGH);
delay(1000);
digitalWrite(9, LOW);
delay(7000);
}
void doSomething(){
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(){
if(Serial1.available() >0){
inchar=Serial1.read();
if (inchar=='R'){
delay(10);
inchar=Serial1.read();
if (inchar=='I'){
delay(10);
inchar=Serial1.read();
if (inchar=='N'){
delay(10);
inchar=Serial1.read();
if (inchar=='G'){
delay(10);
// Nuestro modulo ha sonado 1 vez
numring++;
Serial.println("ring!");
if (numring==comring){
numring=0; // reseteamos el counter
doSomething();
}
}
}
}
}
}
}

Como podemos ver la tecnología nos permite realizar tareas bien especificas en base a controles bien puntuales en nuestros proyectos.

Exploremos ahora opciones con mensajes de texto!