PROGRAMA PARA HACER SEGUIMIENTO DE FLOTAS CON GPS Y CONEXION A LA RED GPRS
Dependencies: mbed DebouncedIn GPS_G
Dependents: 61_RASTREO_GPRS_copy
PROGRAMA PARA HACER SEGUIMIENTO DE FLOTAS CON GPS Y CONEXION A LA RED GPRS
Emplea modem gprs SIM900
vea pagina completa del proyecto.:
https://www.unrobotica.com/proyectos/rastreadorgsm.html
se implementa en una FRDMKL25Z y un modulo Bluepill STM32F103.
main.cpp@2:f4483748eee0, 2019-08-30 (annotated)
- Committer:
- tony63
- Date:
- Fri Aug 30 04:47:49 2019 +0000
- Revision:
- 2:f4483748eee0
- Parent:
- 1:3e0a9c577f09
- Child:
- 3:cd97b1ddaa23
version jueves 29 11:50 pm
Who changed what in which revision?
User | Revision | Line number | New contents of line |
---|---|---|---|
tony63 | 0:627d6e86a48e | 1 | /* |
tony63 | 0:627d6e86a48e | 2 | PROGRAMA PARA HACER SEGUIMIENTO DE FLOTAS CON GPS Y CONEXION A LA RED GPRS |
tony63 | 0:627d6e86a48e | 3 | se pueden simular trayectorias gravando archivos kml en google earth y usando |
tony63 | 0:627d6e86a48e | 4 | SatGen |
tony63 | 0:627d6e86a48e | 5 | version 1.0, abril 2019 |
tony63 | 0:627d6e86a48e | 6 | |
tony63 | 0:627d6e86a48e | 7 | se asigna un APN segun el servicio GPRS de la SIMCARD |
tony63 | 0:627d6e86a48e | 8 | se asigna un nombre de host de su pagina web |
tony63 | 0:627d6e86a48e | 9 | se asigna el path de los archivos y mapas ejecutables en su servidor |
tony63 | 0:627d6e86a48e | 10 | se asigna un ciclo de repeticion de lecturas de GPS. |
tony63 | 0:627d6e86a48e | 11 | |
tony63 | 0:627d6e86a48e | 12 | */ |
tony63 | 0:627d6e86a48e | 13 | |
tony63 | 0:627d6e86a48e | 14 | #include "mbed.h" |
tony63 | 0:627d6e86a48e | 15 | #include "stdio.h" |
tony63 | 0:627d6e86a48e | 16 | #include "string.h" |
tony63 | 0:627d6e86a48e | 17 | #include "GPS.h" |
tony63 | 0:627d6e86a48e | 18 | |
tony63 | 0:627d6e86a48e | 19 | Timer t; |
tony63 | 0:627d6e86a48e | 20 | DigitalOut LedVerde(LED2); |
tony63 | 0:627d6e86a48e | 21 | DigitalOut LedRojo(LED1); |
tony63 | 0:627d6e86a48e | 22 | DigitalOut LedAzul(LED3); |
tony63 | 0:627d6e86a48e | 23 | InterruptIn button(PTA13); |
tony63 | 0:627d6e86a48e | 24 | |
tony63 | 0:627d6e86a48e | 25 | |
tony63 | 0:627d6e86a48e | 26 | float lo,la; |
tony63 | 0:627d6e86a48e | 27 | char lon[15], lat[15]; // Cadenas a capturar para latitud y longitud. |
tony63 | 0:627d6e86a48e | 28 | char gprsBuffer[20]; |
tony63 | 0:627d6e86a48e | 29 | char resp[15]; |
tony63 | 0:627d6e86a48e | 30 | Serial GSM(PTE0,PTE1); // Puertos del FRDM para el Módem. |
tony63 | 0:627d6e86a48e | 31 | Serial pc(USBTX,USBRX); |
tony63 | 0:627d6e86a48e | 32 | GPS gps(PTE22, PTE23); // Puerto del FDRM para el GPS. |
tony63 | 0:627d6e86a48e | 33 | int result; |
tony63 | 0:627d6e86a48e | 34 | int z=0; |
tony63 | 0:627d6e86a48e | 35 | int i=0; |
tony63 | 0:627d6e86a48e | 36 | int count=0; |
tony63 | 1:3e0a9c577f09 | 37 | int g=0; |
tony63 | 0:627d6e86a48e | 38 | |
tony63 | 0:627d6e86a48e | 39 | //----------------------------------------------------------------------------------------------------------------------------- |
tony63 | 0:627d6e86a48e | 40 | // Esta funcion de abajo lee todo un bufer hasta encontrar CR o LF y el resto lo rellena de |
tony63 | 0:627d6e86a48e | 41 | // $, count es lo que va a leer. Lo leido lo mete en buffer que es una cadena previamente definida |
tony63 | 0:627d6e86a48e | 42 | // incorpora medida de tiempo si se demora mas de tres segundos retorna fracaso con -1 |
tony63 | 0:627d6e86a48e | 43 | int readBuffer(char *buffer,int count){ |
tony63 | 0:627d6e86a48e | 44 | int i=0; |
tony63 | 0:627d6e86a48e | 45 | t.start(); // start timer |
tony63 | 0:627d6e86a48e | 46 | while(1) { |
tony63 | 0:627d6e86a48e | 47 | while (GSM.readable()) { |
tony63 | 0:627d6e86a48e | 48 | char c = GSM.getc(); |
tony63 | 0:627d6e86a48e | 49 | if (c == '\r' || c == '\n') c = '$'; |
tony63 | 0:627d6e86a48e | 50 | buffer[i++] = c; |
tony63 | 0:627d6e86a48e | 51 | if(i > count)break; |
tony63 | 0:627d6e86a48e | 52 | } |
tony63 | 0:627d6e86a48e | 53 | if(i > count)break; |
tony63 | 0:627d6e86a48e | 54 | if(t.read() > 3) { |
tony63 | 0:627d6e86a48e | 55 | t.stop(); |
tony63 | 0:627d6e86a48e | 56 | t.reset(); |
tony63 | 0:627d6e86a48e | 57 | break; |
tony63 | 0:627d6e86a48e | 58 | } |
tony63 | 0:627d6e86a48e | 59 | } |
tony63 | 0:627d6e86a48e | 60 | wait(0.5); |
tony63 | 0:627d6e86a48e | 61 | while(GSM.readable()){ // display the other thing.. |
tony63 | 0:627d6e86a48e | 62 | char c = GSM.getc(); |
tony63 | 0:627d6e86a48e | 63 | } |
tony63 | 0:627d6e86a48e | 64 | return 0; |
tony63 | 0:627d6e86a48e | 65 | } |
tony63 | 0:627d6e86a48e | 66 | //-------------------------------------------------------------------------------------------------------------- |
tony63 | 0:627d6e86a48e | 67 | // Esta función de abajo limpia o borra todo un "buffer" de tamaño "count", |
tony63 | 0:627d6e86a48e | 68 | // lo revisa elemento por elemento y le mete el caracter null que indica fin de cadena. |
tony63 | 0:627d6e86a48e | 69 | // No retorna nada. |
tony63 | 0:627d6e86a48e | 70 | void cleanBuffer(char *buffer, int count){ |
tony63 | 0:627d6e86a48e | 71 | for(int i=0; i < count; i++) { |
tony63 | 0:627d6e86a48e | 72 | buffer[i] = '\0'; |
tony63 | 0:627d6e86a48e | 73 | } |
tony63 | 0:627d6e86a48e | 74 | } |
tony63 | 0:627d6e86a48e | 75 | |
tony63 | 0:627d6e86a48e | 76 | //-------------------------------------------------------------------------------------------------------------- |
tony63 | 0:627d6e86a48e | 77 | // Esta función de abajo envia un comando parametrizado como cadena |
tony63 | 0:627d6e86a48e | 78 | // puede ser un comando tipo AT. |
tony63 | 0:627d6e86a48e | 79 | void sendCmd(char *cmd){ |
tony63 | 0:627d6e86a48e | 80 | GSM.puts(cmd); |
tony63 | 0:627d6e86a48e | 81 | } |
tony63 | 0:627d6e86a48e | 82 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 83 | // Esta función de abajo espera la respuesta de un comando que debe ser idéntica a la cadena "resp" y un tiempo "timeout", |
tony63 | 0:627d6e86a48e | 84 | // si todo sale bien retorna un cero que en la programacion hay que validar, |
tony63 | 0:627d6e86a48e | 85 | // si algo sale mal (no se parece o se demora mucho) retorna -1 que debera validarse con alguna expresion logica. |
tony63 | 0:627d6e86a48e | 86 | int waitForResp(char *resp, int timeout){ |
tony63 | 0:627d6e86a48e | 87 | int len = strlen(resp); |
tony63 | 0:627d6e86a48e | 88 | int sum=0; |
tony63 | 0:627d6e86a48e | 89 | t.start(); |
tony63 | 0:627d6e86a48e | 90 | |
tony63 | 0:627d6e86a48e | 91 | while(1) { |
tony63 | 0:627d6e86a48e | 92 | if(GSM.readable()) { |
tony63 | 0:627d6e86a48e | 93 | char c = GSM.getc(); |
tony63 | 0:627d6e86a48e | 94 | sum = (c==resp[sum]) ? sum+1 : 0;// esta linea de C# sum se incrementa o se hace cero segun c |
tony63 | 0:627d6e86a48e | 95 | if(sum == len)break; //ya acabo se sale |
tony63 | 0:627d6e86a48e | 96 | } |
tony63 | 0:627d6e86a48e | 97 | if(t.read() > timeout) { // time out chequea el tiempo minimo antes de salir perdiendo |
tony63 | 0:627d6e86a48e | 98 | t.stop(); |
tony63 | 0:627d6e86a48e | 99 | t.reset(); |
tony63 | 0:627d6e86a48e | 100 | return -1; |
tony63 | 0:627d6e86a48e | 101 | } |
tony63 | 0:627d6e86a48e | 102 | } |
tony63 | 0:627d6e86a48e | 103 | t.stop(); // stop timer antes de retornar |
tony63 | 0:627d6e86a48e | 104 | t.reset(); // clear timer |
tony63 | 0:627d6e86a48e | 105 | while(GSM.readable()) { // display the other thing.. |
tony63 | 0:627d6e86a48e | 106 | char c = GSM.getc(); |
tony63 | 0:627d6e86a48e | 107 | } |
tony63 | 0:627d6e86a48e | 108 | return 0; |
tony63 | 0:627d6e86a48e | 109 | } |
tony63 | 0:627d6e86a48e | 110 | //++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 111 | // Esta función de abajo es muy completa y útil, se encarga de enviar el comando y esperar la respuesta. |
tony63 | 0:627d6e86a48e | 112 | // Si todo sale bien retorna un cero (herencia de las funciones contenedoras) que en la programacion hay que validar |
tony63 | 0:627d6e86a48e | 113 | // con alguna expresion lógica. |
tony63 | 0:627d6e86a48e | 114 | int sendCmdAndWaitForResp(char *cmd, char *resp, int timeout){ |
tony63 | 0:627d6e86a48e | 115 | sendCmd(cmd); |
tony63 | 0:627d6e86a48e | 116 | return waitForResp(resp,timeout); |
tony63 | 0:627d6e86a48e | 117 | } |
tony63 | 0:627d6e86a48e | 118 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 119 | // Esta función de abajo chequea que el módem este vivo, envia AT, le contesta con OK y espera 2 segundos. |
tony63 | 0:627d6e86a48e | 120 | int powerCheck(void){ // Este comando se manda para verificar si el módem esta vivo o conectado. |
tony63 | 0:627d6e86a48e | 121 | return sendCmdAndWaitForResp("AT\r\n", "OK", 2); |
tony63 | 0:627d6e86a48e | 122 | } |
tony63 | 0:627d6e86a48e | 123 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 124 | // Esta función de abajo chequea el estado de la sim card |
tony63 | 0:627d6e86a48e | 125 | // y si todo sale bien retorna un cero que en la programacion hay que validar |
tony63 | 0:627d6e86a48e | 126 | // con alguna expresión lógica. |
tony63 | 0:627d6e86a48e | 127 | int checkSIMStatus(void){ |
tony63 | 0:627d6e86a48e | 128 | char gprsBuffer[30]; |
tony63 | 0:627d6e86a48e | 129 | int count = 0; |
tony63 | 0:627d6e86a48e | 130 | cleanBuffer(gprsBuffer, 30); |
tony63 | 0:627d6e86a48e | 131 | while(count < 3){ |
tony63 | 0:627d6e86a48e | 132 | sendCmd("AT+CPIN?\r\n"); |
tony63 | 0:627d6e86a48e | 133 | readBuffer(gprsBuffer,30); |
tony63 | 0:627d6e86a48e | 134 | if((NULL != strstr(gprsBuffer,"+CPIN: READY"))){ |
tony63 | 0:627d6e86a48e | 135 | break; |
tony63 | 0:627d6e86a48e | 136 | } |
tony63 | 0:627d6e86a48e | 137 | count++; |
tony63 | 0:627d6e86a48e | 138 | wait(1); |
tony63 | 0:627d6e86a48e | 139 | } |
tony63 | 0:627d6e86a48e | 140 | |
tony63 | 0:627d6e86a48e | 141 | if(count == 3){ |
tony63 | 0:627d6e86a48e | 142 | return -1; |
tony63 | 0:627d6e86a48e | 143 | } |
tony63 | 0:627d6e86a48e | 144 | return 0; |
tony63 | 0:627d6e86a48e | 145 | } |
tony63 | 0:627d6e86a48e | 146 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 147 | |
tony63 | 0:627d6e86a48e | 148 | // Esta función de abajo chequea la calidad de la señal |
tony63 | 0:627d6e86a48e | 149 | // y si todo sale bien retorna con el valor de señal útil o un -1 si no es aceptable, en la programacion hay que validar |
tony63 | 0:627d6e86a48e | 150 | // con alguna expresión lógica. |
tony63 | 0:627d6e86a48e | 151 | int checkSignalStrength(void){ |
tony63 | 0:627d6e86a48e | 152 | char gprsBuffer[100]; |
tony63 | 0:627d6e86a48e | 153 | int index, count = 0; |
tony63 | 0:627d6e86a48e | 154 | cleanBuffer(gprsBuffer,100); |
tony63 | 0:627d6e86a48e | 155 | while(count < 3){ |
tony63 | 0:627d6e86a48e | 156 | sendCmd("AT+CSQ\r\n"); |
tony63 | 0:627d6e86a48e | 157 | readBuffer(gprsBuffer,25); |
tony63 | 0:627d6e86a48e | 158 | if(sscanf(gprsBuffer, "AT+CSQ$$$$+CSQ: %d", &index)>0) { |
tony63 | 0:627d6e86a48e | 159 | break; |
tony63 | 0:627d6e86a48e | 160 | } |
tony63 | 0:627d6e86a48e | 161 | count++; |
tony63 | 0:627d6e86a48e | 162 | wait(1); |
tony63 | 0:627d6e86a48e | 163 | } |
tony63 | 0:627d6e86a48e | 164 | if(count == 3){ |
tony63 | 0:627d6e86a48e | 165 | return -1; |
tony63 | 0:627d6e86a48e | 166 | } |
tony63 | 0:627d6e86a48e | 167 | return index; |
tony63 | 0:627d6e86a48e | 168 | } |
tony63 | 0:627d6e86a48e | 169 | |
tony63 | 0:627d6e86a48e | 170 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 171 | |
tony63 | 0:627d6e86a48e | 172 | // detectar direcion ip |
tony63 | 0:627d6e86a48e | 173 | int ip_detect(){ |
tony63 | 0:627d6e86a48e | 174 | if (GSM.readable()){ |
tony63 | 0:627d6e86a48e | 175 | readBuffer(gprsBuffer,15); |
tony63 | 0:627d6e86a48e | 176 | for(i=0;i<15;i++) |
tony63 | 0:627d6e86a48e | 177 | { |
tony63 | 0:627d6e86a48e | 178 | resp[i]=gprsBuffer[i]; |
tony63 | 0:627d6e86a48e | 179 | } |
tony63 | 0:627d6e86a48e | 180 | cleanBuffer(gprsBuffer,20); |
tony63 | 0:627d6e86a48e | 181 | for(i=0;i<15;i++){ |
tony63 | 0:627d6e86a48e | 182 | if(resp[i]== '.'){ |
tony63 | 0:627d6e86a48e | 183 | z++; |
tony63 | 0:627d6e86a48e | 184 | } |
tony63 | 0:627d6e86a48e | 185 | } |
tony63 | 1:3e0a9c577f09 | 186 | if(z==3){ //CUENTO TRES PUNTOS LO MAS PROBABLE ES QUE SEA UNA DIRECCION ip |
tony63 | 0:627d6e86a48e | 187 | pc.printf("llego ip=%d\r\n",z); |
tony63 | 0:627d6e86a48e | 188 | z=0; |
tony63 | 1:3e0a9c577f09 | 189 | return 0; //RETORNA CON CERO SI LLEGARON TRES PUNTOS |
tony63 | 0:627d6e86a48e | 190 | } |
tony63 | 0:627d6e86a48e | 191 | }//fin check GSM modem |
tony63 | 0:627d6e86a48e | 192 | z=0; |
tony63 | 1:3e0a9c577f09 | 193 | return -1; //NO LLEGARON 3 PUNTOS RETORNA CON -1 |
tony63 | 0:627d6e86a48e | 194 | }//fin funcion |
tony63 | 0:627d6e86a48e | 195 | |
tony63 | 0:627d6e86a48e | 196 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 197 | // Esta funcion de abajo inicia la comunicacion GPRS con la red celular, Se compone de un grupo de subfunciones ya definidas previamente |
tony63 | 0:627d6e86a48e | 198 | // envia las secuencias de forma ordenada esparando la respuesta adecuada |
tony63 | 0:627d6e86a48e | 199 | // si todo sale bien retorna un cero que en la programacion hay que validar |
tony63 | 0:627d6e86a48e | 200 | // con alguna expresión lógica. |
tony63 | 0:627d6e86a48e | 201 | //********************************************************************************************************* |
tony63 | 0:627d6e86a48e | 202 | |
tony63 | 0:627d6e86a48e | 203 | int init_gprs(void){ |
tony63 | 0:627d6e86a48e | 204 | |
tony63 | 0:627d6e86a48e | 205 | if (0 != sendCmdAndWaitForResp("AT\r\n", "OK", 3)){ |
tony63 | 0:627d6e86a48e | 206 | return -1; |
tony63 | 0:627d6e86a48e | 207 | } |
tony63 | 0:627d6e86a48e | 208 | if (0 != sendCmdAndWaitForResp("ATE0\r\n", "OK", 3)){ //sin eco |
tony63 | 0:627d6e86a48e | 209 | return -1; |
tony63 | 0:627d6e86a48e | 210 | } |
tony63 | 0:627d6e86a48e | 211 | if (0 != sendCmdAndWaitForResp("AT+CGATT=1\r\n", "OK", 3)){//inicia conexion GPRS |
tony63 | 0:627d6e86a48e | 212 | return -1; |
tony63 | 0:627d6e86a48e | 213 | } |
tony63 | 0:627d6e86a48e | 214 | if (0 != sendCmdAndWaitForResp("AT+CSTT=internet.comcel.com.co,comcel,comcel\r\n", "OK", 3)){ //set apn |
tony63 | 0:627d6e86a48e | 215 | return -1; |
tony63 | 0:627d6e86a48e | 216 | } |
tony63 | 0:627d6e86a48e | 217 | if (0 != sendCmdAndWaitForResp("AT+CIICR\r\n", "OK", 3)){ //habilitar conexion inalambrica |
tony63 | 0:627d6e86a48e | 218 | return -1; |
tony63 | 0:627d6e86a48e | 219 | } |
tony63 | 0:627d6e86a48e | 220 | |
tony63 | 0:627d6e86a48e | 221 | cleanBuffer(gprsBuffer,25); |
tony63 | 0:627d6e86a48e | 222 | sendCmd("AT+CIFSR\r\n"); //obtener direccion ip |
tony63 | 0:627d6e86a48e | 223 | if(0 != ip_detect()){ //esperar la llegada de un direccion IP |
tony63 | 0:627d6e86a48e | 224 | return -1; |
tony63 | 0:627d6e86a48e | 225 | } |
tony63 | 0:627d6e86a48e | 226 | wait(1); |
tony63 | 1:3e0a9c577f09 | 227 | LedVerde=0;//CONEXION OK... PRENDE LED VERDE.. |
tony63 | 0:627d6e86a48e | 228 | return 0; |
tony63 | 0:627d6e86a48e | 229 | } |
tony63 | 0:627d6e86a48e | 230 | |
tony63 | 1:3e0a9c577f09 | 231 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 1:3e0a9c577f09 | 232 | //ESTA FUNCION DE ABAJO CIERRA UNA CONEXION GPRS |
tony63 | 0:627d6e86a48e | 233 | |
tony63 | 0:627d6e86a48e | 234 | int end_gprs(void){ |
tony63 | 0:627d6e86a48e | 235 | if (0 != sendCmdAndWaitForResp("AT+CIPSHUT\r\n", "OK", 3)){ |
tony63 | 0:627d6e86a48e | 236 | return -1; |
tony63 | 0:627d6e86a48e | 237 | } |
tony63 | 0:627d6e86a48e | 238 | if (0 != sendCmdAndWaitForResp("AT+CGATT=0\r\n", "SHUT OK", 3)){ |
tony63 | 0:627d6e86a48e | 239 | return -1; |
tony63 | 0:627d6e86a48e | 240 | } |
tony63 | 0:627d6e86a48e | 241 | LedVerde=0; |
tony63 | 0:627d6e86a48e | 242 | LedRojo=1; |
tony63 | 0:627d6e86a48e | 243 | return 0; |
tony63 | 0:627d6e86a48e | 244 | } |
tony63 | 0:627d6e86a48e | 245 | |
tony63 | 0:627d6e86a48e | 246 | //++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 247 | //interupcion perdida de energia |
tony63 | 0:627d6e86a48e | 248 | //++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 249 | |
tony63 | 0:627d6e86a48e | 250 | void off_gprs(){ |
tony63 | 0:627d6e86a48e | 251 | end_gprs(); |
tony63 | 0:627d6e86a48e | 252 | } |
tony63 | 0:627d6e86a48e | 253 | |
tony63 | 0:627d6e86a48e | 254 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 255 | //inicio del programa principal |
tony63 | 0:627d6e86a48e | 256 | //+++++++++++++++++++++++++++++++++++++++++++++++++++++ |
tony63 | 0:627d6e86a48e | 257 | int main(){ |
tony63 | 1:3e0a9c577f09 | 258 | |
tony63 | 1:3e0a9c577f09 | 259 | loop1:g=gps.sample(); //GPS bien conectado???? de primero antes que todo!!!! |
tony63 | 1:3e0a9c577f09 | 260 | if(g){ |
tony63 | 1:3e0a9c577f09 | 261 | LedAzul=0;//prende led azul GPS ok!!! |
tony63 | 1:3e0a9c577f09 | 262 | pc.printf("GPS--OK\n\r"); |
tony63 | 1:3e0a9c577f09 | 263 | //si no hay GPS no intentar dada, ni conexion ni envio de datos y esperar el GPS |
tony63 | 1:3e0a9c577f09 | 264 | goto lop1; |
tony63 | 1:3e0a9c577f09 | 265 | } |
tony63 | 1:3e0a9c577f09 | 266 | goto loop1; //chequeo infinito de un GPS bien instalado... |
tony63 | 0:627d6e86a48e | 267 | lop1: |
tony63 | 1:3e0a9c577f09 | 268 | |
tony63 | 0:627d6e86a48e | 269 | if(init_gprs()<0){ |
tony63 | 1:3e0a9c577f09 | 270 | LedRojo=0;//PRENDE ROJO, APAGA VERDE |
tony63 | 0:627d6e86a48e | 271 | LedVerde=1; |
tony63 | 1:3e0a9c577f09 | 272 | goto lop1;//NO SE PUEDE RECONECTAR INFINITAMENTE ESTE SALTO ES PROVISIONAL |
tony63 | 1:3e0a9c577f09 | 273 | //CONTAR LOS INTENTOS Y DAR SEÑAL DE ERROR PERMANENTE |
tony63 | 0:627d6e86a48e | 274 | } |
tony63 | 1:3e0a9c577f09 | 275 | button.fall(&off_gprs);//perdida de alimentacion,apagaron carro ejecuta interupcion |
tony63 | 2:f4483748eee0 | 276 | //que desconecta la conexion GPRS |
tony63 | 0:627d6e86a48e | 277 | while(1){ //si el GPS tiene conexion y datos se envian coordenadas a pagina web |
tony63 | 0:627d6e86a48e | 278 | LedAzul=1; |
tony63 | 0:627d6e86a48e | 279 | if(gps.sample()){ |
tony63 | 0:627d6e86a48e | 280 | LedAzul=0; |
tony63 | 0:627d6e86a48e | 281 | lo = gps.longitude; |
tony63 | 0:627d6e86a48e | 282 | la = gps.latitude; |
tony63 | 0:627d6e86a48e | 283 | sprintf (lon, "%f", lo);//pasa de flotante a caracter |
tony63 | 0:627d6e86a48e | 284 | sprintf (lat, "%f", la);//pasa de flotante a caracter |
tony63 | 0:627d6e86a48e | 285 | repetir1:if (0 != sendCmdAndWaitForResp("AT+CIPSTART=TCP,unrobotica.com,80\r\n","OK", 3)){ |
tony63 | 0:627d6e86a48e | 286 | wait(3); |
tony63 | 0:627d6e86a48e | 287 | LedVerde=1; |
tony63 | 0:627d6e86a48e | 288 | LedRojo=0; |
tony63 | 1:3e0a9c577f09 | 289 | goto repetir1;//salto provisional debe contar intentos y no hacer nada ya que es imposible conectarse |
tony63 | 0:627d6e86a48e | 290 | } |
tony63 | 0:627d6e86a48e | 291 | |
tony63 | 0:627d6e86a48e | 292 | repetir2:cleanBuffer(gprsBuffer,10); |
tony63 | 1:3e0a9c577f09 | 293 | if(0 !=sendCmdAndWaitForResp("AT+CIPSEND\r\n","",3)){ //devuelve control+Z |
tony63 | 0:627d6e86a48e | 294 | wait(1); |
tony63 | 1:3e0a9c577f09 | 295 | goto repetir2;//salto provisional debe contar intentos y no hacer nada ya que es imposible conectarse |
tony63 | 0:627d6e86a48e | 296 | } |
tony63 | 1:3e0a9c577f09 | 297 | |
tony63 | 0:627d6e86a48e | 298 | GSM.printf("GET /gpstracker/gps1.php?lat=%s&lon=%s HTTP/1.0\r\n",lat,lon); |
tony63 | 0:627d6e86a48e | 299 | GSM.printf("Host: unrobotica.com\n\n"); |
tony63 | 0:627d6e86a48e | 300 | GSM.printf("\r\n"); |
tony63 | 1:3e0a9c577f09 | 301 | if(0 !=sendCmdAndWaitForResp("\n\r","SEND OK",10)) |
tony63 | 1:3e0a9c577f09 | 302 | { |
tony63 | 1:3e0a9c577f09 | 303 | |
tony63 | 1:3e0a9c577f09 | 304 | } |
tony63 | 1:3e0a9c577f09 | 305 | //mas tarde devuelve SEND OK ...esto es suficiente para indicarnos que los datos se fueron a la nube |
tony63 | 0:627d6e86a48e | 306 | //cleanBuffer(gprsBuffer,20); |
tony63 | 0:627d6e86a48e | 307 | //leer bufer y encontrar respuesta exitosa devuelve "SEND OK" |
tony63 | 0:627d6e86a48e | 308 | |
tony63 | 0:627d6e86a48e | 309 | //readBuffer(gprsBuffer,10); |
tony63 | 0:627d6e86a48e | 310 | //if((NULL = strstr(gprsBuffer,""))){ |
tony63 | 0:627d6e86a48e | 311 | // wait(1); |
tony63 | 0:627d6e86a48e | 312 | // goto repetir2; |
tony63 | 0:627d6e86a48e | 313 | LedRojo=1; |
tony63 | 0:627d6e86a48e | 314 | LedVerde=0; //envio OK |
tony63 | 0:627d6e86a48e | 315 | }// del test del gps |
tony63 | 0:627d6e86a48e | 316 | LedRojo=0; // hay problemas |
tony63 | 0:627d6e86a48e | 317 | LedVerde=1; |
tony63 | 0:627d6e86a48e | 318 | |
tony63 | 0:627d6e86a48e | 319 | }//del while col 13 |
tony63 | 0:627d6e86a48e | 320 | |
tony63 | 0:627d6e86a48e | 321 | }//del main col 11 |
tony63 | 0:627d6e86a48e | 322 | |
tony63 | 0:627d6e86a48e | 323 | |
tony63 | 0:627d6e86a48e | 324 | |
tony63 | 0:627d6e86a48e | 325 | |
tony63 | 0:627d6e86a48e | 326 |