#include <LGPRS.h>
#include <LGPRSClient.h>
#include <LGPRSServer.h>
#include <LGPS.h>
char server[]="narando.tpddns.cn"; //server ip
int port = 8010; //server port
String stringSix; //server path
char buff[256];
gpsSentenceInfoStruct info;
LGPRSClient client;
/*get the comma location num of GPGGAstr data*/
static unsigned char getComma(unsigned char num,const char *str)
{
unsigned char i,j = 0;
int len=strlen(str);
for(i = 0;i < len;i ++)
{
if(str[i] == ',')
j++;
if(j == num)
return i + 1;
}
return 0;
}
/*cut out data,start from the comma location to first comma location*/
static double getDoubleNumber(const char *s)
{
char buf[10];
unsigned char i;
double rev;
i=getComma(1, s);
i = i - 1;
strncpy(buf, s, i);
buf[i] = 0;
rev=atof(buf);
return rev;
}
/*parse year,month,day from GPRMC data*/
char* change_rtc(const char *GPRMC)
{
String strYear,strMonth,strDay;
char buf[50],str11[255],str12[255],str13[255];
char* p;
int tmp;
int year1,year2,month1,month2,day1,day2;
if(GPRMC[0] == '$')
{
tmp = getComma(2, GPRMC);
sprintf(buf, "mode:%c", GPRMC[tmp]);
Serial.println(buf);
bzero(buf, 50);
tmp = getComma(9, GPRMC);
day1 = GPRMC[tmp+0]-'0';
day2 = GPRMC[tmp+1]-'0';
sprintf (str11,"%d%d",day1,day2);
strDay = String(str11);
Serial.println(strDay);
month1 = GPRMC[tmp+2]-'0';
month2 = GPRMC[tmp+3]-'0';
sprintf (str12,"%d%d",month1,month2);
strMonth = String(str12);
Serial.println(strMonth);
year1 = GPRMC[tmp+4]-'0';
year2 = GPRMC[tmp+5]-'0';
sprintf (str13,"%d%d",year1,year2);
strYear = String(str13);
Serial.println(strYear);
sprintf(buf, "%d%d%d%d%d%d", year1,year2,month1,month2,day1,day2);
p = buf;
Serial.println(p);
return p;
}
}
/*parse GPGGA data,get latitude,longitude,hour,minute,second;then make up the server path,send http get please*/
void parseGPGGA(const char* GPGGAstr)
{
String stringOne,stringTwo,stringThree,stringFour,stringFive,strYmd,strHms,strMs,strHour,strTime,stringKeyword;
Serial.println("LGPS loop");
delay(4000);
LGPS.getData(&info);
change_rtc((char*)info.GPRMC);
Serial.println((char*)info.GPGGA);
Serial.println((char*)info.GPRMC);
if(GPGGAstr[0] == '$')
{
String stri,strj,strl,strm,strMinu,strSec;
double latitude,longitude,ms;
char str1[255],str2[255],str3[255],str4[255],str5[255],str6[255],str7[255],str8[255],str9[255],str10[255];
int tmp,hour1,hour2,minute1,minute2,second1,second2;
int i,l;
double j,k,m,n;
stringOne = String("/BopLostServer/addtimechange.action?lng=");
stringThree = String("&lat=");
stringFive = String("&time=20");
stringKeyword = String("&keyword=1");
sprintf(str9,"%s",change_rtc((char*)info.GPRMC));
strYmd = String(str9);
Serial.println("YMD is: ");
Serial.println(strYmd);
/*get latitude*/
tmp = getComma(2, GPGGAstr);
latitude = getDoubleNumber(&GPGGAstr[tmp]);
i = latitude/100;
j = (latitude - (i*100))/60;
k = i + j;
sprintf (str1,"%d",i);
sprintf (str5,"%8.6f",j);
sprintf (str6,"%8.6f",k);
stri = String(str1);
strj = String(str5);
stringFour = String(str6);
Serial.println(stringFour);
/*get longitude*/
tmp = getComma(4, GPGGAstr);
longitude = getDoubleNumber(&GPGGAstr[tmp]);
l = longitude/100;
m = (longitude-(l*100))/60;
n = l + m;
sprintf(str2,"%d",l);
sprintf(str7,"%9.6f",m);
sprintf (str8,"%9.6f",n);
strl = String(str2);
strm = String(str7);
stringTwo = String(str8);
Serial.println( stringTwo);
sprintf(buff, "latitude = %8.4f, longitude = %8.4f", latitude, longitude);
Serial.println(buff);
Serial.println("get data ok !!!");
/*get hour*/
tmp = getComma(1, GPGGAstr);
hour1 = (GPGGAstr[tmp+0]-'0');
hour2 = GPGGAstr[tmp+1]-'0';
sprintf (str3,"%d%d",hour1,hour2);
strHour = String(str3);
Serial.println(strHour);
/*get minute*/
tmp = getComma(1, GPGGAstr);
minute1 = (GPGGAstr[tmp+2]-'0');
minute2 = (GPGGAstr[tmp+3]-'0');
sprintf (str10,"%d%d",minute1,minute2);
strMinu = String(str10);
Serial.println(strMinu);
/*get second*/
tmp = getComma(1, GPGGAstr);
second1 = (GPGGAstr[tmp+4]-'0');
second2 = (GPGGAstr[tmp+5]-'0');
sprintf (str10,"%d%d",second1,second2);
strSec = String(str10);
Serial.println(strSec);
strHms = strHour + strMinu + strSec;
Serial.println(strHms);
/*server path for get please*/
stringSix = stringOne + stringTwo + stringThree + stringFour + stringFive + strYmd + strHms + stringKeyword;
Serial.println(stringSix);
}
else
{
Serial.println("Not get data");
}
delay(3000);
/*start get please*/
Serial.println("start get...");
if (client.connect(server, port)) {
Serial.println("connected http....");
client.print("GET ");
client.print(stringSix);
Serial.println(stringSix);
client.println(" HTTP/1.1");
client.print("Host: ");
client.println(server);
client.print(" :");
client.println(port);
Serial.println("Attach to GPS network by auto-detect APN setting2");
//client.println(server);
client.println("Connection:close");
client.println();
Serial.println("------------");
}
else{
Serial.println("connection failed");
}
Serial.println("end get!");
/*end get*/
/*end get return data for http*/
}
void setup() {
/*open uart*/
Serial.begin(115200);
/*start attach gps */
LGPS.powerOn();
Serial.println("LGPS Power on, and waiting ...");
delay(3000);
Serial.println("Attach to GPS !!!");
/*end attach gps */
/*start attach gprs */
Serial.println("start gprs link...");
while(!LGPRS.attachGPRS()) {
Serial.println("Attach to GPS network by auto-detect APN setting1");
delay(500);
}
Serial.println("link gprs ok!!!");
/*end attach gprs */}
void loop(){
/*parse GPGGA data and send GPGGA for Http*/
parseGPGGA((const char*)info.GPGGA);
delay(2000);
}
arduino gps
最新推荐文章于 2025-05-20 10:55:23 发布