IOP / Mbed 2 deprecated HTTPWebClient-WIZwiki-7500

Dependencies:   Adafruit_GFX WIZnetInterface mbed

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers main.cpp Source File

main.cpp

00001 #include "mbed.h"
00002 #include "EthernetInterface.h"
00003 #include "Adafruit_SSD1306.h"
00004    
00005 // W7500 onboard LED & Init
00006 DigitalOut gled(LED2,0);
00007 
00008 
00009 // I2C Class
00010 I2C i2c(PA_10,PA_9);
00011 
00012 // OLED Class   
00013 Adafruit_SSD1306_I2c gOled(i2c,NC,0x78,64,128);
00014 
00015 // Declare Ethernet Class
00016 EthernetInterface eth;
00017 
00018 // Declare TCP Connection Class
00019 TCPSocketConnection sock;
00020 
00021 
00022 
00023 int main() {
00024       
00025     int phy_link;
00026     printf("Wait a second...\r\n");
00027     
00028     //--------- Have to modify the mac address-------------
00029     uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0x25};   
00030     
00031     eth.init(mac_addr);     //Use DHCP
00032         
00033     // phy link 
00034     do{
00035         phy_link = eth.ethernet_link();
00036         printf("...");
00037         wait(2);
00038     }while(!phy_link);
00039     printf("\r\n");
00040         
00041     eth.connect();
00042          
00043     printf("IP Address is %s\r\n\r\n", eth.getIPAddress());
00044     printf("MASK Address is %s\r\n\r\n", eth.getNetworkMask());
00045     printf("GATEWAY Address is %s\r\n\r\n", eth.getGateway());
00046     printf("MAC Address is %s\r\n\r\n", eth.getMACAddress());
00047     
00048     while(1){
00049         // TCP socket connect to openweather server 
00050         //TCPSocketConnection sock;
00051         char http_addr[]="api.openweathermap.org";
00052         int port=80;
00053         
00054         //connect
00055         ///////////////////////////////////////////////////////////
00056         sock.connect(http_addr, port);
00057         ////////////////////////////////////////////////////////////
00058         
00059         // GET method, to request weather forecast  
00060         char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n";
00061         
00062         
00063         //send data
00064         ///////////////////////////////////////////////////////
00065         sock.send(http_cmd, sizeof(http_cmd)-1);
00066         ///////////////////////////////////////////////////////
00067         
00068         // get data into buffer
00069         char buffer[2048];
00070         int ret;
00071         while (true) {
00072             // break the while(), when don't received tha data
00073             // save the data to buffer
00074             // save the return value to ret
00075             //receive data
00076             //////////////////////////////////////////////////////
00077             ret = sock.receive(buffer, sizeof(buffer)-1);
00078             if (ret <= 0)
00079                 break;
00080             ////////////////////////////////////////////////////
00081             buffer[ret] = '\0';
00082             printf("Received %d chars from server: %s\n", ret, buffer);     
00083         }
00084         printf("\r\n\r\n");
00085         
00086         // parsing current date, weather, city, tempurature 
00087         char *date;
00088         char *weather;
00089         char *city;
00090         char *temper;
00091         
00092         char cur_date[17] = {0};
00093         char weather_con[15] = {0};
00094         char city_name[10] = {0};
00095         char temper_data[3] = {0};
00096     
00097         int temp;
00098         int num100, num10, num1;
00099         
00100         //parding date
00101         date = strstr(buffer, "Date");
00102         for(int x=0;x<17;x++){
00103             cur_date[x] = date[x+6];
00104         }
00105             
00106         // parsing weather condition
00107         weather = strstr(buffer, "main");
00108         for(int i=0; i<15;i++){
00109             weather_con[i] = weather[i+7];
00110             if(weather_con[i] == 34){
00111                 weather_con[i] = 0;
00112                 break;
00113             }
00114         }
00115         
00116         // parsing city name
00117         city = strstr(buffer, "name");
00118         for(int j=0; j<10;j++){
00119             city_name[j] = city[j+7];
00120             if(city_name[j] == 34){
00121                 city_name[j] = 0;
00122                 break;
00123             }
00124         }
00125      
00126         //parsing current tempurature
00127         temper = strstr(buffer, "temp");
00128         for(int k=0; k<3;k++){
00129             temper_data[k] = temper[k+6];
00130         }
00131            
00132         //kelvin to celius converter
00133         num100 = temper_data[0]- 48;
00134         num10 = temper_data[1] - 48;
00135         num1 = temper_data[2]- 48;
00136         temp = (num100*100 + num10*10 + num1) - 273;
00137         
00138         // Debug message
00139         printf("city name   :  %s\r\n",  city_name);
00140         printf("weather     :  %s\r\n",  weather_con);
00141         printf("temperature :  %d\r\n\r\n",  temp);
00142         
00143         // OLED Display
00144         gOled.begin();
00145         gOled.clearDisplay();
00146         gOled.printf("%s\n\n", cur_date);
00147         gOled.printf("City    : %s\n", city_name);
00148         gOled.printf("Weather : %s\n", weather_con);
00149         gOled.printf("Temper  : %d\n", temp);
00150         gOled.display();
00151         gOled.setTextCursor(0,0);
00152         
00153 
00154     
00155         //close 
00156         //////////////////////////////////////////////////
00157         sock.close();
00158         eth.disconnect();
00159         //////////////////////////////////////////////////
00160         /* 
00161          *    everytime in delay, request weather forecast 
00162          */
00163         wait(20.0);
00164     
00165    };
00166 
00167 }