Pages: [1]   Go Down
Author Topic: COSTO GPRS  (Read 3490 times)
0 Members and 1 Guest are viewing this topic.
0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Hola, estoy utilizando módem GPRS y me conecto con un servidor, envío datos desde el modulo GPRS la servidor y desde el servidor al módem GPRS utilizando el comando
at+cipstart="tcp","190.15.20.21","5000". Bien pero cuando quiero utilizar el modo udp, osea con el comando  at+cipstart="udp","190.15.20.21","5000", logro enviar datos al servidor pero del servidor al modulo GPRS no. La pregunta en si es: ¿hay alguna diferencia en costo (dinero) entre usar TCP o UDP? porque si no hay ninguna, no me rompo mas la cabeza y uso tcp!

Les dejo algunos datos mas:
modulo GPRS: SIM340.

trama que envio y recibo:
+CREG: 1
at
OK
at+cstt="internet.gprs.unifon.com.ar","internet","internet"
at+cdnscfg="200.49.193.140"
OK
at+ciicr
OK
at+cifsr
10.93.16.201
at+cipstatus
OK

STATE: IP STATUS
at+cipstart="tcp","190.15.20.21","5000"
OK

CONNECT OK
at+cipsend
> lo que envio
SEND OK
at+cipsend
> hola mundo
SEND OK
lo estoy reibiendo
at+cipshut
SHUT OK

Esta es la mejor forma de transmitir datos? siempre hablando de costo en dinero, ya que estaría mandando cada 10 minutos la posición que  recibo desde un GPS.

Saludos
Logged

0
Offline Offline
Edison Member
*
Karma: 17
Posts: 1414
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

hola, siento no poder ayudarte, pero me interesa mucho como estas conectado por gprs. podrias poner el codigo que utilizas para enviar las coordenadas gps? es que necesito hacer lo mismo.

muchas gracias.

no tienes tarifa plana en la sim que usas?
Logged

* Si preguntas, pon el código de tu programa, hace mucho mas fácil ayudarte. Y me ahorro un mensaje pidiendo que lo hagas.
* Si consigues solucionar tu problema, dedica unos minutos a explicar en tu post como lo conseguiste para beneficio de todos.
* Cambia el 'Subject' de tu hilo y añade 'SOLUCIONADO' cuando hayas llegado a una solución al problema que planteaste.
* Utiliza un 'Subject' para tu hilo que explique de que va el hilo.
Si estas empezando:
* Comienza a usar Arduino
* Guías de iniciación a Arduino
* Ejemplos
* Referencia del Lenguaje
* Conceptos básicos
Guia de usuario de arduino
Tutoriales en Ingles
Si necesitas que alguien te escriba el código: http://www.freelancer.com/  o esta  http://www.guru.com/

0
Offline Offline
Edison Member
*
Karma: 8
Posts: 1040
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El coste es el mismo, enviar paquetes UDP que TCP. Como haces para comunicar arduino mediante GPRS?.

Saludos.
Logged

Trabajando en ...

    * Control Domotico (En montaje ...)
    http://casitadomotica.blogspot.com/
 

[url=https://bitbucket.org/fmalpartida

0
Offline Offline
Newbie
*
Karma: 0
Posts: 9
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El costo de comunicarte vía UDP o TCP no es lo mismo.
Hay más tráfico con TCP, ya que confirma todos los mensajes enviados.

Saludos,

www.olimex.cl
Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

Amigos, gracias por contestar y perdón por mi demora (Sin excusas) …..
Sergegsx, no puedo mandarte el código para lo que me pides porque no lo he logrado aún, pero voy a poner lo que tengo hasta ahora.
flico, ahí va el código también….
Antes les comento un poco del hardware y los inconvenientes que he ido sorteando….
Primero empecé usando un modem: http://www.dealextreme.com/p/usb-tri-band-gprs-modem-cell-phone-radio-gsm-900-1800-1900mhz-12057, si lo que quieren es mandar y recibir mensajes de texto, llamadas de vos y mensajes en modo PDU es económico y anda bien, pero nunca lo pude hacer andar en GPRS, por lo que me pase a un modulo SIM900.
Ya estoy haciendo pruebas con el GPS, en cuanto tenga algo para mostrar se los mando. Pero por lo pronto estoy usando un GM20 de SKILAB (al que no se le puede configurar nada aparte de la velocidad del puerto serie).

Con respecto al costo de la comunicación, como bien dice Eduard, no es el mismo, pero realmente el costo de la comunicación por TCP es económico, hemos tenido mandando datos al GPRS todo un dia (cada 30 segundos, unos 15 byte) y el costo no ha superado el dólar cincuenta! En cambios con UDP no pudimos hacer muchas pruebas ya que de diez paquetes que mandábamos 5 se perdían! No podíamos darnos ese lujo y sacando cuentas nos convenía más el TCP! ¿estaré haciendo algo mal para que tal cantidad de paquetes no llegaran al servidor?
Hay muchas cosas que no me quedan claras pero espero ir aclarándolas con el tiempo, como si al conectarme con un servidor tengo que mandar la info y desconectarme? Como lo manejan las empresas que se dedican al seguimiento? O se quedan conectados aunque no manden paquetes? En el caso de que la empresa tenga unos 500 vehículos, creo que lo lógico es liberar la conexión ¿Alguien sabe de esto?
No he tenido tiempo de comentar el código, pero si veo que hay interés lo hago sin problemas….
La librería para el puerto serie virtual la ha sacado de http://arduiniana.org/2011/01/newsoftserial-11-beta/  , estoy usando la versión 11beta y me ha dado excelentes resultados al trabajar con cadenas de caracteres largas (Un tema muy, muy importante para los que quieran juntar GPRS con GPS! HAY mucho para  hablar sobre esto…)
Hay partes de código que no recuerdo de donde las he sacado (pido disculpas y voy a hacer lo posible para recopilar la info y dar los créditos a los que han puesto su tiempo en publicar!)

Bien pues aquí va el código! No sean exigentes, se que se puede mejorar mucho pero es funcional….  (Pueden haber errores de ortografía en los comentarios! Como asi también líneas que uso para debug que pueden parecer extrañas,  en muchas partes faltan las letras “C” pues a mi teclado no le anda muy bien… jajaja)

Cualquier duda voy ha hacer lo posible por contestarles (dentro de mis limitaciones en el tema….)
Eduard, vi que debajo de tu comentario (gracias por responder) pones www.olimex.cl, algo que ver con la empresa (recomendable por cierto!)?
Por fin el código!:  


Code:
//Uso la libreria SoftwareSerial,
#include <icrmacros.h>
#include <SoftwareSerial.h>

SoftwareSerial sim340(8, 9); // Order is input pin, output pin
#define maxLength 30
String inString = String(maxLength);
//String inString="";
String t = String ("OK");
String CONNECT = String ("CONNECT OK");
String apnn = String ("internet.gprs.unifon.com.ar");
String user = String ("internet");
String pas = String ("internet");
String dns = String ("200.49.193.140");
String modo_coneccion = String ("tcp");
String IP_servidor = String ("190.15.206.212");
String puerto = String ("5000");

long previousMillis = 0;
int listo= 0 ;
int anda= 0;
int activado= 0;
int bandera= 0;
int bandera1= 0;
int bandera2= 0;
int bandera3= 0;
int bandera4= 0;
int bandera5= 0;
int bandera6= 0;



//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                          SETUP                                                   //
//////////////////////////////////////////////////////////////////////////////////////////////////////
void setup()
{

  delay(13000);
  sim340.begin(9600);
  Serial.begin(9600);
  sim340.println("ATE0");
  delay(50);
  sim340.println("&W");
  delay(1000);
  sim340.flush();
  delay(1000);
  inString="";


  Serial.println("modulo respondiendo?");
  while ( modulo_response()==0){
    //Serial.println("modulo sin inicializar");


  }

  Serial.println("modulo respondiendo");


}
//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                                                                                  //
//                                       LOOP                                                       //
//                                                                                                  //
//////////////////////////////////////////////////////////////////////////////////////////////////////
void loop()
{

  //............APN.................................................................................  

  if(bandera==0){
    Serial.println("configurando APN");
    while ( seleccionAPN(apnn,user,pas)==0) {
      Serial.println("APN incorrecto");
      // Serial.println( inString);      
    }

    Serial.println("APN correcto");
    bandera=1;
  }
  //............DNS...............................................................................

  if(bandera1==0){
    Serial.println("configurado DNS");
    while ( dsn_operadora(dns)==0) {
      Serial.println("DNS no configurado");
      // Serial.println( inString);      
    }

    Serial.println("DNS configurado");
    bandera1=1;
  }
  //...............CONECCION RED GPRS.............................................................

  if(bandera2==0){
    Serial.println("Conectando a la red GPRS");
    while ( coneccionRed_GPRS()==0) {
      Serial.println("error GPRS");    
    }

    Serial.println("Conetado a la red GPRS");
    bandera2=1;
  }

  //...............Conociendo mi IP dinamica (la que me asigna la operadora).........................


  if(bandera3==0){
    // Serial.println("Vaciando el buffer");
    //  delay(5000);

    while (sim340.available()) Serial.print((char)sim340.read());   //getIncomingChars(t);

    Serial.println("recibiendo IP");
    while ( recibiendo_IP()==0) {
      Serial.println("error IP");

    }

    Serial.println("IP recibida y almacenada");

    bandera3=1;
  }



  //...............Preguntando por el estado de la coneccion.........................

  if(bandera4==0){
    Serial.println("Estado de la oneccion?");
    while ( coneccion_GPRS()==0) {
      Serial.println("error coneccion GPRS");    
    }

    Serial.println("Conectado red GPRS");
    bandera4=1;
    while (sim340.available()) Serial.print((char)sim340.read());

  }

  //...............Conetando con el Servidor (IP) al puerto () .........................

  if(bandera5==0){
    Serial.println("Conectando con el servidor (IP) al Puerto...");
    while ( coneccion_servidor(modo_coneccion,IP_servidor,puerto)==0) {
      Serial.println("error coneccion GPRS");    
    }

    Serial.println("conectado con el servidor");
    bandera5=1;


  }
  
  
  
  //...............Enviar datos al servidor .........................

  if(bandera6==0){
    Serial.println("Enviando datos...");
    while ( Data_serv_send(pas)==0) {
      Serial.println("error al enviar datos");    
    }

    Serial.println("datos enviados");
    bandera5=6;
  
  
  }

//Data_serv_send(pas);




 //...............Escuchando al servidor .........................


  if (sim340.available()>0) Serial.println((char)sim340.read());
}

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

El código está dividido en dos partes, una es “GPRSS” y la otra “ funciones_de_modulo_gprs” , para los que no lo saben hacer, dentro de la carpera GPRSS tiene que estar el archivo “GPRSS.pde” que les acabo de poner, junto con el archivo “funciones_de_modulo_gprs.pde”  (les adjunto una captura de pantalla y el código de este ultimo archivo).

Code:
//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        modulo_response                                           //
//////////////////////////////////////////////////////////////////////////////////////////////////////


boolean modulo_response()
{
  boolean inicio=0;
  sim340.println("AT");


  unsigned long T=millis();
  while(sim340.available() > 0 || millis()-T<1000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      inicio=getIncomingChars(t);
    if (inicio==1) break;
  }
  return (inicio);   
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        selecionAPN                                              //
//////////////////////////////////////////////////////////////////////////////////////////////////////


boolean seleccionAPN(String APNNN, String USERR, String PASS)
{
  boolean comparar=0;
  sim340.print("at+cstt=");
  sim340.print(34,BYTE);
  sim340.print(APNNN);
  sim340.print(34,BYTE);
  sim340.print(",");
  sim340.print(34,BYTE);
  sim340.print(USERR);
  sim340.print(34,BYTE);
  sim340.print(",");
  sim340.print(34,BYTE);
  sim340.print(PASS);
  sim340.println(34,BYTE);

  //delay(200);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<1000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      comparar=getIncomingChars(t);
    if (comparar==1) break;
  }
  return (comparar);   
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        selecionDNS operadeora                                    //
//////////////////////////////////////////////////////////////////////////////////////////////////////

boolean dsn_operadora(String DNS)
{
  boolean comparar=0;
  sim340.print("at+cdnscfg=");
  sim340.print(34,BYTE);
  sim340.print(DNS);
  sim340.println(34,BYTE);

  //delay(200);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<1000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      comparar=getIncomingChars(t);
    if (comparar==1) break;
  }
  return (comparar);   
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        coneccionRed_GPRS                                         //
//////////////////////////////////////////////////////////////////////////////////////////////////////

boolean coneccionRed_GPRS()
{
  boolean comparar=0;
  sim340.println("at+ciicr");

  //delay(5000);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<5000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      comparar=getIncomingChars(t);
    if (comparar==1) break;
  }
  return (comparar);   
}


//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        Resibiendo IP dinamica                                    //
//////////////////////////////////////////////////////////////////////////////////////////////////////

boolean recibiendo_IP()
{
  boolean comparar=0;
  sim340.println("at+cifsr");

  delay(200);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<1000)
  {   
    if (sim340.available()) Serial.print((char)sim340.read());   //getIncomingChars(t);
    //comparar=getIncomingChars(t);
    //comparar=getIncomingCharsignore();
    //if (comparar==1) break;
  }

  return (1);   
}



//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        Estado de la coneccion?                                   //
//////////////////////////////////////////////////////////////////////////////////////////////////////

boolean coneccion_GPRS()
{
  boolean comparar=0;
  sim340.println("at+cipstatus");

  //delay(5000);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<4000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      comparar=getIncomingChars(t);
    if (comparar==1)
      break;
  }
  return (comparar);   
}

//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        Conecion con el servidor                                  //
//////////////////////////////////////////////////////////////////////////////////////////////////////


boolean coneccion_servidor(String modo, String IP, String puerto)
{
  boolean comparar=0;
  sim340.print("at+cipstart=");
  sim340.print(34,BYTE);
  sim340.print(modo);
  sim340.print(34,BYTE);
  sim340.print(",");
  sim340.print(34,BYTE);
  sim340.print(IP);
  sim340.print(34,BYTE);
  sim340.print(",");
  sim340.print(34,BYTE);
  sim340.print(puerto);
  sim340.println(34,BYTE);

  //delay(200);

  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<1000)
  {   
    if (sim340.available())   //getIncomingChars(t);
      comparar=getIncomingChars(t);
    if (comparar==1) break;
  }
  return (comparar);   
}



//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                        Enviar Datos al Servidor     (>62)                        //
//////////////////////////////////////////////////////////////////////////////////////////////////////
boolean Data_serv_send(String texto)
{
  boolean comparar=0;
  sim340.print("at+cipsend");
  unsigned long time=millis();
  while(sim340.available() > 0 || millis()-time<1000)
  {   



    if (sim340.available()){
      Serial.println(sim340.read());
    }
    // Serial.println(texto);

    // if (sim340.available())   //getIncomingChars(t);
    // comparar=getIncomingChars(t);
    //if (comparar==1) break;

  }
  sim340.print(texto);
 sim340.print(0x1A,BYTE);
 comparar=1;
  return (comparar);   
}









//////////////////////////////////////////////////////////////////////////////////////////////////////
//                                       getIncomingCharrs                                          //
//////////////////////////////////////////////////////////////////////////////////////////////////////

boolean getIncomingChars(String comparar) {
  // read the incoming data as a char:
  boolean valor=0;
  char inChar = sim340.read();
  //Serial.print(inChar);
  // if it's a newline or return, print the string:
  if ((inChar == '\n') || (inChar == '\r')) {
    Serial.println(inString);   


    if (inString.equals(comparar)){
      valor=1;
      inString="";
    }
    else
    {
      //valor=0;
      inString="";
    }

  }
  else {
    // if you're not at the end of the string, append
    // the incoming character:
    if (inString.length() < maxLength) {
      inString+= inChar;
      //Serial.print(inChar);
      //Serial.println(inString);
    }
    else {
      // empty the string by setting it equal to the inoming char:
      inString = inChar;
    }
  }
  return(valor);
}





/* int espera(unsigned long retardo){
 int listo;
 unsigned long currentMillis = millis();
 
 if(currentMillis - previousMillis > retardo) {
 
 previousMillis = currentMillis;
 
 return listo=1; 
 
 }
 
 }
 */



Saludos, espero que le sirva a alguien.... 

Logged

0
Offline Offline
Jr. Member
**
Karma: 0
Posts: 53
Arduino rocks
View Profile
 Bigger Bigger  Smaller Smaller  Reset Reset

perdon no me permitia poner todo de una sola ves, ahi va la imagen que faltaba


« Last Edit: June 27, 2011, 09:12:13 pm by fernando david » Logged

Pages: [1]   Go Up
Jump to: