Cooking Hacks Forum
https://www.cooking-hacks.com/forum/

Código A-GPS
https://www.cooking-hacks.com/forum/viewtopic.php?f=34&t=8631
Page 1 of 1

Author:  Drabor [ Tue Apr 05, 2016 9:33 am ]
Post subject:  Código A-GPS

Buenos días,

En el apartado GPS de la siguiente página https://www.cooking-hacks.com/documentation/tutorials/3g-gps-shield-arduino-raspberry-pi-tutorial/#step9 veo que falta el código del modo A-GPS, pone "Here is the example code" pero solo aparece una tabla. ¿Podrías añadirlo?.

Muchas gracias.

Author:  libelium-dev [ Wed Apr 06, 2016 7:50 am ]
Post subject:  Re: Código A-GPS

Hola Drabor,

Aquí lo tienes:

Code:
/*
 *  Description: This example shows how to use the MS-assited GPS
 *  This example shows the AT commands (and the answers of the module) used
 *  to work with the MS-assited GPS. For more information about the AT commands,
 *  refer to the AT command manual.
 *
 *  Copyright (C) 2013 Libelium Comunicaciones Distribuidas S.L.
 *  http://www.libelium.com
 *
 *  This program is free software: you can redistribute it and/or modify
 *  it under the terms of the GNU General Public License as published by
 *  the Free Software Foundation, either version 3 of the License, or
 *  (at your option) any later version.
 * 
 *  This program is distributed in the hope that it will be useful,
 *  but WITHOUT ANY WARRANTY; without even the implied warranty of
 *  MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
 *  GNU General Public License for more details.
 * 
 *  You should have received a copy of the GNU General Public License
 *  along with this program.  If not, see <http://www.gnu.org/licenses/>.
 *
 *  Version 0.2
 *  Author: Alejandro Gallego
 */


int8_t answer;
int onModulePin= 2;
char gps_data[100];
int counter;

void setup(){

    pinMode(onModulePin, OUTPUT);
    Serial.begin(115200);   
   
    Serial.println("Starting...");
    power_on();
   
    delay(5000);
   
    Serial.println("Connecting to the network...");

    while( (sendATcommand("AT+CREG?", "+CREG: 0,1", 500) || sendATcommand("AT+CREG?", "+CREG: 0,5", 500)) == 0 );

    sendATcommand("AT+CGSOCKCONT=1,\"IP\",\"apn\"","OK",1000);
    // if not authentication requiered comment or remove the next line
    sendATcommand("AT+CSOCKAUTH=1,1,,\"username\",\"password\"","OK",1000);
    sendATcommand("AT+CGPSURL=\"supl.google.com:7276\"","OK",1000);    // sets GPS server
    sendATcommand("AT+CGPSSSL=0","OK",1000);    // without certificate
   
   
}
void loop(){
   
    answer = sendATcommand("AT+CGPS=1,3","OK",1000);    // starts GPS session in assisted mode
    if (answer == 1)
    {
        answer = sendATcommand("","+CAGPSINFO:",30000);
        if (answer == 1)
        {
            counter = 0;
            do{
                while(Serial.available() == 0);
                gps_data[counter] = Serial.read();
                counter++;
            }while(gps_data[counter - 1] != '\r');
            gps_data[counter] = '\0';
            Serial.print("GPS data: ");
            Serial.println(gps_data); 
            Serial.println("");       
        }
        else
        {
            Serial.println("Error");
        }
    }
    else
    {
        Serial.println("Error");
    }
   
    delay(5000);
}

void power_on(){

    uint8_t answer=0;

    // checks if the module is started
    answer = sendATcommand("AT", "OK", 2000);
    if (answer == 0)
    {
        // power on pulse
        digitalWrite(onModulePin,HIGH);
        delay(3000);
        digitalWrite(onModulePin,LOW);

        // waits for an answer from the module
        while(answer == 0){   
            // Send AT every two seconds and wait for the answer
            answer = sendATcommand("AT", "OK", 2000);   
        }
    }

}


int8_t sendATcommand(char* ATcommand, char* expected_answer1,
unsigned int timeout)
{

    uint8_t x=0,  answer=0;
    char response[100];
    unsigned long previous;

    memset(response, '\0', 100);    // Initialize the string

    delay(100);

    while( Serial.available() > 0) Serial.read();    // Clean the input buffer

    Serial.println(ATcommand);    // Send the AT command


        x = 0;
    previous = millis();

    // this loop waits for the answer
    do{

        if(Serial.available() != 0){   
            response[x] = Serial.read();
            x++;
            // check if the desired answer is in the response of the module
            if (strstr(response, expected_answer1) != NULL)   
            {
                answer = 1;
            }
        }
        // Waits for the asnwer with time out
    }
    while((answer == 0) && ((millis() - previous) < timeout));   

    return answer;
}



Un saludo

Page 1 of 1 All times are UTC + 1 hour
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
http://www.phpbb.com/