weather forecast WIZwiki-W7500 for academy
Dependencies: Adafruit_GFX WIZnetInterface mbed
Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by
Diff: main.cpp
- Revision:
- 0:5d0d5244d683
- Child:
- 2:06e2b95bd224
diff -r 000000000000 -r 5d0d5244d683 main.cpp --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/main.cpp Thu Sep 03 01:11:42 2015 +0000 @@ -0,0 +1,271 @@ + +#include "mbed.h" +#include "EthernetInterface.h" +#include "Adafruit_SSD1306.h" + +/* + * Sheild LED + */ +// DigitalOut rled(D9); +// DigitalOut gled(D10); +// DigitalOut bled(D11); + +/* + * W7500 onboard LED + */ + DigitalOut rled(LED1); + DigitalOut gled(LED2); + DigitalOut bled(LED3); + + +class I2CPreInit : public I2C +{ +public: + I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl) + { + frequency(100000); + start(); + }; +}; + +I2CPreInit gI2C(PA_10,PA_9); + +/* + * set OLED + */ +Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128); + + +/* + * LED desplay functions + */ +void clean(){ + rled = 0; + gled = 0; + bled = 1; +} +void clouds(){ + rled = 0; + gled = 0; + bled = 0; +} +void thunderstorm(){ + while(1){ + rled = 0; + gled = 0; + bled = 0; + wait(0.5); + rled = 0; + gled = 0; + bled = 0; + wait(0.5); + }; +} +void rain(){ + rled = 1; + gled = 1; + bled = 0; +} +void mist(){ + while(1){ + rled = 1; + gled = 1; + bled = 0; + wait(0.5); + rled = 1; + gled = 1; + bled = 1; + wait(0.5); + }; +} +void haze(){ + rled = 0; + gled = 1; + bled = 0; +} +void fog(){ + while(1){ + rled = 1; + gled = 0; + bled = 0; + wait(1.0); + rled = 1; + gled = 1; + bled = 0; + wait(1.0); + }; +} +void error(){ + rled = 1; + gled = 1; + bled = 1; +} + +/* + * main + */ +int main() { + + int phy_link; + printf("Wait a second...\r\n"); + uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0x03, 0x04, 0x02}; + + EthernetInterface eth; + + eth.init(mac_addr); //Use DHCP + + while(1){ + + eth.connect(); + + /* + * phy link + */ + do{ + phy_link = eth.ethernet_link(); + printf("..."); + wait(2); + }while(!phy_link); + printf("\r\n"); + + printf("IP Address is %s\r\n\r\n", eth.getIPAddress()); + + /* + * TCP socket connect to openweather server + */ + TCPSocketConnection sock; + sock.connect("api.openweathermap.org", 80); + + + /* + * GET method, to request weather forecast + */ + char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr HTTP/1.0\n\n"; + //char http_cmd[] = "GET /data/2.5/weather?q=London,uk HTTP/1.0\n\n"; + //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de HTTP/1.0\n\n"; + sock.send_all(http_cmd, sizeof(http_cmd)-1); + + /* + * get data into buffer + */ + char buffer[1024]; + int ret; + while (true) { + ret = sock.receive(buffer, sizeof(buffer)-1); + if (ret <= 0) + break; + buffer[ret] = '\0'; + printf("Received %d chars from server: %s\n", ret, buffer); + } + printf("\r\n\r\n"); + + /* + * parsing current date, weather, city, tempurature + */ + char *date; + char *weather; + char *city; + char *temper; + + char cur_date[17] = {0}; + char weather_con[15] = {0}; + char city_name[10] = {0}; + char temper_data[3] = {0}; + + int temp; + int num100, num10, num1; + + /* + * parding date + */ + date = strstr(buffer, "Date"); + for(int x=0;x<17;x++){ + cur_date[x] = date[x+6]; + } + + /* + * parsing weather condition + */ + weather = strstr(buffer, "main"); + for(int i=0; i<15;i++){ + weather_con[i] = weather[i+7]; + if(weather_con[i] == 34){ + weather_con[i] = 0; + break; + } + } + + /* + * parsing city name + */ + city = strstr(buffer, "name"); + for(int j=0; j<10;j++){ + city_name[j] = city[j+7]; + if(city_name[j] == 34){ + city_name[j] = 0; + break; + } + } + + /* + * parsing current tempurature + */ + temper = strstr(buffer, "temp"); + for(int k=0; k<3;k++){ + temper_data[k] = temper[k+6]; + } + + /* + * kelvin to celius converter + */ + num100 = temper_data[0] - 48 - 2; + num10 = temper_data[1] - 48 - 7; + num1 = temper_data[2] - 48 - 3; + + temp = num100*100 + num10*10 + num1; + + /* + * printf + */ + printf("city name : %s\r\n", city_name); + printf("weather : %s\r\n", weather_con); + printf("temperature : %d\r\n\r\n", temp); + + /* + * OLED Display + */ + gOled.begin(); + gOled.clearDisplay(); + + gOled.printf("%s\n", cur_date); + gOled.printf("City : %s\n", city_name); + gOled.printf("Weather : %s\n", weather_con); + gOled.printf("Temper : %d\n", temp); + gOled.display(); + gOled.setTextCursor(0,0); + + /* + * LED display rely on weather condition + */ + if(strcmp(weather_con,"Clouds")==0) clouds(); + else if(strcmp(weather_con,"Rain")==0) rain(); + else if(strcmp(weather_con,"Thunderstorm")==0) thunderstorm(); + else if(strcmp(weather_con,"Clean")==0) clean(); + else if(strcmp(weather_con,"Mist")==0) mist(); + else if(strcmp(weather_con,"Haze")==0) haze(); + else if(strcmp(weather_con,"Fog")==0) fog(); + else error(); + + + sock.close(); + + eth.disconnect(); + + /* + * everytime in delay, request weather forecast + */ + wait(60.0); + + }; + +} \ No newline at end of file