Go Down

Topic: Proyecto GPS-Aplicacion (Read 2820 times) previous topic - next topic

surbyte

Vaya.. entonces no te diste cuenta que lo que te sugirió GO_zalo tiene un Arduino ATMEGA 32u4 y luego un A9G que es GSM y GPS? Son dos cosas en una y de ahi lo bueno de la idea.


CarlosTPE

@surbyte si que me di cuenta de la idea la cosa es que no estaba seguro que eso me sirviese como arduino pq me creia que el ATMEGA 32u4 no era el arduino en si si no que era otra cosa. Corrigeme si me equivoco. Gracias!

surbyte

Es un Arduino, basado en el ATMEGA 32u4 como el Leonardo por ejemplo y como el Pro Mini

surbyte

Te voy a a decir lo que me parece: Me parece que tienes un alto grado de entusiasmo pero vas muy rapido queriendo atacar todo.

Veamos: has pedido la placa ATMEGA 32u4 A9G ?

CarlosTPE

@surbyte lo acabo de pedir :)

surbyte

Bien entonces concéntrate en entender como funcona el Servidor XAMPP y como insertarle y recuperar datos porque luego deberás repetir lo mismo con el módulo del que hablamos o con la app.

Domina esa parte y trabaja en lo que puedas.
Cuando llegue el módulo entonces vuelve y vemos como seguir pero mientras todo esto escapa al foro, porque el foro es de Arduino no de XAMPP ni de app en MIT Inventor o lo que uses para comunicarte.

Tal como yo lo veo, deberías resolver una cosa a la vez y luego con la tarea resuelta pasas a la siguiente y cuando finalices todo te pones a pensar o investigar como triangular, porque es un plus no una necesidad ahora.

Mi punto de vista.


CarlosTPE

@surbyte muchismas gracias por todo! me pongo ahora al 100% con xampp y ya dentro de dos semanas cuando ya haya llegado y lo haya estudiado seguimos hablando! mil gracias por todo de verdad y hasta pronto!

GO_zalo

hecha un vistazo por aqui

bueno mas que echar un vistazo, leelo detenidamente

CarlosTPE

@GO_zalo muchas gracias por todo en cuanto lo reciba ya os cuento!!!

CarlosTPE

@GO_zalo
@surbyte
He conseguido hacer el servidor sql y crear un formulario html de forma url para que el arduino cargue la url de la web con al final la localizacion gps. Me he quedado estancado pq cuando estoy editando el programa base del 32u4 a7, me dice siempre que si el gps no funciona que lo resetee. No se si es un problema de mi programa o de hardware. No se si me podeis ayudar. El programa es este.
Code: [Select]
/*
 * Created by Keen
 * Modified by Keen
 * Date: 15/07/2017
 * Please note:
 * 1.You need to change the "target_phone".
 * 2.Lithium batteries must be used.
 * 3.The GPS and GSM antenna must be used.
 * Please open your "Serial Monitor" and you will get the debug information.
 */
#define DEBUG true

char byteGPS=-1;
char linea[300] = "";
char comandoGPR[7] = "$GPRMC";
int cont=0;
int bien=0;
int conta=0;
int indices[13];

int GPS_time=30;                        // When the board gets the 30 times location information successfully and the location information will be send by sms.     
String target_phone = "************"; // Your phone number,be careful need to add a country code before the cellphone number

String GPS_position="";
int GPS_position_count=0;

void setup()
{
  Serial.begin(115200);
  Serial1.begin(115200);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(8,OUTPUT);
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(8, LOW);
  delay(2000);
  digitalWrite(8, HIGH);
  delay(3000);       
  digitalWrite(8, LOW);
  Serial.println("A7 Power ON!");
  sendData("AT+GPS=0",3000,DEBUG);     //Close GPS
  for(int i=0;i<2;i++){                //Make sure the GPS has been turned on
    sendData("AT+GPSRD=1",1000,DEBUG);
    Serial1.println("AT+GPS=1");
  }
  Serial.println("*********************************************************");
  Serial.println("**If don`t display 'GPS positioning....',please reboot.**");
  Serial.println("*********************************************************");
}

void loop()
{
    testgps();
}

void testgps(){
  while(Serial1.available()){
   byteGPS=Serial1.read(); 
  // Read a byte of the serial port
   if (byteGPS == -1) {       
    // See if the port is empty yet
   }
   else {
     // note: there is a potential buffer overflow here!
     linea[conta]=byteGPS;        // If there is serial port data, it is put in the buffer
     conta++;                     
     //Serial.print(byteGPS);    //If you delete '//', you will get the all GPS information
     if (byteGPS==13){
      // If the received byte is = to 13, end of transmission
      // note: the actual end of transmission is <CR><LF> (i.e. 0x13 0x10)
      cont=0;
      bien=0;
      // The following for loop starts at 1, because this code is clowny and the first byte is the <LF> (0x10) from the previous transmission.
       for (int i=1;i<7;i++){     // Verifies if the received command starts with $GPR
         if (linea[i]==comandoGPR[i-1]){
           bien++;
         }
       }
       if(bien==6){
        // If yes, continue and process the data
        //Data Partitioning
         for (int i=0;i<300;i++){
           if (linea[i]==','){    // check for the position of the  "," separator
             // note: again, there is a potential buffer overflow here!
             indices[cont]=i;
             cont++;
           }
           if (linea[i]=='*'){    // ... and the "*"
             indices[12]=i;
             cont++;
           }
         }
         //panel data, for example:Direction (E/W):Longitude-Direction(N/S):Latitude<--->E:11350.51872-N:2236.40687       
         for(int i=5;i>1;i--){
           for (int j=indices[i];j<(indices[i+1]-1);j++){
             GPS_position+=linea[j+1];
           }
           if((i==5)||(i==3)){
             GPS_position+=":"; 
           }else if(i==4){
             GPS_position+="-";   
           }
         }
         //If the return ":-:", it means empty data, continue positioning
         if(GPS_position==":-:"){
          Serial.println("GPS positioning....");
         }else{
            Serial.println(GPS_position);
            GPS_position_count++;
            //When GPS_position_count is equivalent to GPS_time, stop positioning and start to send sms messages
            if(GPS_position_count==GPS_time){
            GPS_position_count=0;          //Reset count
            sendData("AT+GPS=0",1000,DEBUG);
            delay(1000);
         
            sendData("AT+GPS=1",1000,DEBUG);
           }
                 
         }
       }
       GPS_position="";
       conta=0;                    // Reset the buffer
       for (int i=0;i<300;i++){    // 
       linea[i]=' ';             
       }               
     }
   } 
   }
}



void sendData(String command, const int timeout, boolean debug)
{
    String response = "";   
    Serial1.println(command);
    long int time = millis();   
    while( (time+timeout) > millis()){
      while(Serial1.available()){       
        response += (char)Serial1.read();
      } 
    }   
    if(debug){
      Serial.print(response);
    }   
}

GO_zalo

perdona no entiendo en que punto del código te dice eso?

Supogo que el gps lo estas probando al aire libre no? (cielo abierto)

CarlosTPE

@GO_zalo si, pero sigue poniendo ese problema

CarlosTPE

#42
Dec 31, 2018, 12:58 am Last Edit: Dec 31, 2018, 01:01 am by CarlosTPE
Buenas @surbyte y @GO_zalo, que tal. Os cuento: ya he hecho la base de datos y he hecho tres programas php: uno para añadir datos a traves de una url (que servira para que el arduino añada los datos a la base sql), otra para sacar todos los datos de esa base en formato JSON y otro para sacar solo el ultimo dato de esa base. El problema que tengo ahora es que no utilizar TinyGPS++ para descodificar la señal. En la aplicacion que ya estoy haciendo en app inventor necesito una señal no GNGGA (que es lo que me da el modulo A9G) sabeis como puedo hacer para descodificar esa variable en la que esta guardadas las coordenadas GPS? Muchas gracias!
PD: he leido que para que funcione tinyGPS, tiene que tener un monitor serie. Es esto asi? si si, sabeis otra manera pq la idea es que pueda funcionar sin que este conectado constantemente a un ordenador.

CarlosTPE

#43
Jan 05, 2019, 01:01 pm Last Edit: Jan 05, 2019, 08:13 pm by surbyte Reason: Editado el título
Hola, les cuento mi proyecto que estoy haciendo con un electrow 32u4 A9G: se trata de un gps que capta la informacion y que la envia a traves de gprs a un servidor sql gracias a un codigo php que lo puede almacenar del modo .php?Trama=coordenadasgps.
El problema es que mi arduino funciona con comandos AT y por lo tanto solo recibo la informacion en el monitor serie. Me gustaria saber como puedo hacer para guadar esos valores en una variable para luego ponerlos al final del enlace. El tipo de coordenadas que me salen en el monitor serie son como las pueden ver en al final de este post. Me gustaria guardar en la variable la linea que empieza por el + y si pudiese quitar la parte que pone +GPSRD: y quedarme con lo de $GNGGA hasta el final de esa linea seria estupendo. Como puedo hacerlo? Os adjunto el codigo y al final de este post un copy paste de como me da las coordenadas GPS.
¡Muchisimas gracias por adelantado!

Code: [Select]
#define DEBUG true

void setup()
{
 Serial.begin(115200);
 Serial1.begin(115200);
  pinMode(4, OUTPUT);
  pinMode(5, OUTPUT);
  pinMode(8,OUTPUT);
  digitalWrite(5, HIGH);
  digitalWrite(4, LOW);
  digitalWrite(8, HIGH);
  delay(3000);      
  digitalWrite(8, LOW);
  Serial.println("A7 Power ON!");
}

void loop()
{
 testgps();
 delay(500);
}

void testgps(){
  sendData("AT+GPS=1",1000,DEBUG);    
  sendData("AT+GPSRD=1",3000,DEBUG);
  sendData("AT+GPS=0",10000,DEBUG);
}

void sendData(String command, const int timeout, boolean debug)
{
    String response = "";    
    Serial1.println(command);
    long int time = millis();  
    while( (time+timeout) > millis()){
      while(Serial1.available()){      
        response += (char)Serial1.read();
      }  
    }    
    if(debug){
      Serial.print(response);
    }    
}


PD: quiero poder usarlo sin que tenga que estar conectado a mi ordenador.




OK
+GPSRD:$GNGGA,000000.000,0000.0000,N,00000.0000,W,0,0,,00.0,M,00.0,M,,*00
$GPGSA,A,0,,,,,,,,,,,,,,,*0E
$BDGSA,A,0,,,,,,,,,,,,,,,*0F
$GPGSV,0,0,00*00
$BDGSV,0,0,00*00
$GNRMC,000000.000,V,0000.0000,N,00000.0000,W,0.000,0.00,000000,,,N*0C
$GNVTG,0.00,T,,M,0.000,N,0.000,K,N*0C

Go Up