Está en la página 1de 16

11/7/2012

WWW.AQUIHAYAPUNTES.COM

CONTROL DE MENSAJES SMS A TRAVS DE UN PIC

Biblioman | Inyelber

Control de Mensajes SMS a travs de un PIC


Introduccin Este tutorial trata sobre la comunicacin RS-232 entre un Microcontrolador (PIC) y un telfono o mdulo GSM para el control de mensajes SMS por medio del estndar de comandos AT. Por un lado describir mis experiencias a la hora de conectar el PIC a un telfono mvil comercial (SAGEM MY 3036) y por otro lado se describirn las experiencias con el mdulo GSM TC35i que el amigo Inyelber nos ha comentado en el foro (gracias por el aporte). Primeras pruebas con el SAGEM MY3036 Lo primero que le puede venir a la cabeza a alguien que quiera conectar su viejo celular a un Microcontrolador es si su telfono permite esa conexin y en caso de que as sea el cmo hay que hacer la conexin. El requisito imprescindible para ello es que el telfono mvil disponga de un modem GSM con interfaz serie, lo que el nmero de candidatos se suele reducir a telfonos ya antiguos como el Siemens C55, Nokia N70, etc. El que se haga la pregunta si el PIC se puede comunicar con un telfono ms moderno con interfaz USB o bluetooth, pues supongo que s pero no es el tema de este artculo, tal vez para la prxima... Una vez que sabemos que nuestro celular dispone de modem GSM y de una interfaz serie para comunicarnos con l va RS-232 debemos de comprobar que podemos establecer una comunicacin con l por medio de comandos AT, para ello la forma ms fcil es conectar el telfono a un PC equipado con puerto serie a travs de un cable de datos, segn se muestra en la figura de abajo:

No hay que poner ningn convertidor entre ellos, tanto el puerto COM del ordenador como el Modem interno del telfono trabajan con niveles RS-232. Para empezar a comprobar si tenemos comunicacin entre el ordenador y el mvil utilizaremos cualquier programa de comunicacin serie como el hyperterminal.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 2

Control de Mensajes SMS a travs de un PIC


Establecemos una nueva conexin con el telfono SAGEM:

A travs de un puerto COM de nuestro ordenador (en mi caso el COM1):

Establecemos los parmetros de configuracin del puerto (9600,8,N, 1,N):

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 3

Control de Mensajes SMS a travs de un PIC


Por la parte del Modem del telfono Mvil los parmetros se configuraron automticamente al establecer la conexin, por lo que no tuve que configurar nada. Una vez que la conexin se ha establecido se mandan comandos AT a travs del Hyperterminal para comprobar que el telfono responde:

No todos los telfonos soportan todos los comandos Hayes o AT. La lista completa de comandos para el telfono SAGEM lo tenis aqu. Una tabla con los comandos ms utilizados y que suelen aceptar todos los telfonos sera la siguiente: Comando AT AT+CMGF=1 Descripcin Para comprobar que la comunicacin es correcta Configura el terminal para manejar el SMS en modo texto Solicita al mdem el nmero de telfono del Centro de Mensajes Para cambiar el nmero de telfono del centro de mensajes si no es correcto Enva un mensaje al nmero que hay entre las comillas dobles. Una vez recibido el comando el modem responde con el carcter > para que Respuesta del Modem OK ERROR OK ERROR +CSCA: "+34609090999",145 seguido de un OK. OK ERROR El mdem responder con la posicin donde se ha almacenado el mensaje enviado: +CMGS: 0 seguido de un OK.

AT+CSCA? AT+CSCA="+34609090999", 145

AT+CMGS=666779808

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 4

Control de Mensajes SMS a travs de un PIC


introduzcamos el cuerpo del mensaje, para finalizar pulsamos Ctrl-Z (ascii 26) Comando para la lectura del SMS guardado en la posicin n (?) de la memoria de la tarjeta SIM del telfono. Comando para el borrado del SMS guardado en la posicin n (?) de la memoria de la tarjeta SIM del telfono. Configura la velocidad del modem a 9600 baudios

AT+CMGR=?

+CMGR: "REC UNREAD","+34666779808",,"29/0 6/12,19:03:20+08" Texto del mensaje OK

AT+CMGD=?

OK ERROR

AT+IPR=9600

OK ERROR

Ejemplo de alarma con envo de SMS Este es un ejemplo sencillo de envo de mensajes SMS a travs de un PIC conectado a un telfono mvil por medio de una interfaz serie RS-232. El funcionamiento es sencillo, cuando el sensor volumtrico se activa cierra su contacto, este alimenta al convertidor CA/CC que a su vez alimenta al rel RL1, este cierra su contacto y produce una interrupcin en el PIC a travs de la patilla RB0 que hace que se enven los comandos AT necesarios para que el telfono mvil enve un nmero determinado de mensajes de alarma al nmero que hayamos introducido en el programa. Esquema elctrico

El circuito utiliza un convertidor de niveles MAX232 para adaptar los niveles TTL requeridos por el PIC a los niveles del estndar RS232 utilizado por el telfono.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 5

Control de Mensajes SMS a travs de un PIC

Importante: anteriormente he comentado que para conectar el telfono mvil al PC no se necesita ningn conversor de niveles ya que ambos utilizan los niveles de tensin del estndar RS232, adems la conexin entre el telfono mvil y el puerto serie del PC se hace a travs de un cable de datos directo (sin cruzar) ya que el Telfono Mvil haca de equipo de comunicacin de datos (DCE) y el PC de equipo terminal de datos (DTE). Ahora estamos conectando el PIC al telfono Mvil a travs del convertidor de niveles, ambos (el PIC y el Telfono) son DCE, por lo que si dejamos las mismas conexiones en el circuito el cable para conectarnos al telfono tiene que ser un cable cruzado (Null mdem) que es simplemente un cable que tiene cruzadas las lneas Tx y Rx. Comercialmente estos cables se suelen diferenciar visualmente de los normales en que las piezas de plstico que sirven de ayuda para atornillar y sujetar el conector son de color violeta y en los cables normales (sin cruzar) son de color gris de todas formas por si acaso es buena idea comprobar las conexiones de los pines con el polmetro antes de conectar.

Ojo! Si nos equivocamos y ponemos un cable directo entre el convertidor de niveles y el telfono no solo no funcionar sino que nuestro querido MAX232 se empezar a calentar como si de una estufa se tratar, lo que vendra despus ya os lo podis imaginar.
Circuito montado

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 6

Control de Mensajes SMS a travs de un PIC


Cdigo fuente del PIC
///////////////////////////////////////////////////////////////////////// //Alarma con sensor volumtrico y envo de mensajes SMS // // // // www.aquihayapuntes.com // // // ///////////////////////////////////////////////////////////////////////// #include <16F877.h> #device ICD=TRUE//si no utilizas el debugger debe de ir comentada #FUSES NOWDT, HS, NOPUT, NOLVP #use delay(clock=20000000) //Configuracin puerto serie #use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8) //Variables de configuracin SMS #define NUMERO_MENSAJES 2 //Nmero de mensajes a enviar char NUMERO[] = "+34********"; //Nmero de telfono a marcar char MENSAJE[] = "Prueba Alarma\r AquiHayapuntes.com";//Mensaje a enviar int flag=0;//variable auxiliar #int_EXT void EXT_isr(void){//funcin de tratamiento a la interrupcin externa flag=1; } //Funcin para configurar parmetros del modem void configurar_Modem(){ printf("at+cmgf=1\r"); //configura el tipo de formato de mensaje de texto SMS (formato TEXTO) delay_ms(200); } //Funcin para enviar mensajes SMS void Envio_SMS(){ char ctrlz = 26; //combinacion de teclas "ctrl+z" printf("at+cmgs=\"%s\"\r",NUMERO); delay_ms(200); printf("%s",MENSAJE); delay_ms(200); printf("%c",ctrlz); //se envia el mensaje delay_ms(200); } void main() { int i;

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 7

Control de Mensajes SMS a travs de un PIC


//Configuracin registros PIC enable_interrupts(GLOBAL);//habilito interrupcin global enable_interrupts(INT_EXT);//habilito interrupcin externa ext_int_edge(L_TO_H);// flanco de activacin ascendente delay_ms(1000);//retardo para estabilizar configurar_Modem();//llamada a la funcin de configuracin del modem while(true) { //Bucle infinito hasta interrupcin if (flag==1){ // si se produce alarma envi mensajes for(i=0;i<NUMERO_MENSAJES;i++){ Envio_SMS(); } flag=0; } } }

Aqu tenis un vdeo de la aplicacin funcionando

http://www.youtube.com/watch?v=1PRD3AKVuYY

Envo y recepcin de mensajes SMS con el mdulo GSM TC35i

Paso a ahora a redactar las experiencias con el mdulo GSM TC35i que el amigo inyelber a tenido a bien compartir con todos nosotros, para cualquier pregunta o duda podis hacerla a travs del hilo abierto en el foro.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 8

Control de Mensajes SMS a travs de un PIC


Descripcin del mdulo GSM TC35i

El mdulo 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 mdulo es comprobar si en nuestro pas existen operadoras que trabajen en esas frecuencias, para evitar este problema podemos adquirir el modulo GSM SIM900, cuesta un poco ms pero es Quadband y sirve para todas las operadoras. El GSM TC35i incorpora una interfaz serie RS232 y un conector DB9, el mdulo est diseado para ser conectarlo directamente al PC por lo que en la placa lleva un MAX232 para adaptar los niveles al estndar RS232 que utiliza el PC, para conectar el mdulo 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:

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 9

Control de Mensajes SMS a travs de un PIC


Detalle de las conexiones del MAX232 que lleva el mdulo GSM:

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

Nota: En el foro se encuentra un esquema del mdulo.


Probando el mdulo..

Antes de conectar el mdulo al PIC se comprueba su correcto funcionamiento a travs de una conexin al PC y el hyperterminal. Para la conexin del mdulo al PC se puede usar un cable USB - SERIAL que podemos encontrar en cualquier tienda de computadoras.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 10

Control de Mensajes SMS a travs de un PIC


Los comandos que usaremos en las pruebas son:
at at+creg? at+cmgf=1 at+cmgs= nmero de telfono 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 telfono , ac se coloca el numero del telfono 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 vdeo que muestra las pruebas realizadas:

https://dl.dropbox.com/u/88216600/gsm_pc.wmv Una vez realizadas las pruebas se conecta el mdulo al PIC segn el esquema mostrado arriba.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 11

Control de Mensajes SMS a travs de un PIC


Montaje en la Proto-Board:

Envo de mensajes SMS a travs 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); } }

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 12

Control de Mensajes SMS a travs de un PIC


Y un vdeo de la demo funcionando:

http://www.youtube.com/watch?v=z-7gFJ5uWE0
Recepcin de mensajes SMS a travs del PIC Para la recepcin de mensajes Inyelber nos ha preparado una demo en la que en la protoboard se enciende un led conectado al pin D2 del PIC 16f877A cuando el mdulo 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 transmisin. 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.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 13

Control de Mensajes SMS a travs de un PIC


Cdigo 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"); }

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 14

Control de Mensajes SMS a travs de un PIC


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 vdeo con la demo funcionando:

http://www.youtube.com/watch?v=O0Mxf1WKpi0 Bueno y hasta aqu este tutorial sobre el control de mensajes SMS a travs 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 podis hacer en el foro. Un saludo y hasta la prxima..

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 15

Control de Mensajes SMS a travs de un PIC


Este artculo esta bajo una licencia Creative Commons: Reconocimiento-No ComercialCompartir bajo la misma licencia.

Biblioman & Inyelber

www.AquiHayApuntes.com

Pgina 16