Siguenos en ...

Google+facebooktwitter

youtubepinterest RSS aquihayapuntes

Últimos Tutoriales

Licencia

Creative Commons

 

Todo el contenido de este sitio está bajo una licencia de Creative Commons

 

Control de Mensajes SMS a través de un PIC

 

Envío y recepción de mensajes SMS con el módulo GSM TC35i

Paso a ahora a redactar las experiencias con el módulo GSM TC35i que el amigo inyelber a tenido a bien compartir con todos nosotros, para cualquier pregunta o duda podéis hacerla a través del hilo abierto en el foro.

 

Descripción del módulo GSM TC35i

 

Módulo GSM TC35i

 

El módulo GSM TC35i es una mejora del GSM TC35 este último es solo dual band es decir trabaja solo con las frecuencias de 900/1800 MHz. Como nos comenta Inyelber un dato importante antes de adquirir el módulo es comprobar si en nuestro país existen operadoras que trabajen en esas frecuencias, para evitar este problema podemos adquirir el modulo GSM SIM900, cuesta un poco más pero es Quadband y sirve para todas las operadoras.

 

El GSM TC35i incorpora una interfaz serie RS232 y un conector DB9, el módulo está diseñado para ser conectarlo directamente al PC por lo que en la placa lleva un MAX232 para adaptar los niveles al estándar RS232 que utiliza el PC, para conectar el módulo a un PIC debemos utilizar otro MAX232 para volver adaptar los niveles a los valores TTL requeridos por el PIC, en las siguientes fotos se ve el detalle de las conexiones.

 

Detalle de las conexiones del MAX232 que lleva el módulo GSM:

 

Detalle Max232 de la placa

 

Detalle de las conexiones del segundo MAX232, por un lado se conecta al MAX232 que lleva incorporado el módulo GSM y por el otro al PIC:

 

Esquema del segundo MAX232

Nota: En el foro se encuentra un esquema del módulo.

 

Probando el módulo..

Antes de conectar el módulo al PIC se comprueba su correcto funcionamiento a través de una conexión al PC y el hyperterminal.

Para la conexión del módulo al PC se puede usar un cable USB - SERIAL que podemos encontrar en cualquier tienda de computadoras.

 

Los comandos que usaremos en las pruebas son:

  • at
  • at+creg?
  • at+cmgf=1
  • at+cmgs= número de teléfono mensaje de prueba

El comando AT es para ver si el modulo se está comunicando, debe responder OK.

El comando AT+ CREG? es para saber si está registrando en la red gsm.

El comando AT+ CMGF = 1 es para configurarlo en modo de mensaje de texto.

El comando AT+ CMGS = numero de teléfono , acá se coloca el numero del teléfono al cual le vamos a enviar el mensaje de texto, luego le damos Enter y nos saldrá una flechita donde pondremos el texto a enviar, por ejemplo "esto es una prueba" y luego de escribir el mensaje le tenemos que dar a ctrl z para enviarlo.

 

Un vídeo que muestra las pruebas realizadas lo tenéis aquí.

 

Una vez realizadas las pruebas se conecta el módulo al PIC según el esquema mostrado arriba.

 

Montaje en la Proto-Board:

 

Proto-Board conexión módulo GSM TC35i

 

Envío de mensajes SMS a través del PIC.

 

#include <16F877A.h>
#use delay(clock=4000000)
#fuses DEBUG
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOCPD
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)

void main (){
if(input(PIN_A0)){
printf("AT+CMGF=1\r");
delay_ms(500);
printf("AT+CMGS=04242016983\r");
delay_ms(500);
printf("esto es una prueba");
delay_ms(500);
putchar(0x1a);
}
}

 

Y un vídeo de la Demo funcionando:


 

Recepción de mensajes SMS a través del PIC

Para la recepción de mensajes Inyelber nos ha preparado una demo en la que en la proto-board se enciende un led conectado al pin D2 del PIC 16f877A cuando el módulo recibe un mensaje con la palabra “Epa”.

 

Los comandos AT que permiten configurar el modulo para que reciba mensajes son los siguientes:

  • printf("AT+IPR=9600\r\n"); ----------> configura la velocidad de transmisión.
  • printf("AT+CMGF=1\r\n");------------> Selecciona el formato de mensajes SMS.
  • printf("AT+CSMS=1\r"); -------------> Selecciona el servicio de mensajes
  • printf("AT+CNMI=2,2\r"); -----------> esto quiere decir que se recibirá el mensaje y no será guardado en la SIM, existen diferentes configuraciones, en el manual aparecen especificadas las diferentes opciones, para este caso haremos = 2,2.

Código fuente del PIC:

 

#include <16F877A.h>
#use delay(clock=4000000)
#fuses DEBUG
#FUSES NOWDT //No Watch Dog Timer
#FUSES XT //Crystal osc <= 4mhz
#FUSES NOPUT //Power Up Timer
#FUSES NOPROTECT //Code not protected from reading
#FUSES NOBROWNOUT //No brownout reset
#FUSES NOCPD
#use RS232(BAUD=9600,BITS=8,PARITY=N,XMIT=PIN_C6,RCV=PIN_C7)

char dato[75];
int a=0;
int b=0;
char c=0;

void borrar_array()
{
FOR (a = 0; a < 75; a++)
{
dato[a] = 0;
delay_ms (50) ;
}

a=0;
b=0;
c=0;
}

void main()
{
borrar_array();

WHILE (true)
{
IF (kbhit () )
{
c = getc ();
dato[b] = c;
b++;
}

IF (dato[2] == 'S' &&dato[9] == 'T')
{
borrar_array();
printf("AT+IPR=9600\r\n");
}

IF (dato[16] == 'O' && dato[17] == 'K' && dato[12] == '0')
{
borrar_array();
printf("AT+CMGF=1\r\n");
}

IF (dato[14] == 'O' &&dato[15] == 'K' &&dato[10] == '1')
{
borrar_array();
printf("AT+CSMS=1\r");
}

IF (dato[30] == 'O' &&dato[31] == 'K' &&dato[25] == '1')
{
borrar_array();
printf("AT+CNMI=2,2\r");
}

IF (dato[16] == 'O' &&dato[17] == 'K' &&dato[12] == '2')
{
borrar_array();
output_high(pin_d2);
delay_ms(500);
output_low(pin_d2);
delay_ms(500);
output_high(pin_d2);
delay_ms(500);
output_low(pin_d2);
}

IF (dato[51] == 'E' &&dato[52] == 'p' &&dato[53] == 'a')
{
output_high(pin_d2);
borrar_array();
}
}
}

 

Y otro vídeo con la demo de recepción de mensajes funcionando:

 


 

Bueno y hasta aquí este tutorial sobre el control de mensajes SMS a través de un PIC espero que sea de utilidad. Gracias a todos los usuarios del foro que han participado con sus aportaciones a este tema.

 

Cualquier duda, sugerencia o comentario lo podéis hacer en el foro.

 

La versión en .pdf del artículo lo podéis descargar desde aquí.

 

 

Un saludo y hasta la próxima..

© 2007-2017 AquiHayapuntes.com