Geolocation demo using Nokia LCD. See http://mbed.org/users/4180_1/notebook/geolocation-nokia-lcd-display/
Dependencies: NetServices mbed HTTPClient_ToBeRemoved
main.cpp
- Committer:
- 4180_1
- Date:
- 2012-05-25
- Revision:
- 0:019b7bf35f8c
File content as of revision 0:019b7bf35f8c:
#include "mbed.h" #include "EthernetNetIf.h" #include "HTTPClient.h" #include "NokiaLCD.h" //Geolocation using IP address - get web page with location data // displays location fields on LCD from web page ";....location text...;" // see http://mbed.org/users/4180_1/notebook/geolocation-nokia-lcd-display/ NokiaLCD lcd(p5, p7, p8, p9, NokiaLCD::LCD6610); // mosi, sclk, cs, rst, type EthernetNetIf eth; HTTPClient http; 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++) { if ((buffer[*j+i] == ';')||(buffer[*j+i] == '\0' )) { //semicolon is the string field delimiter string[i]=0; *j=*j+i+1; break; } else string[i]=buffer[*j+i]; } } int main() { char result [4]={0}; char ip [17]={0}; char country_abbr[10]={0}; char country[60]={0}; char region[40]={0}; char city[60]={0}; char zipcode[10]={0}; char latitude[10]={0}; char longitude[10]={0}; char timezone[7]={0}; char buffer[256]={0}; float flatitude=0.0; float flongitude=0.0; float ftimezone=0.0; int j=0; //Setup network - get IP address using DHCP lcd.cls(); lcd.locate(0,2); lcd.printf("Net setup"); lcd.locate(0,3); EthernetErr ethErr = eth.setup(); if (ethErr) { lcd.printf("Error %d", ethErr); return -1; } lcd.printf(" Net OK"); wait(.5); lcd.cls(); lcd.locate(0,2); lcd.printf("IP Address"); lcd.locate(0,3); lcd.printf("Geolocation API"); HTTPText txt; //iPinfoDB API - get web page with location data //Insert your free key from www.ipinfo.com for the API in the URL below HTTPResult r = http.get("http://api.ipinfodb.com/v3/ip-city/?key=<PUT_YOUR_API_KEY_HERE>", &txt); if (r==HTTP_OK) { //got web page text data OK strcpy(buffer,txt.gets()); wait(1); while (1) { j=0; //parse and display each of the API's location information strings on the LCD parse(buffer, &j, result); lcd.cls(); lcd.locate(0,2); lcd.printf("result: %s", result); if (result[0]!='O') { //needs valid key wait(1); lcd.cls(); lcd.locate(0,2); lcd.printf("Get Free API key"); lcd.printf("www.iPinfoDB.com"); return(-1); } wait(1); j++; parse(buffer, &j, ip); lcd.locate(0,2); lcd.printf("IP address:"); lcd.locate(0,3); lcd.printf(" %s", ip); parse(buffer, &j, country_abbr); lcd.locate(0,4); lcd.printf("Country code:"); lcd.locate(0,5); lcd.printf(" %s", country_abbr); parse(buffer, &j, country); lcd.locate(0,6); lcd.printf("Country:"); lcd.locate(0,7); lcd.printf(" %s", country); parse(buffer, &j, region); lcd.locate(0,8); lcd.printf("Region or State:"); lcd.locate(0,9); lcd.printf(" %s", region); parse(buffer, &j, city); lcd.locate(0,10); lcd.printf("City:"); lcd.locate(0,11); lcd.printf(" %s", city); parse(buffer, &j, zipcode); lcd.locate(0,12); lcd.printf("Zipcode:"); lcd.locate(0,13); lcd.printf(" %s", zipcode); wait(5); parse(buffer, &j, latitude); sscanf(latitude,"%f",&flatitude); lcd.cls(); lcd.locate(0,2); lcd.printf("Latitude:"); lcd.locate(0,3); lcd.printf(" %f", flatitude); parse(buffer, &j, longitude); sscanf(longitude,"%f",&flongitude); lcd.locate(0,4); lcd.printf("Longitude:"); lcd.locate(0,5); lcd.printf(" %f", flongitude); parse(buffer, &j, timezone); sscanf(timezone,"%f",&ftimezone); lcd.locate(0,6); lcd.printf("Timezone:"); lcd.locate(0,7); lcd.printf(" %f", ftimezone); wait(4); } } else { lcd.cls(); lcd.locate(0,2); lcd.printf("HTTP Error %d", r); return -1; } }