Haz una pregunta
  Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos
Foros Registrarse ¿Olvidaste tu contraseña?

Temas similares

08/08/2016 #1

Avatar de ingeniero18

Proyecto con modulo SIM800L
Buenas!!! Me encuentro en un proyecto el cual consiste en el aviso por mensaje de texto cuando se produce la activación de una protección eléctrica en un tablero de control. Uso un Atmega328P-PU, programo con el ID de Arduino y el módulo GSM es el SIM800L.
El sistema, básicamente, envía un sms a un determinado número de teléfono celular avisando el corte de luz de una casa.
La función principal ya está realizada, pero me encontré con un inconveniente muy importante: una de las funciones que quiero agregarle al sistema es que se pueda consultar el saldo de la línea que éste utiliza mediante un sms, mediante los siguientes pasos:

1- envío al dispositivo un sms con la palabra "Saldo" desde mi celular.
2- el dispositivo detecta que le llegó un sms con la palabra "Saldo" y envía un sms a la compañía consultando el saldo.
3- cuando el dispositivo recibe el sms de respuesta de la compañía, este reenvía el mismo mensaje a mi teléfono, desde el cual se ha consultado el saldo.

La función que realiza esto es la siguiente:

Código:
void saldo()// 
{
  int i;
  Comando = "";    // variable string                          
  delay(500);
  mySerial.println("AT+CMGF=1");        // Activamos la funcion de envio de SMS
  delay(1000);                           // Pequeña pausa
  mySerial.println("AT+CMGS=\"444\"");  // Marco número de consulta de Saldo Movistar
  delay(1000);                           // Pequeña pausa
  mySerial.println("saldo");
  delay(500);                                    // Pequeña pausa
  mySerial.println(char(26));                      // Enviamos el equivalente a Control+Z 
  delay(1000);                                    // Pequeña pausa
  mySerial.println("");                          // Enviamos una linea vacia
  for (int i=0;i<10;i++)// espero unos segundo 
  {
   delay(1000);
  }
  int x=0;
  do
  {
  if (mySerial.available())// cuando tengo algo en el serial es que la compañia me contestó
  {                                //Si hay datos disponibles
    delay(100);
    Comando = mySerial.readString(); //Los almacenamos en la variable Comando
    delay(1000);
    x=1;
  }
  }while (x==0);
    delay(1000);
    mySerial.println("AT+CMGF=1");        // Activamos la funcion de envio de SMS
    delay(100);                           // Pequeña pausa
    mySerial.println("AT+CMGS=\"1130xxxxxx\"");  // Marco número...
    delay(1000);                           // Pequeña pausa
    mySerial.print(comando);//reenvío la contestación de la compañía
    delay(1000);                                    // Pequeña pausa
    mySerial.println(char(26));                      // Enviamos el equivalente a Control+Z 
    delay(1000);                                    // Pequeña pausa
    mySerial.println("");                          // Enviamos una linea vacia
    delay(1000);
    Comando = "";                              //Vaciamos la variable
}
Mi inconveniente se encuentra en la variable "comando", ya que cuando el dispositivo tiene que reenviar el mensaje con el saldo, envía caracteres sin sentido (hasta envía fragmentos de otros comandos AT) como lo siguiente:

+CMT: "01130xxxxxx","","16/08/08,20:45:06-12"
Saldo
AT+CMGF=1

OK
AT+CMGS="444"

> saldo
>
>
+CMGS: 7

OK

+CMT: "444","","16/08/08,20:45:20-12"
Tu saldo actual es de 1.25 pesos. Sin credito? Podes llamar por cobrar marcando 19 +Cod Area+Nro Movistar sin 0 ni 15. Ej 191153210000 Infowebmovistar.
AT+CMGF=1

OK
AT+CMGS="1130xxxxxx"

> AT+¨S”TŠj
> OKCáAT+CMÔªO$“¤CC!þsaldo>
> >
> +
>
+CMGS: 9
Qué estoy haciendo mal??? Espero haber sido claro.

Muchas gracias como siempre!!!
08/08/2016 #2

Avatar de electroconico

he usado el sim908 y sim900, suponiendo que el core es parecido.

Debes cambiar el tipo de formato de texto con el que responde, no recuerdo el comando.

Reviso mis archivos y si lo encuentro te lo paso.

Saludos!!

Me parece que es esa configuración.


/*
AT+CMGF – Set SMS Text Mode or SMS PDU Mode

AT+CMGS – Send SMS Command in Text Mode

Checa este link http://www.electrodragon.com/w/SIM90...on_AT_Commands

*/
08/08/2016 #3

Avatar de ingeniero18

electroconico dijo: Ver Mensaje
he usado el sim908 y sim900, suponiendo que el core es parecido.

Debes cambiar el tipo de formato de texto con el que responde, no recuerdo el comando.

Reviso mis archivos y si lo encuentro te lo paso.

Saludos!!
Gracias por tu respuesta electroconico!!! Espero puedas ayudarme porque no le estoy encontrando la solución... que no quede duda que sigo buscando como todo pesimista
08/08/2016 #4

Avatar de electroconico

Edite mi mensaje, espero te sirva.

No recuerdo exactamente la configuración pero se resolvio con un comando.
08/08/2016 #5

Avatar de ingeniero18

electroconico dijo: Ver Mensaje
he usado el sim908 y sim900, suponiendo que el core es parecido.

Debes cambiar el tipo de formato de texto con el que responde, no recuerdo el comando.

Reviso mis archivos y si lo encuentro te lo paso.

Saludos!!

Me parece que es esa configuración.


/*
AT+CMGF – Set SMS Text Mode or SMS PDU Mode

AT+CMGS – Send SMS Command in Text Mode

Checa este link http://www.electrodragon.com/w/SIM90...on_AT_Commands

*/
Eso es lo primero que hago... fijate en la línea que dice AT+CMGF=1, ahí configuro modo texto
08/08/2016 #6

Avatar de electroconico

ingeniero18 dijo: Ver Mensaje
Eso es lo primero que hago... fijate en la línea que dice AT+CMGF=1, ahí configuro modo texto
Si lo vi, pero son varios comandos para configurar los sms.
08/08/2016 #7

Avatar de ingeniero18

electroconico dijo: Ver Mensaje
Si lo vi, pero son varios comandos para configurar los sms.
Eso estoy seguro que anda bien, por que en otra función (en la que envío el estado de lo que estoy sensando) los mensajes llegan perfectos...
08/08/2016 #8

Avatar de electroconico

Lo otro que podrías hacer es meter.los comandos por una temrinalr serial asi descartas algun problema.con arduino o sus librerías.
08/08/2016 #9

Avatar de ingeniero18

electroconico dijo: Ver Mensaje
Lo otro que podrías hacer es meter.los comandos por una temrinalr serial asi descartas algun problema.con arduino o sus librerías.
Eso mismo estoy haciendo!!!! A medida que realizo las pruebas, chequeo online (mediante monitor serie) el tráfico de datos entre el módulo GSM y el micro, así como la comunicación del módulo con la compañía...

Lo que no estoy seguro si estoy haciendo bien es el tratamiento de los datos que tomo del puerto serie, es decir, cómo estoy tomando el texto que recibe el módulo y lo guardo en la variable "Comando" para luego utilizarlos.
Básicamente, tomo ese texto en Comando (Comando=mySerial.readString() que es "string", y luego, quiero enviar eso mismo (mySerial.print(comando)

¿Habrá otra forma de tomar los datos sin que sea necesario un string? Quizás el envío se complique por ser de ese tipo la variable y no ser, por decir algo, char...
16/08/2016 #10

Avatar de ingeniero18

Encontré el inconveniente!!! El módulo GSM puede trabajar a una velocidad de hasta 115200 baudios y así estaba configurado junto con mi programa, por lo que le bajé la velocidad de comunicación a 9600 y el sistema dejó de responder erráticamente.

Igualmente hay algo que no entiendo... alguien sabe si al usar el comando serial.readstring se vacía el buffer serial? Es que necesito usar el buffer dos veces (una como string y otra como char) y en la segunda me encuentro con que no puedo recuperar nada del mismo...
Respuesta
¿Tienes una mejor respuesta a este tema? ¿Quieres hacerle una pregunta a nuestra comunidad y sus expertos? Registrate

Foros de Electrónica » Diseño digital » Microcontroladores y sistemas embebidos

Powered by vBulletin® Version 3.8.4
Copyright ©2000 - 2017, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO ©2011, Crawlability, Inc.