Sou iniciante em Arduino e estou querendo desenvolver um rastreador usando o shield GPRS ÷ shield GPS. Estou querendo unir estes dois códigos abaixo para enviar de 10 em 10 segundos as coordenadas para uma URL. Lembrando que os dois shield já estão funcionando separados usando estes dois códigos testes: 

Esse é o do Shield GPRS

/*
* Copyright (C) 2012 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 .
*
* Version 0.1
* Author: Alejandro Gállego
*/


char data[1024];
int data_size;
int led = 13;
int onModulePin = 2; // the pin to switch on the module (without press on button)
char aux;
int x = 0;


void switchModule(){
digitalWrite(onModulePin,HIGH);
delay(2000);
digitalWrite(onModulePin,LOW);
}

void setup(){

Serial.begin(115200); // UART baud rate
delay(2000);
pinMode(led, OUTPUT);
pinMode(onModulePin, OUTPUT);
digitalWrite(led,LOW);
switchModule(); // switches the module ON

for (int i=0;i < 5;i++){
delay(5000);
}

Serial.println("AT+SAPBR=3,1,\"Contype\",\"GPRS\""); //Sets GPRS parameters
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);

Serial.println("AT+SAPBR=3,1,\"APN\",\"myAPN\"");
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);

Serial.println("AT+SAPBR=1,1");
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);
Serial.println("AT+HTTPINIT");
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);

Serial.println("AT+HTTPPARA=\"CID\",1"); //Sets GPRS profile to use with HTTP
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);

}

void loop()
{

Serial.println("AT+HTTPPARA=\"URL\",\"www.teste.com/gps/recebe.php?latitude=21321312312&longitude=21321312312&numerochip=teste\""); //Sets URL direction
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);


Serial.println("AT+HTTPACTION=0"); //Connects with the HTTP server, this action can need to wait a several time
x=0;

do{
while(Serial.available()==0);
}while(Serial.read()!=',');
do{
while(Serial.available()==0);
}while(Serial.read()!='\r');
delay(100);

Serial.println("AT+HTTPREAD=0,200"); //Reads 200 bytes from byte 0

do{
while(Serial.available()==0);
}while(Serial.read()!=':');

data_size=0;
while(Serial.available()==0);

aux=Serial.read();
do{
data_size*=10;
data_size+=(aux-0x30);
while(Serial.available()==0);
aux=Serial.read();
}while(aux!='\r');

do{
while(Serial.available()==0);
}while(Serial.read()!='\n');

for(x=0;x<=data_size;x++){
while(Serial.available()==0);
data[x]=Serial.read();
}

Serial.println("AT+HTTPTERM"); //Closes the opened HTTP session
do{
while(Serial.available()==0);
}while(Serial.read()!='K');
delay(100);

Serial.print(data); //Shows data

while(1);

}

-----------------------------------------------------------------------------------------------------------------------------

E esse é o do Shield GPS:

#include <SoftwareSerial.h>

#include <TinyGPS.h>

/* This sample code demonstrates the normal use of a TinyGPS object.
It requires the use of SoftwareSerial, and assumes that you have a
4800-baud serial GPS device hooked up on pins 3(rx) and 4(tx).
*/

TinyGPS gps;
SoftwareSerial nss(3, 4);

static void gpsdump(TinyGPS &gps);
static bool feedgps();
static void print_float(float val, float invalid, int len, int prec);
static void print_int(unsigned long val, unsigned long invalid, int len);
static void print_date(TinyGPS &gps);
static void print_str(const char *str, int len);

void setup()
{
Serial.begin(115200);
nss.begin(9600);

Serial.print("Testing TinyGPS library v. "); Serial.println(TinyGPS::library_version());
Serial.println("by Mikal Hart");
Serial.println();
Serial.print("Sizeof(gpsobject) = "); Serial.println(sizeof(TinyGPS));
Serial.println();
Serial.println("Sats HDOP Latitude Longitude Fix Date Time Date Alt Course Speed Card Distance Course Card Chars Sentences Checksum");
Serial.println(" (deg) (deg) Age Age (m) --- from GPS ---- ---- to London ---- RX RX Fail");
Serial.println("--------------------------------------------------------------------------------------------------------------------------------------");
}

void loop()
{
bool newdata = false;
unsigned long start = millis();

// Every second we print an update
while (millis() - start < 1000)
{
if (feedgps())
newdata = true;
}

gpsdump(gps);
}

static void gpsdump(TinyGPS &gps)
{
float flat, flon;
unsigned long age, date, time, chars = 0;
unsigned short sentences = 0, failed = 0;
static const float LONDON_LAT = 51.508131, LONDON_LON = -0.128002;

print_int(gps.satellites(), TinyGPS::GPS_INVALID_SATELLITES, 5);
print_int(gps.hdop(), TinyGPS::GPS_INVALID_HDOP, 5);
gps.f_get_position(&flat, &flon, &age);
print_float(flat, TinyGPS::GPS_INVALID_F_ANGLE, 9, 5);
print_float(flon, TinyGPS::GPS_INVALID_F_ANGLE, 10, 5);
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);

print_date(gps);

print_float(gps.f_altitude(), TinyGPS::GPS_INVALID_F_ALTITUDE, 8, 2);
print_float(gps.f_course(), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_float(gps.f_speed_kmph(), TinyGPS::GPS_INVALID_F_SPEED, 6, 2);
print_str(gps.f_course() == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(gps.f_course()), 6);
print_int(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0UL : (unsigned long)TinyGPS::distance_between(flat, flon, LONDON_LAT, LONDON_LON) / 1000, 0xFFFFFFFF, 9);
print_float(flat == TinyGPS::GPS_INVALID_F_ANGLE ? 0.0 : TinyGPS::course_to(flat, flon, 51.508131, -0.128002), TinyGPS::GPS_INVALID_F_ANGLE, 7, 2);
print_str(flat == TinyGPS::GPS_INVALID_F_ANGLE ? "*** " : TinyGPS::cardinal(TinyGPS::course_to(flat, flon, LONDON_LAT, LONDON_LON)), 6);

gps.stats(&chars, &sentences, &failed);
print_int(chars, 0xFFFFFFFF, 6);
print_int(sentences, 0xFFFFFFFF, 10);
print_int(failed, 0xFFFFFFFF, 9);
Serial.println();
}

static void print_int(unsigned long val, unsigned long invalid, int len)
{
char sz[32];
if (val == invalid)
strcpy(sz, "*******");
else
sprintf(sz, "%ld", val);
sz[len] = 0;
for (int i=strlen(sz); i<len; ++i)
sz[i] = ' ';
if (len > 0)
sz[len-1] = ' ';
Serial.print(sz);
feedgps();
}

static void print_float(float val, float invalid, int len, int prec)
{
char sz[32];
if (val == invalid)
{
strcpy(sz, "*******");
sz[len] = 0;
if (len > 0)
sz[len-1] = ' ';
for (int i=7; i<len; ++i)
sz[i] = ' ';
Serial.print(sz);
}
else
{
Serial.print(val, prec);
int vi = abs((int)val);
int flen = prec + (val < 0.0 ? 2 : 1);
flen += vi >= 1000 ? 4 : vi >= 100 ? 3 : vi >= 10 ? 2 : 1;
for (int i=flen; i<len; ++i)
Serial.print(" ");
}
feedgps();
}

static void print_date(TinyGPS &gps)
{
int year;
byte month, day, hour, minute, second, hundredths;
unsigned long age;
gps.crack_datetime(&year, &month, &day, &hour, &minute, &second, &hundredths, &age);
if (age == TinyGPS::GPS_INVALID_AGE)
Serial.print("******* ******* ");
else
{
char sz[32];
sprintf(sz, "%02d/%02d/%02d %02d:%02d:%02d ",
month, day, year, hour, minute, second);
Serial.print(sz);
}
print_int(age, TinyGPS::GPS_INVALID_AGE, 5);
feedgps();
}

static void print_str(const char *str, int len)
{
int slen = strlen(str);
for (int i=0; i<len; ++i)
Serial.print(i<slen ? str[i] : ' ');
feedgps();
}

static bool feedgps()
{
while (nss.available())
{
if (gps.encode(nss.read()))
return true;
}
return false;
}

Exibições: 1348

Responder esta

Respostas a este tópico

estou com um projeto igual na faze final ja, porem meu unico problema que as vezes o gprs nao consegue acessar a url e me retorna +HTTPACTION:0,302,0, alguem sabe o que quer dizer isso?

estou usando apn da vivo.

RSS

© 2024   Criado por Marcelo Rodrigues.   Ativado por

Badges  |  Relatar um incidente  |  Termos de serviço