Autor Tema: Gestión de mensajes GSM con PIC  (Leído 4377 veces)

0 Usuarios y 1 Visitante están viendo este tema.

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Gestión de mensajes GSM con PIC
« en: 24 de Febrero de 2008, 16:44:18 »
Bueno chicos, como os comentaba en mi anterior post, una vez he terminado la aplcación para gestionar con el pic los mensajes por gsm os pongo el código, porque creo que le puede servir a mucha gente.
Aunque en mis pruebas funciona de lujo, veremos a ver si al tiempo se sigue comportando igual.
De todos modos lo llamaremos version 1.
CODIGO:
Código: [Seleccionar]
#include <18f4431.h>
#include <string.h>
#fuses intrc,nomclr,t1lowpower,noprotect,noput,nowdt,nobrownout,nolvp
#use delay (clock=4Mhz)
#use rs232 (baud=9600,xmit=pin_c6,rcv=pin_c7,parity=n,bits=8)

int const lenbuff=100;
int pregunta=0;
int xbuff=0x00,flagcommand=0,final=0,a=0,v=0;
int espera_ok=0,simbolo=0;
char cbuff[lenbuff];
char rcvchar=0x00;
char pos_sms=0x00;
char telefono[10];

void inicbuff(void);
void procesa_comando(void); 

#int_rda
void comunica()
 {   
  rcvchar=0x00;   
  if (kbhit())
   {     
    rcvchar=getc(); // recojo dato que me llega del puerto serie.
if(rcvchar==0x20)
{
  if(simbolo)
   {
     goto espera_simbolo;
   }
 }   
    if(rcvchar!=0x0a)
     {  //si es el caracter de inicio de linea, no lo acumulo en la cadena cbuff.       
      if (xbuff<100)
       {
        cbuff[xbuff++]=rcvchar; //introduzco el caracter recibidi del rs-232 en una nueva posicion de la cadena.                   
       }     
     }     
  if(rcvchar==0x0d)
   { //si recibo un intro, hago lo siguiente.         
    final++; //incremento la variable final         
    if(pregunta)
     {  //si la variable pregunta está a "1", necesito recoger cuatro (intros) para irme a procesar la trama.                         
      if(final==4)
       {               
        flagcommand=1;               
        final=0;               
        pregunta=0;           
       }         
     }else
      {                       
       if(final==2)
        {
  espera_simbolo:             
         flagcommand=1; //Nota: todo esto es porque si al modem yo no le pregunto nada, solo me puede enviar una trama cuando se le manda un mensaje               
         final=0;            //por movila que es +cmti: "mt",X donde X me da la posicion en el cual se ha guardado el mensaje recibido en el gsm. Pues bien, esta trama           
        }       
      }                  //que el modem me envia está siempre contenida entre dos intros.     
   }                    //Cuando yo la recibo, lo que hago es recoger la posición donde se ha guardado el sms, y preguntarle al modem para que me lo envíe.   
   }                    //la trama que el modem me envía esta vez, está contenida entre cuatro intros, y por lo tanto, cuando yo pregunto al modem por el sms
 }                       //mediante at+cmgr=X  pongo a uno la variable pregunta para no procesar la trama hasta que haya recibido los cuatro intros.
void main ()
 {   
  inicbuff();            //incio la cadena que va ha guardar la trama   
  for (a=0;a<10;a++)
   {     
    telefono[a]='\0';   
   }   
  enable_interrupts(int_rda);   
  enable_interrupts(global);
  do
   {
    if(flagcommand)
     {         
      flagcommand=0;                 
      procesa_comando();               
     }   
   }while(true);
 }

void inicbuff(void)
 {   
  int i;   
  for(i=0;i<lenbuff;i++)
   {     
    cbuff[i]='\0';   
   }   
  xbuff=0x00;
 }
 
 void procesa_comando(void)
  {   
   char *retorno1;   
   char *retorno2;   
   char *coma;   
   char *clave;   
   char *numero;   
   char string1[10];   
   char string2[10];   
   char string3[10];   
   char s1[10];
   char s2[10];   
   char s3[10];   
   int i=0;   
   
   for (i=0;i<10;i++)
    {  //pongo los strings a cero     
     s1[i]='\0';     
     s2[i]='\0';     
     s3[i]='\0';     
     string1[i]='\0';     
   string2[i]='\0';
     string3[i]='\0';   
   }  //NUEVO MENSAJE RECIBIDO.........................
if(espera_ok)
{
espera_ok=0;
inicbuff();
printf("at+cmgs=%s\r",telefono);
simbolo=1;
goto fin;
}
if(simbolo)
  {
    simbolo=0;
    inicbuff();
    printf("mensaje enviado\r");
    putc(0x1a);
goto fin;
   }
 
  strcpy(string1,"+CMTI:");   //copio en la cadena STRING1 "+cmti:"   
  retorno1=strchr(cbuff,0x0d); //posiciono el puntero retorno1 al primer intro recibido   
  retorno1++;                       //lo incremento una posición.   
  strncpy(s1,retorno1,6);        //introduzco en la cadena S1 seis caracteres de la cadena cbuff a partir de la posición que me marca el puntero   
  if (!stricmp(s1,string1))
   {       //comparo que S1 y String1 sean igual "+cmti:"     
    coma=strchr(cbuff,0x2c);     //pongo el puntero en la posición de la coma de cbuff     
    coma+=1;                          //lo incremento para que me apunte al numero donde está guardado el mensaje del modem     
    pos_sms=*coma;
    inicbuff();                //copio el numero al que apunta en el char pos-sms     
    printf("AT+CMGR=%c\r",pos_sms); //le pregunto para que me envíe el mensaje(el de los cuatro intros).     
    pregunta=1;                        //pongo el chivato a "1" para saber que tengo que recibir 4 intros para procesar la trama.     
    goto fin;   
   }   // RESPUESTA AL LEER MENSAJE......................   
   
   strcpy(string2,"+CMGR:");     //Aqui empezamos el procesamiento de la segunda trama.     
   retorno2=strchr(cbuff,0x0d);                 //el primer intro, también busco que el mensaje contenga la palabra "paco" desde la primera P.     
   retorno2++;                                       //el cual se que está 5 posiciones despues de la primera ","=0x2c.
   strncpy(s2,retorno2,6);                 
   if (!stricmp(s2,string2))
    {     
     strcpy(string3,"paco");           
     clave=strchr(cbuff,0x70);         
     strncpy(s3,clave,4);           
     if(!stricmp(s3,string3))
      {       
       numero=strchr(cbuff,0x2c);         
       numero=numero+5;         
       strncpy(telefono,numero,9);
       inicbuff();
       espera_ok=1;               
       printf("at+cmgd=%c\r",pos_sms);
       goto fin;
       }else
         {
           inicbuff();
           printf("at+cmgd=%c\r",pos_sms);
           goto fin;
         } 
    }
  inicbuff();
  fin:   
  v=0;
  } // Pues el proble es que la primera trama siempre me la analiza bien, pero la segunda solo me la aniza bien la primera vez, o sea, cuando reinicio el pic.
  // He observado al concluir los intros y empezar a procesar la trama, que la segunda vez que proceso la trama de cuatro intros, antes de hacer nada leo la cadena cbuff y no esta la trama completa. Ejemplo:
// cbuff bueno=[(intro)+cmgr: "red unread","+34676767789",,"23/10/2007etc...."/(into)paco(intro)ok(intro)]
// cbuff malo =[(intro)+cmgr: "rec unread","+34] por lo tanto faltan muchos caracteres.
// Pues eso es lo que me hace a partir de la segunda vez que hago el proceso completo, y lo gracioso es que yo voy leyendo la cadena cbuff y tengo todos los caracteres, y es cuando entro en VOID PROCESA COMANDO cuando desaparecen todos los caracteres.

El programa recibe del gsm la alarma de que le ha llegado un nuevo mensaje, recoge la posición en donde quedó guardado, lee el mensaje y lo borra. Si el mensaje contiene la contraseña correcta, recoge el número de teléfono y responde al movil con el mensaje o dato que queramos.

Espero les guste.
Si necesitais alguna explicacion o teneis alguna duda sobre el código, os ayudaré con mucho gusto.(siempre que pueda.)

Un saludo.

Editado por nocturno: he modificado el asunto para que sea más fácil encontrar
« Última modificación: 24 de Febrero de 2008, 19:02:00 por un Moderador »

Desconectado Nocturno

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 18286
    • MicroPIC
Re: Lo prometido es deuda.
« Respuesta #1 en: 24 de Febrero de 2008, 17:45:17 »
Es una aplicación muy útil, Paco. Gracias por publicarlo.

¿Podrías poner el esquema del circuito?

Desconectado paco1980

  • PIC16
  • ***
  • Mensajes: 129
Re: Lo prometido es deuda.
« Respuesta #2 en: 24 de Febrero de 2008, 17:53:08 »
El circuito es solo un pic conectado al max232, y de aquí conectado a un modem gsm. Como podreis ver en la programación, uso el oscilador interno del pic, por lo que no hay más en dicho circuito.

Desconectado RedPic

  • Administrador
  • DsPIC33
  • *******
  • Mensajes: 5544
    • Picmania by Redraven
Re: Lo prometido es deuda.
« Respuesta #3 en: 24 de Febrero de 2008, 18:16:56 »
Muchas gracias Paco por compartir con nosotros tus avances.  :mrgreen:
Contra la estupidez los propios dioses luchan en vano. Schiller
Mi Güeb : Picmania

Desconectado pfer1984

  • PIC10
  • *
  • Mensajes: 6
Re: Gestión de mensajes GSM con PIC
« Respuesta #4 en: 13 de Mayo de 2008, 20:51:43 »
que modem GSM me puedo comprar baratito para empezar a trabajar.
ME gustaria que tuviera GPRS.

Saludos

Desconectado julietgolf

  • PIC10
  • *
  • Mensajes: 15
    • Mi Página (aún está en construcción...)
Re: Gestión de mensajes GSM con PIC
« Respuesta #5 en: 19 de Mayo de 2008, 19:18:06 »
pfer1984, yo vivo en Cordoba, Argentina y aquí he conseguido el Motorola G24 con su "modulo de insercion" (lease: no solamente el modem) listo para conectarse via RS232 a 190U$S. Este es el Motorola G24.
Mira, no se que te parecera "baratito", pero este precio no parece muy desorbitado y ten MUY en cuenta que yo lo he conseguido en Argentina donde no tenemos una muy buena economia...  :?  :( (dejo mis opiniones sobre el gobierno de mi pais para otro foro u offtopic  :) )
Creo q ese modulo puedes conseguirlo en tu pais y a mejor precio, calculo... este definitivamente tiene GPRS (viene algun modulo GSM sin GPRS?)
Aprovecho tb para agradecer a paco1980 por su codigo! thanks!
Saludos!
« Última modificación: 19 de Mayo de 2008, 19:30:02 por julietgolf »
...::: Un feliz usuario de Debian Linux (e17) y amante de los PIC :::...

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Gestión de mensajes GSM con PIC
« Respuesta #6 en: 20 de Mayo de 2008, 21:39:51 »
aqui hay otro modem sony erikson :  modem gsm

espero les sirva
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Gestión de mensajes GSM con PIC
« Respuesta #7 en: 21 de Mayo de 2008, 08:58:08 »
que modem GSM me puedo comprar baratito para empezar a trabajar.
ME gustaria que tuviera GPRS.

Depende mucho de donde vivas o de que acceso tengas a importar cosas o de si piensas hacer un proyecto puntual para hacer un equipo y nada más para algo personal o si piensas hacer algo comercial y vender miles.

En Europa hay decenas de variedades de Modems GSM con posibilidades de establecer links GPRS y stack tcp/ip incorporado.

El Motorola G24 es un lindo modem y se consigue en todo américa pero he visto que no es tan fácil de conseguirse en europa en donde abundan muchas otras marcas y modelos.

Los Wavecom también son buenos (y son los que compraron la división de los Sony GM28, GR48, etc).  No te recomiendo usar los sony si tu proyecto será masivo por la simple razón de que cuando tengas que salir a comprar por decenas no conseguirás (me pasó , por eso te lo comento).

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Gestión de mensajes GSM con PIC
« Respuesta #8 en: 21 de Mayo de 2008, 20:19:14 »
una pregunta maunix, estuve buscando aqui en mexico ese modem de motorola pero no encuentro nada, solo los gr48, no crees que solo sea por la zona que no conseguiste, aqui es al reves, :)
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado maunix

  • Moderadores
  • DsPIC33
  • *****
  • Mensajes: 4751
    • Mi Sitio Web Personal
Re: Gestión de mensajes GSM con PIC
« Respuesta #9 en: 22 de Mayo de 2008, 15:00:34 »
una pregunta maunix, estuve buscando aqui en mexico ese modem de motorola pero no encuentro nada, solo los gr48, no crees que solo sea por la zona que no conseguiste, aqui es al reves, :)

La empresa donde trabajo compra los modems en Estados Unidos, y de allí le dijeron que ya no venderían más.

Te paso el link de la noticia en Wavecom (es del 2006), clickea luego en Wavecom_to_Acquire_Sony_Ericsson

Los motorola se siguen fabricando y hace poco lanzaron un G24Lite, en sony no he visto nuevos avances.  Los GR48 tienen mas de 5 años dando vueltas, son excelentes modems pero tal vez los que estén dando vuelta sean por un exceso de stock y no porque se sigan produciendo.

Saludos
- La soberbia de un Einstein es entendible.. la de un salame es intolerable (A.Dolina)
- En teoría no hay diferencia entre la teoría y la práctica. En la práctica... si la hay.
- Lee, Lee, Lee y luego pregunta.(maunix)
- Las que conducen y arrastran al mundo no son las máquinas, sino las ideas (V. Hugo)
- Todos los hombres se parecen por sus palabras; solamente las obras evidencian que no son iguales.(Moliere)
- Todo debería ser hecho tan simple como sea posible pero no mas simple que eso.(A.Einstein)

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Gestión de mensajes GSM con PIC
« Respuesta #10 en: 23 de Mayo de 2008, 00:33:55 »
ok, maunix gracias por el dato, no sabia esa noticia, algo ya vieja, pues es del 2006, a lo mejor si tienen un buen stock, tratare de conseguir el modem que me dices,  :)
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....

Desconectado scientist

  • Colaborador
  • PIC24F
  • *****
  • Mensajes: 999
Re: Gestión de mensajes GSM con PIC
« Respuesta #11 en: 15 de Julio de 2008, 16:40:48 »
hola, avivando este hilo, me he puesto las pilas en este tema, y por mas que quiero conseguir el modem que menciona maunix, no encuentro nada, entonces pido la opinion para los dela marca multitech, que piensan acerca de esta modem? maunix, sera que puedas poner alguna pagina donde los conseguiste?

multitech modem aqui dejo el link del modem, por fa, opinen
NO le digas a DIOS que tienes un gran problema, dile a tu problema que tienes un GRAN DIOS!!
Alma mia y castillo mio, mi Dios en quien yo confiare....


 

anything