SparkFun Forums 

Where electronics enthusiasts find answers.

For the discussion of Arduino related topics.
By shivendrareddy
#192640
HOW TO SHOW DYNAMIC GPS DATA AND AUTO REFRESH PAGE ON WEB BROWSER??

Hello,

I'm using ESP8266 WIFI module and GPS module. I have connected to ARDUINO UNO R3 board to read

the GPS coordinates and transmit them to webpage using ESP8266 WiFi module connected to router.

In my code the page change only when I press F5 (refresh) , and so I can see the change of Coordinates.

I want to see the changing results dynamically with out refreshing the webpage. what to I need to do

/change in order that it will change automatically?


please check my code here or in the attachment and suggest me the changes.

Thanks in advance.

CODE:

// code starts

#include <Adafruit_GPS.h>
#include<SoftwareSerial.h>

SoftwareSerial Serial1(2,3); // ESP8266 RX pin 2, TX pin 3.
SoftwareSerial gps(11, 10); // GPS RX pin 10, TX pin 11.

boolean No_IP=false;
String IP="";
String webpage="";

int i=0,k=0;
int gps_status=0;


String name="<p> Name: XXXXXXXX </p>"; //22
String date="<p>DATE: DD MM YYYY</p>"; //21
String number="<p> Vehicle No.: ABC 0000</p>";//29
String cordinat="<p>Coordinates:</p>"; //17
String latitude="";
String logitude="";
String gpsString="";
char *test="$GPGGA";

void check4IP(int t1)
{
int t2=millis();
while(t2+t1>millis())
{
while(Serial1.available()>0)
{
if(Serial1.find("WIFI GOT IP"))
{
No_IP=true;
}
}
}
}

void get_ip()
{
IP="";
char ch=0;
while(1)
{
Serial1.println("AT+CIFSR");
while(Serial1.available()>0)
{
if(Serial1.find("STAIP,"))
{
delay(1000);
Serial.print("IP Address:");
while(Serial1.available()>0)
{
ch=Serial1.read();
if(ch=='+')
break;
IP+=ch;
}
}
if(ch=='+')
break;
}
if(ch=='+')
break;
delay(1000);
}
Serial.print(IP);
Serial.print("Port:");
Serial.println(80);
delay(1000);
}

void connect_wifi(String cmd, int t)
{
int temp=0,i=0;
while(1)
{
Serial.println(cmd);
Serial1.println(cmd);
while(Serial1.available()>0)
{
if(Serial1.find("OK"))
{
i=8;
}
}
delay(t);
if(i>5)
break;
i++;
}
if(i==8)
{
Serial.println("OK");
}
else
{
Serial.println("Error");
}
delay(1000);
}

void setup()
{
Serial1.begin(9600);
Serial.begin(9600);
delay(1000);
connect_wifi("AT",1000);
connect_wifi("AT+CWMODE=3",1000);
connect_wifi("AT+CWQAP",1000);
connect_wifi("AT+RST",5000);
check4IP(5000);
if(!No_IP)
{
Serial.println("Connecting Wifi....");
connect_wifi("AT+CWJAP=\"MountPointTech\",\"MpTl2013\"",7000); //AT+CWJAP="wifi_username","wifi_password"
}
else
{
}
Serial.println("Wifi Connected");
get_ip();
delay(2000);
connect_wifi("AT+CIPMUX=1",100);
connect_wifi("AT+CIPSERVER=1,80",100);
Serial1.end();
Serial.println("Waiting For GPS");
Serial.println(" Signal ");
delay(2000);
gps.begin(9600);
get_gps();
show_coordinate();
gps.end();
Serial1.begin(9600);
delay(2000);
Serial.println("GPS is Ready");
delay(1000);
Serial.println("System Ready..");
}

void loop()
{
k=0;
Serial.println("Please Refresh Ur Page");

while(k<1000)
{
k++;
while(Serial1.available())
{
if(Serial1.find("0,CONNECT"))
{
Serial1.end();

gps.begin(9600);
get_gps();
gps.end();
Serial1.begin(9600);
Serial1.flush();
Serial.println("Start Printing");
Send();
show_coordinate();
Serial.println("Done Printing");
delay(5000);
//delay(1000);
k=1200;
break;
}
}
delay(1);
}
}

void gpsEvent()
{
gpsString="";
while(1)
{
while (gps.available()>0) //Serial incoming data from GPS
{
char inChar = (char)gps.read();
gpsString+= inChar; //store incoming data from GPS to temporary string str[]
i++;
if (i < 7)
{
if(gpsString[i-1] != test[i-1]) //check for right string
{
i=0;
gpsString="";
}
}
if(inChar=='\r')
{
if(i>65)
{
gps_status=1;
break;
}
else
{
i=0;
}
}
}
if(gps_status)
break;
}
}

void get_gps()
{
gps_status=0;
int x=0;
while(gps_status==0)
{
gpsEvent();
int str_lenth=i;
latitude="";
logitude="";
coordinate2dec();
i=0;x=0;
str_lenth=0;
}
}

void show_coordinate()
{

Serial.print("Latitude:");
Serial.println(latitude);
Serial.print("Longitude:");
Serial.println(logitude);
}

void coordinate2dec()
{

//j=0;
String lat_degree="";
for(i=18;i<20;i++) //extract latitude from string
lat_degree+=gpsString;

String lat_minut="";
for(i=20;i<28;i++)
lat_minut+=gpsString;

String long_degree="";
for(i=30;i<33;i++) //extract longitude from string
long_degree+=gpsString;

String long_minut="";
for(i=33;i<41;i++)
long_minut+=gpsString;

float minut= lat_minut.toFloat();
minut=minut/60;
float degree=lat_degree.toFloat();
latitude=degree+minut;

minut= long_minut.toFloat();
minut=minut/60;
degree=long_degree.toFloat();
logitude=degree+minut;
}

void Send()
{

webpage = "<h1>Welcome to MountPoint Technologies Pvt Ltd</h1><body bgcolor=f0f0f0>";
webpage+=name;
webpage+=date;
webpage+=number;
webpage+=cordinat;
webpage+="<p>Latitude:";
webpage+=latitude;
webpage+="</p>";
webpage+="<p>Longitude:";
webpage+=logitude;
webpage+="</p>";
webpage+= "<a href=\"http://maps.google.com/maps?&z=15&mrt=yp&t=k&q=";
webpage+=latitude;
webpage+='+'; //28.612953, 77.231545 //28.612953,77.2293563
webpage+=logitude;
webpage+="\">Click Here for google map </a>";
sendwebdata();
webpage="";

while(1)

{
Serial.println("AT+CIPCLOSE=0");
Serial1.println("AT+CIPCLOSE=0");
while(Serial1.available())
{
//Serial.print(Serial1.read());
if(Serial1.find("0,CLOSE"))
{
return;
}
}
delay(500);
i++;
if(i>5)
{
i=0;
}
if(i==0)
break;
}
}

void sendwebdata()
{
i=0;
while(1)
{
unsigned int l=webpage.length();
Serial1.print("AT+CIPSEND=0,");
Serial1.println(l+2);
Serial.println(l+2);
Serial.println(webpage);
Serial1.println(webpage);
while(Serial1.available())
{
if(Serial1.find("OK"))
{
return;
}
}
i++;
if(i>5)
i=0;
if(i==0)
break;
delay(200);
}
}

// end of code.
User avatar
By darrellg
#192665
Add this to the html output to auto-refresh the page every 5 seconds:
Code: Select all
<meta http-equiv="refresh" content="5" >
Change the "5" to the number of seconds to delay the refresh. If you want the data to update without a refresh, you're going to have to use AJAX or something similar, which is probably not practical with the hardware you are using.