WizFi310 Geolocation_NTP library 2.0 version

Dependencies:   Adafruit_GFX HTTPClient NTPClient WizFi310Interface_Legacy mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "Adafruit_SSD1306.h"
00003 #include "WizFi310Interface.h"
00004 #include "NTPClient.h"
00005 #include "HTTPClient.h"
00006  
00007 
00008 #define SECURE WizFi310::SEC_AUTO
00009 #define SSID "wizms1"
00010 #define PASS "maker0701"
00011 
00012 
00013 #if defined(TARGET_WIZwiki_W7500)
00014 //    #define SDA                  PA_10
00015 //    #define SCL                  PA_9
00016     WizFi310Interface wizfi310(D1, D0, D7, D6, D8, NC, 115200);
00017     Serial pc(USBTX,USBRX);
00018 #endif
00019 
00020 
00021 // an SPI sub-class that provides a constructed default
00022 //class I2CPreInit : public I2C
00023 //{
00024 //public:
00025 //    I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
00026 //    {
00027 //        frequency(100000);
00028 //        start();
00029 //    };
00030 //};
00031 
00032 //I2CPreInit gI2C(SDA,SCL);
00033 //Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
00034 NTPClient ntpClient;
00035 HTTPClient httpClient;
00036 void parse(char buffer[], int *j, char *string); //FUNCTION TO PARSE HTTP GET DATA
00037 char httpGetData[1024]; //BUFFER TO HOLD DATA FROM HTTP GET REQUEST
00038 
00039 
00040 int main()
00041 {
00042     time_t ctTime; //system time structure
00043     char success[10]={0};  //success first
00044     char countryFull[20]={0}; //Full Country Name
00045     char countryAbrv[5]={0}; //Abbreviated Country Name or country Code
00046     char stateAbrv[5]={0}; //Abbreviated State or region code
00047     char stateFull[15]={0}; //Full State Name
00048     char city[15]={0}; //City Name
00049     char zip[6]={0}; //ZIP CODE
00050     char latitude[10]={0}; //latitude
00051     char longitude[10]={0}; //longitude
00052     char timeZone[30]={0}; //timeZone
00053     int j=0, returnCode;
00054 
00055     pc.baud(115200);
00056 //    gOled.begin();
00057 //    gOled.clearDisplay();
00058 
00059     wizfi310.init();
00060     returnCode = wizfi310.connect(SECURE, SSID, PASS);
00061 
00062     if ( returnCode == 0 )
00063     {
00064         printf(" - WiFi Ready\r\n");
00065         printf("IP Address is %s\r\n", wizfi310.getIPAddress());
00066     }
00067     else
00068     {
00069         printf(" - Could not initialize WiFi - ending\r\n");
00070         return 0;
00071     }
00072     
00073     //HANDLES THE HTTP GET REQUEST THE WAY THE FUNCTION IS CALLED HERE IS THE FOLLOWING
00074     // get(DOMAIN_NAME,BUFFER,TIMEOUT_VAL)
00075     //DOMAIN_NAME= domain name that get request is sent to
00076     //BUFFER= buffer to store data returned from the server
00077     //TIMEOUT_VAL= Time before the request times out
00078     HTTPResult r = httpClient.get("http://ip-api.com/csv",httpGetData,128); //GET GEOLOCATION DATA (CSV)
00079 
00080     if (r==HTTP_OK) { //IF THE DATA WAS RECIEVED
00081         j=0;
00082         //parse and display each of the API's location information strings on the LCD
00083         parse(httpGetData, &j, success); 
00084         parse(httpGetData,&j,countryFull);
00085         parse(httpGetData,&j,countryAbrv);
00086         parse(httpGetData,&j,stateAbrv);
00087         parse(httpGetData,&j,stateFull);
00088         parse(httpGetData,&j,city);
00089         parse(httpGetData,&j,zip);
00090         parse(httpGetData,&j,latitude);
00091         parse(httpGetData,&j,longitude);
00092         parse(httpGetData,&j,timeZone);
00093 //        gOled.printf("HTTP Data Received\r\n");
00094 //        gOled.display();
00095         printf("HTTP Data Received\r\n");
00096     } 
00097     else { //HTTP GET REQUEST ERRORED
00098 //        gOled.printf("HTTP Error %d\r\n", r);
00099 //        gOled.display();
00100         printf("HTTP Error %d\r\n", r);
00101         return -1;
00102     }
00103     printf("Reading Time...\r\n");
00104     char* domainName="kr.pool.ntp.org"; //SET TO DOMAIN NAME OF SERVER GETTING TIME FROM
00105     //GETS THE TIME FROM THE SERVER
00106     //setTime(DOMAIN_NAME,PORT_NUMBER,TIME_OUT)
00107     //DOMAIN_NAME= domain name
00108     //PORT NUMBER=port number (123 for NTP)
00109     //TIME_OUT= timeout value for request
00110     ntpClient.setTime(domainName,123,0x00005000);
00111     printf("Time Set\r\n");
00112     //Delay for human time to read LCD display
00113     wait(3.0);
00114 
00115     char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA
00116 //    gOled.printf("%s, %s %s, %s\r\n",city,stateAbrv,zip,countryAbrv); //PRINT CITY STATE AND ZIP INFORMATION AND COUNTRY
00117 //    gOled.printf("LAT:%s\r\nLONG:%s\r\n",latitude,longitude); //PRINT LATITUDE AND LONGITUDE 
00118 //    gOled.printf("Timezone:%s\r\n",timeZone); //PRINT TIMEZONE
00119 
00120 
00121     wizfi310.disconnect(); //DISCONNECT FROM THE NETWORK 
00122     while (1) {
00123         //ctTime = time(NULL)-(3600*4);  //TIME with offset for eastern time US
00124         ctTime = time(NULL)+(3600*9);  //TIME with offset for eastern time KR
00125         //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER
00126         strftime(buffer,80,"%a %b %d\r\n%T %p %z\r\n %Z\r\n",localtime(&ctTime));
00127 //        gOled.printf("Univ Time Clock\r\n%s\r\n", buffer);
00128 //        gOled.display();
00129 //        gOled.setTextCursor(0,40);
00130         printf("%s, %s %s, %s\r\n",city,stateAbrv,zip,countryAbrv); //PRINT CITY STATE AND ZIP INFORMATION AND COUNTRY
00131         printf("LAT:%s\r\nLONG:%s\r\n",latitude,longitude); //PRINT LATITUDE AND LONGITUDE 
00132         printf("Timezone:%s\r\n",timeZone); //PRINT TIMEZONE
00133         printf("Univ Time Clock\r\n%s\r\n", buffer);
00134         wait(1);
00135     }      
00136 }
00137 
00138 //SET FOR CSV FORMAT: NEEDS TO BE EDITED IF DIFFERENT FORMAT
00139 void parse(char buffer[], int *j, char *string) {
00140 //extracts next location string data item from buffer
00141     int i=0;
00142     for (i=0; i<=strlen(buffer); i++) {  //TOTAL SIZE OF RETURNED DATA
00143         if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string
00144             //comma is the string field delimiter
00145             string[i]=0; //SETS END OF SRTRING TO 0
00146             *j=*j+i+1; //UPDATES to 1 after comma seperated value
00147             break;
00148         } else string[i]=buffer[*j+i]; //Keep adding to the string
00149     }
00150 }