+ All Categories
Home > Documents > Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a Través de Un PIC

Date post: 27-Dec-2015
Category:
Upload: nisperino-dinsalatta
View: 59 times
Download: 0 times
Share this document with a friend
21
Control de Mensajes SMS a través de un PIC 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:
Transcript
Page 1: Control de Mensajes SMS a Través de Un PIC

Control de Mensajes SMS a través de un PIC

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:

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

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.

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

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

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

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:

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

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:

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

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.

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

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.

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.

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

¡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.

01./////////////////////////////////////////////////////////////////////////02.//                                                                     //03.//Alarma con sensor volumétrico y envío de mensajes SMS                //04.//                                                                     //05.// www.aquihayapuntes.com                                              //06.//                                                                     //07./////////////////////////////////////////////////////////////////////////08. 09.#include <16F877.h>10.#device ICD=TRUE//si no utilizas el debugger debe de ir comentada

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

11.#FUSES NOWDT, HS, NOPUT, NOLVP12.#use delay(clock=20000000)13. 14.//Configuración puerto serie15.#use rs232(baud=9600,parity=N,xmit=PIN_C6,rcv=PIN_C7,bits=8)16. 17.//Variables de configuración SMS18.#define NUMERO_MENSAJES 2 //Número de mensajes a enviar19.char NUMERO[] = "+34681345641"; //Numero de teléfono a marcar20.char MENSAJE[] = "Prueba Alarma\r AquiHayapuntes.com";//Mensaje a enviar21. 22.int flag=0;//variable auxiliar23. 24.#int_EXT  25.void  EXT_isr(void){//función de tratamiento a la interrupción externa26. 27.flag=1;28. 29.}30. 31.//Función para configurar paramétros del modem32.void configurar_Modem(){33. 34.printf("at+cmgf=1\r"); //configura el tipo de formato de mensaje de texto SMS (formato TEXTO)35.delay_ms(200);36. 37.}38. 39.//Función para enviar mensajes SMS40.void Envio_SMS(){41. 42.char ctrlz = 26; //combinacion de teclas "ctrl+z"43. 44.printf("at+cmgs=\"%s\"\r",NUMERO);45.delay_ms(200);46.printf("%s",MENSAJE);  47.delay_ms(200);48.printf("%c",ctrlz); //se envia el mensaje49.delay_ms(200);50. 51.}52.void main()53.{54.int i;55. 56.//Configuración registros PIC57.enable_interrupts(GLOBAL);//habilito interrupción global58.enable_interrupts(INT_EXT);//habilito interrupción externa59.ext_int_edge(L_TO_H);// flanco de activación ascencente60. 61.delay_ms(1000);//retarto para estabilizar62. 63.configurar_Modem();//llamada a la función de configuración del modem

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

64. 65.while(true) {  //Bucle infinito hasta interrupción66. 67.if (flag==1){ // si se produce alarma envio mensajes68. 69.for(i=0;i<NUMERO_MENSAJES;i++){70.Envio_SMS();71.}72.flag=0;73.}74. 75.}76.}

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

Control de Mensajes SMS a través de un PICEnví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

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 12: Control de Mensajes SMS a Través de Un PIC

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.

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

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:

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

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

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

#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 16: Control de Mensajes SMS a Través de Un PIC

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;

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

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;

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

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

}

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

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

}

}

}


Recommended