WizFi310 Geolocation_NTP library 2.0 version
Dependencies: Adafruit_GFX HTTPClient NTPClient WizFi310Interface_Legacy mbed
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 }
Generated on Sat Jul 16 2022 14:57:27 by 1.7.2