control de mensajes sms a través de un pic

16
11/7/2012 Biblioman | Inyelber WWW.AQUIHAYAPUNTES.COM CONTROL DE MENSAJES SMS A TRAVÉS DE UN PIC

Upload: nando96

Post on 20-Jan-2016

302 views

Category:

Documents


1 download

TRANSCRIPT

Page 1: Control de Mensajes SMS a Través de Un PIC

11/7/2012

Biblioman | Inyelber

WWW.AQUIHAYAPUNTES.COM CONTROL DE MENSAJES SMS

A TRAVÉS DE UN PIC

Page 2: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 2

Introducción

Este tutorial trata sobre la comunicación RS-232 entre un Microcontrolador (PIC) y un teléfono

o módulo GSM para el control de mensajes SMS por medio del estándar de comandos AT. Por

un lado describiré mis experiencias a la hora de conectar el PIC a un teléfono móvil comercial

(SAGEM MY 3036) y por otro lado se describirán las experiencias con el módulo 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 teléfono permite esa conexión y en caso de que así sea el cómo hay

que hacer la conexión. El requisito imprescindible para ello es que el teléfono móvil disponga

de un modem GSM con interfaz serie, lo que el número de candidatos se suele reducir a

teléfonos ya antiguos como el Siemens C55, Nokia N70, etc. El que se haga la pregunta si el

PIC se puede comunicar con un teléfono más moderno con interfaz USB o bluetooth, pues

supongo que sí pero no es el tema de este artículo, tal vez para la próxima...

Una vez que sabemos que nuestro celular dispone de modem GSM y de una interfaz serie para

comunicarnos con él vía RS-232 debemos de comprobar que podemos establecer una

comunicación con él por medio de comandos AT, para ello la forma más fácil es conectar el

teléfono a un PC equipado con puerto serie a través de un cable de datos, según se muestra en

la figura de abajo:

No hay que poner ningún convertidor entre ellos, tanto el puerto COM del ordenador como el

Modem interno del teléfono trabajan con niveles RS-232.

Para empezar a comprobar si tenemos comunicación entre el ordenador y el móvil

utilizaremos cualquier programa de comunicación serie como el hyperterminal.

Page 3: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 3

Establecemos una nueva conexión con el teléfono SAGEM:

A través de un puerto COM de nuestro ordenador (en mi caso el COM1):

Establecemos los parámetros de configuración del puerto (9600,8,N, 1,N):

Page 4: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 4

Por la parte del Modem del teléfono Móvil los parámetros se configuraron automáticamente al

establecer la conexión, por lo que no tuve que configurar nada.

Una vez que la conexión se ha establecido se mandan comandos AT a través del Hyperterminal

para comprobar que el teléfono responde:

No todos los teléfonos soportan todos los comandos Hayes o AT.

La lista completa de comandos para el teléfono SAGEM lo tenéis aquí.

Una tabla con los comandos más utilizados y que suelen aceptar todos los teléfonos sería la

siguiente:

Comando Descripción Respuesta del Modem

AT Para comprobar que la comunicación es correcta

OK ó ERROR

AT+CMGF=1 Configura el terminal para manejar el SMS en modo texto

OK ó ERROR

AT+CSCA? Solicita al módem el número de teléfono del Centro de Mensajes

+CSCA: "+34609090999",145 seguido de un OK.

AT+CSCA="+34609090999",145

Para cambiar el número de teléfono del centro de mensajes si no es correcto

OK ó ERROR

AT+CMGS=”666779808”

Envía un mensaje al número que hay entre las comillas dobles. Una vez recibido el comando el modem responde con el carácter ‘>’ para que

El módem responderá con la posición donde se ha almacenado el mensaje enviado: +CMGS: 0 seguido de un OK.

Page 5: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 5

introduzcamos el cuerpo del mensaje, para finalizar pulsamos Ctrl-Z (ascii 26)

AT+CMGR=?

Comando para la lectura del SMS guardado en la posición nº (?) de la memoria de la tarjeta SIM del teléfono.

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

AT+CMGD=?

Comando para el borrado del SMS guardado en la posición nº (?) de la memoria de la tarjeta SIM del teléfono.

OK ó ERROR

AT+IPR=9600 Configura la velocidad del modem a 9600 baudios

OK ó ERROR

Ejemplo de alarma con envío de SMS

Este es un ejemplo sencillo de envío de mensajes SMS a través de un PIC conectado a un

teléfono móvil por medio de una interfaz serie RS-232. El funcionamiento es sencillo, cuando el

sensor volumétrico 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 interrupción en el PIC a través

de la patilla RB0 que hace que se envíen los comandos AT necesarios para que el teléfono

móvil envíe un número determinado de mensajes de alarma al número que hayamos

introducido en el programa.

Esquema eléctrico

El circuito utiliza un convertidor de niveles MAX232 para adaptar los niveles TTL requeridos por

el PIC a los niveles del estándar RS232 utilizado por el teléfono.

Page 6: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 6

Importante: anteriormente he comentado que para conectar el teléfono móvil al

PC no se necesita ningún conversor de niveles ya que ambos utilizan los niveles

de tensión del estándar RS232, además la conexión entre el teléfono móvil y el

puerto serie del PC se hace a través de un cable de datos directo (sin cruzar) ya

que el Teléfono Móvil hacía de equipo de comunicación de datos (DCE) y el PC

de equipo terminal de datos (DTE). Ahora estamos conectando el PIC al

teléfono Móvil a través del convertidor de niveles, ambos (el PIC y el Teléfono)

son DCE, por lo que si dejamos las mismas conexiones en el circuito el cable

para conectarnos al teléfono tiene que ser un cable cruzado (Null módem) que es

simplemente un cable que tiene cruzadas las líneas Tx y Rx. Comercialmente

estos cables se suelen diferenciar visualmente de los normales en que las piezas

de plástico 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

polímetro antes de conectar.

¡Ojo! Si nos equivocamos y ponemos un cable directo entre el convertidor de

niveles y el teléfono no solo no funcionará sino que nuestro querido MAX232 se

empezará a calentar como si de una estufa se tratará, lo que vendría después ya

os lo podéis imaginar.

Circuito montado

Page 7: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 7

Código fuente del PIC

/////////////////////////////////////////////////////////////////////////

//Alarma con sensor volumétrico y envío 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)

//Configuración puerto serie

#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)

//Variables de configuración SMS

#define NUMERO_MENSAJES 2 //Número de mensajes a enviar

char NUMERO[] = "+34********"; //Número de teléfono a marcar

char MENSAJE[] = "Prueba Alarma\r AquiHayapuntes.com";//Mensaje a enviar

int flag=0;//variable auxiliar

#int_EXT

void EXT_isr(void){//función de tratamiento a la interrupción externa

flag=1;

}

//Función para configurar parámetros 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);

}

//Función 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;

Page 8: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 8

//Configuración registros PIC

enable_interrupts(GLOBAL);//habilito interrupción global

enable_interrupts(INT_EXT);//habilito interrupción externa

ext_int_edge(L_TO_H);// flanco de activación ascendente

delay_ms(1000);//retardo para estabilizar

configurar_Modem();//llamada a la función de configuración del modem

while(true) { //Bucle infinito hasta interrupción

if (flag==1){ // si se produce alarma envió mensajes

for(i=0;i<NUMERO_MENSAJES;i++){

Envio_SMS();

}

flag=0;

}

}

}

Aquí tenéis un vídeo de la aplicación funcionando

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

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.

Page 9: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 9

Descripción del 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:

Page 10: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 10

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

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:

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.

Page 11: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 11

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:

https://dl.dropbox.com/u/88216600/gsm_pc.wmv

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

arriba.

Page 12: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 12

Montaje en la Proto-Board:

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);

}

}

Page 13: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 13

Y un vídeo de la demo funcionando:

http://www.youtube.com/watch?v=z-7gFJ5uWE0

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.

Page 14: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 14

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

}

Page 15: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 15

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 funcionando:

http://www.youtube.com/watch?v=O0Mxf1WKpi0

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.

Un saludo y hasta la próxima..

Page 16: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

Biblioman & Inyelber www.AquiHayApuntes.com Página 16

Este artículo esta bajo una licencia Creative Commons: Reconocimiento-No Comercial-

Compartir bajo la misma licencia.