Post a new topicPost a reply Page 1 of 4   [ 31 posts ]
Go to page 1, 2, 3, 4  Next
Author Message
 Post subject: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Fri Apr 13, 2012 10:49 am 

Joined: Fri Apr 13, 2012 9:46 am
Posts: 10
Hola a todos, me llamo Juan M. y tengo un problema existencial...

He estado utilizando el módulo de libelium GRPS con Arduino Duemilanove, obteniendo siempre buenos resultados en todos los tests que hice en su momento.
Tengo que hacer que el módulo GRPS reciba un SMS (y lo recibe) y según el contenido del mismo mensaje, debe activar una de las salidas del módulo de Arduino. Este es el problema que tengo:

No consigo que a través de los comandos de Arduino, lea el contenido del mensaje del módulo GRPS...

Dejo el código que he logrado hasta ahora para que me ayuden con lo que más buenamente pueda. Si alguien no entiende algo del código o lo que sea, que me pregunte para aclararlo.
Gracias a todos.

Code:
int led = 13;
int onModulePin = 2;
int numLlamadas = 1;                          // Número de llamadas a realizar
int count = 0;
int viewcount = 1;
char ctrlz = 26;                              // Combinación de teclas (Control + Z)
char lecturaSMS = 0;                         // Para leer SMS

void testModule(){
  Serial.flush();
}

void switchModule(){
  digitalWrite(onModulePin,HIGH);
  delay(2000);
  digitalWrite(onModulePin,LOW);
}

void setup(){
  pinMode(led, OUTPUT);
  pinMode(onModulePin, OUTPUT);
  Serial.begin(19200);                        // Velocidad de transmisión de datos
  switchModule();                             // Enciende el módulo GSM
   Serial.print("\n\nEncendiendo \"GSM Module\"");
     for (int i=0;i<8;i++){
    delay(1000);
    Serial.print(".");
  }
   delay(4000);
   Serial.print("\n\nLlamadas a realizar: ");
   Serial.print(numLlamadas);                 // Muestra el número de llamadas a realizar
   Serial.print("\nModo texto SMS\n");
   Serial.println("AT+CMGF=1");               // Establece el modo SMS en texto
   Serial.print("\n");
   delay(5000);
}

void loop(){
  while (count < numLlamadas){
    Serial.print("Llamada ");
    Serial.print(viewcount);                  // Número de llamada actual
    Serial.print(" de ");
    Serial.print(numLlamadas);                // Número total de llamadas
    Serial.print("\n");
    delay(1500);
    Serial.println("ATD*********;");          // Número telefónico a marcar
    delay(12000);
    Serial.println("ATH");                    // Desconexión de la llamada
    delay(5000);
    Serial.print("\nLectura de SMS\n");
    Serial.println("AT+CMGR=1");              // Lee el mensaje almacenado (SUPUESTAMENTE)
    delay(5000);
    lecturaSMS = Serial.read();
    Serial.print("Recibido: ");
    Serial.println(lecturaSMS, DEC);
    if (lecturaSMS == 65){
      digitalWrite(led, HIGH);
    }
    delay(5000);
    count++;
    viewcount++;
  }
  if (count == numLlamadas){
    Serial.print("\nEnviar SMS\n");
    delay(1500);
    Serial.println("AT+CMGS=\"*********\"");    // Envio de SMS al número reflejado
    delay(1500);
    Serial.println("Prueba de envio de SMS");   // Cuerpo del mensaje
    delay(1000);
    Serial.println(ctrlz);                      // Finaliza el mensaje
    delay(5000);
    Serial.print("\nApagar modulo\n");
    Serial.println("AT*PSCPOF");                // Apaga el módulo GSM
    count++;
    delay(3000);
    Serial.print("Apagado \"GSM Module\"\n\n");
    digitalWrite(led, LOW);
    for (int e=0;e<5;e++){
      delay(50);
      digitalWrite(led, HIGH);
      delay(50);
      digitalWrite(led, LOW);
    }
  }
}


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Mon Apr 16, 2012 7:34 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 2027
Hola yanmy30,

Te dejo unos link en los cuales igual encuentras algo de información para solucionar tu problema.

http://www.developershome.com/sms/cmgrCommand4.asp

http://www.developershome.com/sms/readS ... mmands.asp

http://www.developershome.com/sms/cmgrCommand.asp

Te aconsejo intentar realizar tu programa, pero directamente con comandos AT en modo gateway, para comprobar que el módulo realiza esa tarea correctamente.

Un saludo.


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Tue Apr 17, 2012 7:14 am 

Joined: Fri Apr 13, 2012 9:46 am
Posts: 10
Hola libelium-dev:

Gracias por la información libelium-dev, pero lo que exactamente quiero hacer es automatizar un sistema a través del módulo GSM de Libelium con Arduino Duemilanove. La idea es que al enviar un mensaje de texto al módulo, este interprete el SMS recibido y active una salida u otra según el contenido del texto.
El problema no está en que no funcionen los módulos, sino en que no se como hacer para conseguir que Arduino interprete los SMS recibidos del módulo GSM de Libelium de forma automática.

Las respuestas de los comandos AT no se reflejan cuando instalo el código en el ATMEGA de Arduino, aunque da la impresión de que funciona a la perfección (ya que envia SMS y realiza llamadas).

La única manera de conseguir que salgan las respuestas a los comandos AT, es utilizar Arduino sin ATMEGA y introducir los códigos AT de forma manual por Hiperterminal o similar (yo utilizo Putty).

Perdona si soy muy pesado, pero si puedes ofrecerme información al respecto, te estaría muy agradecido.

Un saludo y gracias por tu tiempo.


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Tue Apr 17, 2012 7:39 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 2027
Hola yanmy30,

Mirando un poco por encima tu código, hemos visto una serie de problemas por los cuales no te funciona:

- Cuando llegas a leer en el Serial.read el buffer de recepción del arduino esta lleno de las respuestas a todos los demás comandos AT (OK....) por lo que es necesario utilizar un flush del serial para vaciar ese buffer, ya que si no cuando lo leas leerás el inicio del buffer y lo que te interesa esta en el final.

- En cuanto a la lectura tras el comando de recepción de mensaje, el primer byte que recibes como contestación no es el contenido del mensaje directamente:

+CMGR: <stat>,[<alpha>],<length><CR><LF><pdu>

Sería mas conveniente que en vez de leer solo un byte, por medio de un bucle while y hasta que por medio de la funcion Serial.available detectes que no quedan datos en el buffer, leyeras la trama entera y la almacenaras. Luego comparar con la posición de la cadena que almacene el mensaje.

Espero que te sea de ayuda.

Un saludo.


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Tue Apr 17, 2012 10:02 am 

Joined: Fri Apr 13, 2012 9:46 am
Posts: 10
He realizado un bucle while con un Serial.flush(); antes del mismo. Consigo ver parte del código, pero solo lo anterior a este, es como si el Serial.flush(); no funcionase...
Lo que realmente leo no es el mensaje, sino lo anterior a este, en concreto la parte de la llamada.
He probado también colocando diferentes Serial.flush(); en distintas ubicaciones del código y el resultado sigue siendo exactamente el mismo.

Te adjunto la parte del código que hice para intentar leer el mensaje:

Code:
    Serial.println("AT+CMGR=1");
    Serial.flush();
    while (Serial.available()) {
      lecturaSMS = Serial.read();
      Serial.println(lecturaSMS, DEC);
    }


Esta es la parte del código que lee en vez del mensaje y su contenido:

Code:
    Serial.println("ATD*********;");          // Número telefónico a marcar
    delay(12000);
    Serial.println("ATH");                    // Desconexión de la llamada


Le he estado dando vueltas, pero debo tener algo mal hecho...


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Wed Apr 18, 2012 7:11 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 2027
Hola de nuevo tanmy30,

Intenta colocar el serial.flush antes del comando AT, y tras el un delay de unos 5 segundos. Después del comando AT coloca otro delay de un tiempo parecido.

Si con esto no te funciona, otro posible fallo es en el bucle while. Es recomendable con este tipo de módulos no utilizar funciones de escritura con el puerto serie, ya que lo que escribas va directamente al modulo y puede producir una serie de problemas. Seria mejor que la contestación que leyeras la almacenaras y luego compararas con las posición donde se encuentran los datos que te interesan.

Un cordial saludo.


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Wed Apr 18, 2012 8:03 am 

Joined: Fri Apr 13, 2012 9:46 am
Posts: 10
He simplificado la función y he puesto el serial.flush antes del comando AT, con delay, y después del mismo, también con delay. Pero aún así, no consigo leer la respuesta completa del comando, es más, no limpia el buffer con el serial.flush, por lo menos tal y como lo tengo puesto en el código...
Lo que lee es esto:

AT+CMGF=1
OK
AT+CMGR=1
+CMGR: "REC UNREAD","8031","","12/0 (aquí faltaría más texto y debajo el contenido del SMS)


Este es el código que tengo por ahora, lo he simplificado solo para leer el SMS, o al menos intentarlo:
Code:
int led = 13;
int onModulePin = 2;
int lecturaSMS = 0;                           // Variable para representar el SMS por serial

void testModule() {
  Serial.flush();
}

void switchModule() {                         // Función que enciende el módulo GSM
  digitalWrite(onModulePin,HIGH);
  delay(2000);
  digitalWrite(onModulePin,LOW);
}

void setup(){
  pinMode(led, OUTPUT);
  pinMode(onModulePin, OUTPUT);
  Serial.begin(19200);                        // Velocidad de transmisión de datos
  switchModule();                             // Llama a esta función que enciende el módulo GSM
  delay(2000);
  Serial.println("AT+CMGF=1");                // Establece el modo SMS en texto
  delay(2000);
  Serial.flush();
  delay(5000);
  Serial.println("AT+CMGR=1");                // Comando para lectura de SMS guardado
  Serial.flush();
  delay(5000);
  while (Serial.available()) {
    lecturaSMS = Serial.read();
    Serial.println(lecturaSMS, DEC);          // Lectura de SMS
  }
  delay(2000);
  Serial.println("AT*PSCPOF");                // Apaga el módulo GSM
}

void loop(){
}


Gracias de nuevo por la ayuda.


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Wed Apr 18, 2012 9:41 am 

Joined: Wed Apr 18, 2012 9:25 am
Posts: 1
Hola ^^

Yo tambien quiero hacer algo parecido y no me sale bien.
La diferencia que tengo es que en vez de utilizar el serial.println utilizo el serial.write para que en vez de decimal, salgan caracteres.

pero el mismito problema tengo, que no me aparece el mensaje entero, solo una parte.

dejo el codigo que tengo hecho para que le hecheis un vistazo:
Code:
int led = 13;
int onModulePin = 2;
char lee = 0;
void testModule() {
  Serial.flush();
}
void switchModule() {
  digitalWrite(onModulePin,HIGH);
  delay(2000);
  digitalWrite(onModulePin,LOW);
}
void setup(){
  pinMode(led, OUTPUT);
  pinMode(onModulePin, OUTPUT);
  Serial.begin(19200);
  switchModule();
  delay(2000);
  Serial.println("AT+CMGF=1");
  delay(2000);
  while (Serial.available()) {
    lee = Serial.read();
    Serial.write(lee);
  }
  delay(2000);
  Serial.println("AT+CMGR=1");
  delay(2000);
  while (Serial.available()) {
    lee = Serial.read();
    Serial.write(lee);
  }
  delay(2000);
  Serial.println("AT*PSCPOF");
}
void loop(){
}

por cierto, no tengo serial.flush porque no me funciona (¿?)

esto es lo que me responde con el codigo
Code:
AT+CMGF=1
AT+CMGF=1

OK
AT+CMGR=1
AT+CMGR=1

OK

OK
AT+CMGR=1

+CMGR: "REC READ","1234",""AT*PSCPOF


Un saludo!! ^^


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Wed Apr 18, 2012 11:51 am 

Joined: Fri Apr 13, 2012 9:46 am
Posts: 10
Necesito ayuda con esto...
No consigo obtener el resultado que necesito.

¡Gracias!


Top
 Profile  
 
 Post subject: Re: Arduino y módulo GPRS libelium (AYUDA)
PostPosted: Fri Apr 20, 2012 9:23 am 

Joined: Mon Sep 28, 2009 11:06 am
Posts: 2027
Hola yanmy30,

Como te comente en el anterior mensaje es necesario que almacenes el mensaje y compares con su posición, en vez de utilizar serial.println ya que esto puede ser fuente de problemas al enviarles lo que imprimas también al modulo.

Un saludo.


Top
 Profile  
 
Display posts from previous:  Sort by  
Post a new topicPost a reply Page 1 of 4   [ 31 posts ]
Go to page 1, 2, 3, 4  Next


You cannot post new topics in this forum
You cannot reply to topics in this forum
You cannot edit your posts in this forum
You cannot delete your posts in this forum

Search for:
cron


Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Libelium theme based on 610nm Style by Daniel St. Jules of http://www.gamexe.net


© Libelium Comunicaciones Distribuidas S.L. | Terms of use