![](/media/cache/group/WIZnet_logo_001.jpg.50x50_q85.jpg)
WizFi310 Geolocation_NTP library 2.0 version
Dependencies: Adafruit_GFX HTTPClient NTPClient WizFi310Interface_Legacy mbed
Prerequisite
This example shows that Wizwiki-W7500 and WizFi310 gets current geolocation/time information.
To implement this function, you need a Platform board and Wi-Fi board. Below are what we used.
- WIZwiki-W7500 from WIZnet (Platform board)
- WizFi310 from WIZnet (Wi-Fi board)
WIZwiki-W7500 Pin map
- D0 is for RXD, D1 is for TXD
- D6 is for CTS, D7 is for RTS
- D9 is for RESET
WizFi310 Pin map
- J1 is for RXD, J3 is for TXD
- SW6-1 is connected to D6 for RTS, SW6-2 is connected to D7 for CTS
- SW5-3 is connected to D9 for RESET
Software
Connect to Wi-Fi
returnCode = wizfi310.connect(SECURE, SSID, PASS);
Get and Parse a geolocation information
HTTPResult r = httpClient.get("http://ip-api.com/csv",httpGetData,128); //GET GEOLOCATION DATA (CSV) if (r==HTTP_OK) { //IF THE DATA WAS RECIEVED j=0; //parse and display each of the API's location information strings on the LCD parse(httpGetData, &j, success); parse(httpGetData,&j,countryFull); parse(httpGetData,&j,countryAbrv); parse(httpGetData,&j,stateAbrv); parse(httpGetData,&j,stateFull); parse(httpGetData,&j,city); parse(httpGetData,&j,zip); parse(httpGetData,&j,latitude); parse(httpGetData,&j,longitude); parse(httpGetData,&j,timeZone); printf("HTTP Data Received\r\n"); }
Set time
ntpClient.setTime(domainName,123,0x00005000);
Revision 0:0b8f5c3e549f, committed 2017-04-19
- Comitter:
- stkim92
- Date:
- Wed Apr 19 08:15:13 2017 +0000
- Commit message:
- WizFi310 Geolocation_NTP library 2.0 version
Changed in this revision
diff -r 000000000000 -r 0b8f5c3e549f Adafruit_GFX.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/Adafruit_GFX.lib Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/kaizen/code/Adafruit_GFX/#3112550cc6a3
diff -r 000000000000 -r 0b8f5c3e549f HTTPClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPClient.lib Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/donatien/code/HTTPClient/#277279a1891e
diff -r 000000000000 -r 0b8f5c3e549f NTPClient.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/NTPClient.lib Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,1 @@ +http://developer.mbed.org/users/donatien/code/NTPClient/#881559865a93
diff -r 000000000000 -r 0b8f5c3e549f WizFi310Interface_Legacy.lib --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/WizFi310Interface_Legacy.lib Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/teams/WIZnet/code/WizFi310Interface_Legacy/#774ff1e8b26b
diff -r 000000000000 -r 0b8f5c3e549f main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,150 @@ +#include "mbed.h" +#include "Adafruit_SSD1306.h" +#include "WizFi310Interface.h" +#include "NTPClient.h" +#include "HTTPClient.h" + + +#define SECURE WizFi310::SEC_AUTO +#define SSID "wizms1" +#define PASS "maker0701" + + +#if defined(TARGET_WIZwiki_W7500) +// #define SDA PA_10 +// #define SCL PA_9 + WizFi310Interface wizfi310(D1, D0, D7, D6, D8, NC, 115200); + Serial pc(USBTX,USBRX); +#endif + + +// an SPI sub-class that provides a constructed default +//class I2CPreInit : public I2C +//{ +//public: +// I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl) +// { +// frequency(100000); +// start(); +// }; +//}; + +//I2CPreInit gI2C(SDA,SCL); +//Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128); +NTPClient ntpClient; +HTTPClient httpClient; +void parse(char buffer[], int *j, char *string); //FUNCTION TO PARSE HTTP GET DATA +char httpGetData[1024]; //BUFFER TO HOLD DATA FROM HTTP GET REQUEST + + +int main() +{ + time_t ctTime; //system time structure + char success[10]={0}; //success first + char countryFull[20]={0}; //Full Country Name + char countryAbrv[5]={0}; //Abbreviated Country Name or country Code + char stateAbrv[5]={0}; //Abbreviated State or region code + char stateFull[15]={0}; //Full State Name + char city[15]={0}; //City Name + char zip[6]={0}; //ZIP CODE + char latitude[10]={0}; //latitude + char longitude[10]={0}; //longitude + char timeZone[30]={0}; //timeZone + int j=0, returnCode; + + pc.baud(115200); +// gOled.begin(); +// gOled.clearDisplay(); + + wizfi310.init(); + returnCode = wizfi310.connect(SECURE, SSID, PASS); + + if ( returnCode == 0 ) + { + printf(" - WiFi Ready\r\n"); + printf("IP Address is %s\r\n", wizfi310.getIPAddress()); + } + else + { + printf(" - Could not initialize WiFi - ending\r\n"); + return 0; + } + + //HANDLES THE HTTP GET REQUEST THE WAY THE FUNCTION IS CALLED HERE IS THE FOLLOWING + // get(DOMAIN_NAME,BUFFER,TIMEOUT_VAL) + //DOMAIN_NAME= domain name that get request is sent to + //BUFFER= buffer to store data returned from the server + //TIMEOUT_VAL= Time before the request times out + HTTPResult r = httpClient.get("http://ip-api.com/csv",httpGetData,128); //GET GEOLOCATION DATA (CSV) + + if (r==HTTP_OK) { //IF THE DATA WAS RECIEVED + j=0; + //parse and display each of the API's location information strings on the LCD + parse(httpGetData, &j, success); + parse(httpGetData,&j,countryFull); + parse(httpGetData,&j,countryAbrv); + parse(httpGetData,&j,stateAbrv); + parse(httpGetData,&j,stateFull); + parse(httpGetData,&j,city); + parse(httpGetData,&j,zip); + parse(httpGetData,&j,latitude); + parse(httpGetData,&j,longitude); + parse(httpGetData,&j,timeZone); +// gOled.printf("HTTP Data Received\r\n"); +// gOled.display(); + printf("HTTP Data Received\r\n"); + } + else { //HTTP GET REQUEST ERRORED +// gOled.printf("HTTP Error %d\r\n", r); +// gOled.display(); + printf("HTTP Error %d\r\n", r); + return -1; + } + printf("Reading Time...\r\n"); + char* domainName="kr.pool.ntp.org"; //SET TO DOMAIN NAME OF SERVER GETTING TIME FROM + //GETS THE TIME FROM THE SERVER + //setTime(DOMAIN_NAME,PORT_NUMBER,TIME_OUT) + //DOMAIN_NAME= domain name + //PORT NUMBER=port number (123 for NTP) + //TIME_OUT= timeout value for request + ntpClient.setTime(domainName,123,0x00005000); + printf("Time Set\r\n"); + //Delay for human time to read LCD display + wait(3.0); + + char buffer[80]; //BUFFER TO HOLD FORMATTED TIME DATA +// gOled.printf("%s, %s %s, %s\r\n",city,stateAbrv,zip,countryAbrv); //PRINT CITY STATE AND ZIP INFORMATION AND COUNTRY +// gOled.printf("LAT:%s\r\nLONG:%s\r\n",latitude,longitude); //PRINT LATITUDE AND LONGITUDE +// gOled.printf("Timezone:%s\r\n",timeZone); //PRINT TIMEZONE + + + wizfi310.disconnect(); //DISCONNECT FROM THE NETWORK + while (1) { + //ctTime = time(NULL)-(3600*4); //TIME with offset for eastern time US + ctTime = time(NULL)+(3600*9); //TIME with offset for eastern time KR + //FORMAT TIME FOR DISPLAY AND STORE FORMATTED RESULT IN BUFFER + strftime(buffer,80,"%a %b %d\r\n%T %p %z\r\n %Z\r\n",localtime(&ctTime)); +// gOled.printf("Univ Time Clock\r\n%s\r\n", buffer); +// gOled.display(); +// gOled.setTextCursor(0,40); + printf("%s, %s %s, %s\r\n",city,stateAbrv,zip,countryAbrv); //PRINT CITY STATE AND ZIP INFORMATION AND COUNTRY + printf("LAT:%s\r\nLONG:%s\r\n",latitude,longitude); //PRINT LATITUDE AND LONGITUDE + printf("Timezone:%s\r\n",timeZone); //PRINT TIMEZONE + printf("Univ Time Clock\r\n%s\r\n", buffer); + wait(1); + } +} + +//SET FOR CSV FORMAT: NEEDS TO BE EDITED IF DIFFERENT FORMAT +void parse(char buffer[], int *j, char *string) { +//extracts next location string data item from buffer + int i=0; + for (i=0; i<=strlen(buffer); i++) { //TOTAL SIZE OF RETURNED DATA + if ((buffer[*j+i] == ',')||(buffer[*j+i] == '\0' )) { //IF comma or end of string + //comma is the string field delimiter + string[i]=0; //SETS END OF SRTRING TO 0 + *j=*j+i+1; //UPDATES to 1 after comma seperated value + break; + } else string[i]=buffer[*j+i]; //Keep adding to the string + } +}
diff -r 000000000000 -r 0b8f5c3e549f mbed.bld --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Wed Apr 19 08:15:13 2017 +0000 @@ -0,0 +1,1 @@ +https://mbed.org/users/mbed_official/code/mbed/builds/97feb9bacc10 \ No newline at end of file