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

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

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);

Files at this revision

API Documentation at this revision

Comitter:
stkim92
Date:
Wed Apr 19 08:15:13 2017 +0000
Commit message:
WizFi310 Geolocation_NTP library 2.0 version

Changed in this revision

Adafruit_GFX.lib Show annotated file Show diff for this revision Revisions of this file
HTTPClient.lib Show annotated file Show diff for this revision Revisions of this file
NTPClient.lib Show annotated file Show diff for this revision Revisions of this file
WizFi310Interface_Legacy.lib Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
mbed.bld Show annotated file Show diff for this revision Revisions of this file
--- /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
--- /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
--- /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
--- /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
--- /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
+    }
+}
--- /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