weather forecast WIZwiki-W7500 for academy

Dependencies:   Adafruit_GFX WIZnetInterface mbed

Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by Lawrence Lee

Committer:
jcm931213
Date:
Thu Jun 15 05:06:26 2017 +0000
Revision:
17:bf1228469a6c
Parent:
16:60040aaa87df
revert

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joon874 0:5d0d5244d683 1 #include "mbed.h"
joon874 0:5d0d5244d683 2 #include "EthernetInterface.h"
joon874 0:5d0d5244d683 3 #include "Adafruit_SSD1306.h"
joon874 11:d6285226f186 4
joon874 11:d6285226f186 5 // W7500 onboard LED & Init
jcm931213 17:bf1228469a6c 6 DigitalOut rled(LED1,1);
joon874 11:d6285226f186 7 DigitalOut gled(LED2,0);
jcm931213 17:bf1228469a6c 8 DigitalOut bled(LED3,1);
joon874 0:5d0d5244d683 9
joon874 11:d6285226f186 10 // I2C Class
joon874 11:d6285226f186 11 I2C i2c(PA_10,PA_9);
joon874 11:d6285226f186 12
joon874 11:d6285226f186 13 // OLED Class
joon874 11:d6285226f186 14 Adafruit_SSD1306_I2c gOled(i2c,NC,0x78,64,128);
joon874 11:d6285226f186 15
joon874 11:d6285226f186 16 // Declare Ethernet Class
joon874 11:d6285226f186 17 EthernetInterface eth;
joon874 11:d6285226f186 18
joon874 11:d6285226f186 19 // Declare TCP Connection Class
joon874 11:d6285226f186 20 TCPSocketConnection sock;
joon874 0:5d0d5244d683 21
joon874 0:5d0d5244d683 22
jcm931213 17:bf1228469a6c 23 // LED desplay functions
jcm931213 17:bf1228469a6c 24 void clean(){
jcm931213 17:bf1228469a6c 25 rled = 0; gled = 0; bled = 0;
jcm931213 17:bf1228469a6c 26 }
jcm931213 17:bf1228469a6c 27 void clouds(){
jcm931213 17:bf1228469a6c 28 rled = 1; gled = 1; bled = 1;
jcm931213 17:bf1228469a6c 29 }
jcm931213 17:bf1228469a6c 30 void thunderstorm(){
jcm931213 17:bf1228469a6c 31 while(1){
jcm931213 17:bf1228469a6c 32 rled = 0; gled = 0; bled = 0;
jcm931213 17:bf1228469a6c 33 wait(0.5);
jcm931213 17:bf1228469a6c 34 rled = 1; gled = 1; bled = 1;
jcm931213 17:bf1228469a6c 35 wait(0.5);
jcm931213 17:bf1228469a6c 36 };
jcm931213 17:bf1228469a6c 37 }
jcm931213 17:bf1228469a6c 38 void rain(){
jcm931213 17:bf1228469a6c 39 rled = 1; gled = 1; bled = 0;
jcm931213 17:bf1228469a6c 40 }
jcm931213 17:bf1228469a6c 41 void mist(){
jcm931213 17:bf1228469a6c 42 while(1){
jcm931213 17:bf1228469a6c 43 rled = 1; gled = 1; bled = 0;
jcm931213 17:bf1228469a6c 44 wait(0.5);
jcm931213 17:bf1228469a6c 45 rled = 1; gled = 1; bled = 1;
jcm931213 17:bf1228469a6c 46 wait(0.5);
jcm931213 17:bf1228469a6c 47 };
jcm931213 17:bf1228469a6c 48 }
jcm931213 17:bf1228469a6c 49 void haze(){
jcm931213 17:bf1228469a6c 50 rled = 0; gled = 1; bled = 0;
jcm931213 17:bf1228469a6c 51 }
jcm931213 17:bf1228469a6c 52 void fog(){
jcm931213 17:bf1228469a6c 53 while(1){
jcm931213 17:bf1228469a6c 54 rled = 1; gled = 0; bled = 0;
jcm931213 17:bf1228469a6c 55 wait(1.0);
jcm931213 17:bf1228469a6c 56 rled = 1; gled = 1; bled = 0;
jcm931213 17:bf1228469a6c 57 wait(1.0);
jcm931213 17:bf1228469a6c 58 };
jcm931213 17:bf1228469a6c 59 }
jcm931213 17:bf1228469a6c 60 void error(){
jcm931213 17:bf1228469a6c 61 rled = 1; gled = 1; bled = 1;
jcm931213 17:bf1228469a6c 62 }
jcm931213 17:bf1228469a6c 63
joon874 11:d6285226f186 64
joon874 0:5d0d5244d683 65 int main() {
joon874 11:d6285226f186 66
joon874 0:5d0d5244d683 67 int phy_link;
joon874 0:5d0d5244d683 68 printf("Wait a second...\r\n");
joon874 0:5d0d5244d683 69
joon874 11:d6285226f186 70 //--------- Have to modify the mac address-------------
joon874 11:d6285226f186 71 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0x25};
joon874 11:d6285226f186 72
joon874 11:d6285226f186 73 eth.init(mac_addr); //Use DHCP
joon874 0:5d0d5244d683 74
joon874 0:5d0d5244d683 75 while(1){
jcm931213 17:bf1228469a6c 76
jcm931213 17:bf1228469a6c 77 // phy link
jcm931213 17:bf1228469a6c 78 do{
jcm931213 17:bf1228469a6c 79 phy_link = eth.ethernet_link();
jcm931213 17:bf1228469a6c 80 printf("...");
jcm931213 17:bf1228469a6c 81 wait(2);
jcm931213 17:bf1228469a6c 82 }while(!phy_link);
jcm931213 17:bf1228469a6c 83 printf("\r\n");
jcm931213 17:bf1228469a6c 84
jcm931213 17:bf1228469a6c 85 eth.connect();
jcm931213 17:bf1228469a6c 86
jcm931213 17:bf1228469a6c 87 printf("IP Address is %s\r\n\r\n", eth.getIPAddress());
jcm931213 17:bf1228469a6c 88 printf("MASK Address is %s\r\n\r\n", eth.getNetworkMask());
jcm931213 17:bf1228469a6c 89 printf("GATEWAY Address is %s\r\n\r\n", eth.getGateway());
jcm931213 17:bf1228469a6c 90 printf("MAC Address is %s\r\n\r\n", eth.getMACAddress());
jcm931213 17:bf1228469a6c 91
joon874 11:d6285226f186 92 // TCP socket connect to openweather server
joon874 11:d6285226f186 93 //TCPSocketConnection sock;
jcm931213 17:bf1228469a6c 94 sock.connect("api.openweathermap.org", 80);
joon874 11:d6285226f186 95
joon874 11:d6285226f186 96
joon874 11:d6285226f186 97 // GET method, to request weather forecast
jcm931213 17:bf1228469a6c 98 //char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n";
joon874 11:d6285226f186 99 char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n";
jcm931213 17:bf1228469a6c 100 //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n";
joon874 11:d6285226f186 101
jcm931213 17:bf1228469a6c 102 sock.send_all(http_cmd, sizeof(http_cmd)-1);
joon874 11:d6285226f186 103
joon874 11:d6285226f186 104 // get data into buffer
joon874 11:d6285226f186 105 char buffer[2048];
joon874 11:d6285226f186 106 int ret;
joon874 11:d6285226f186 107 while (true) {
jcm931213 17:bf1228469a6c 108 ret = sock.receive(buffer, sizeof(buffer)-1);
jcm931213 17:bf1228469a6c 109 if (ret <= 0)
jcm931213 17:bf1228469a6c 110 break;
joon874 11:d6285226f186 111 buffer[ret] = '\0';
joon874 11:d6285226f186 112 printf("Received %d chars from server: %s\n", ret, buffer);
joon874 11:d6285226f186 113 }
joon874 11:d6285226f186 114 printf("\r\n\r\n");
joon874 11:d6285226f186 115
joon874 11:d6285226f186 116 // parsing current date, weather, city, tempurature
joon874 11:d6285226f186 117 char *date;
joon874 11:d6285226f186 118 char *weather;
joon874 11:d6285226f186 119 char *city;
joon874 11:d6285226f186 120 char *temper;
joon874 11:d6285226f186 121
joon874 11:d6285226f186 122 char cur_date[17] = {0};
joon874 11:d6285226f186 123 char weather_con[15] = {0};
joon874 11:d6285226f186 124 char city_name[10] = {0};
joon874 11:d6285226f186 125 char temper_data[3] = {0};
joon874 0:5d0d5244d683 126
joon874 11:d6285226f186 127 int temp;
joon874 11:d6285226f186 128 int num100, num10, num1;
joon874 11:d6285226f186 129
joon874 11:d6285226f186 130 //parding date
joon874 11:d6285226f186 131 date = strstr(buffer, "Date");
joon874 11:d6285226f186 132 for(int x=0;x<17;x++){
joon874 11:d6285226f186 133 cur_date[x] = date[x+6];
joon874 11:d6285226f186 134 }
joon874 11:d6285226f186 135
joon874 11:d6285226f186 136 // parsing weather condition
joon874 11:d6285226f186 137 weather = strstr(buffer, "main");
joon874 11:d6285226f186 138 for(int i=0; i<15;i++){
joon874 11:d6285226f186 139 weather_con[i] = weather[i+7];
joon874 11:d6285226f186 140 if(weather_con[i] == 34){
joon874 11:d6285226f186 141 weather_con[i] = 0;
joon874 11:d6285226f186 142 break;
joon874 11:d6285226f186 143 }
joon874 11:d6285226f186 144 }
joon874 11:d6285226f186 145
joon874 11:d6285226f186 146 // parsing city name
joon874 11:d6285226f186 147 city = strstr(buffer, "name");
joon874 11:d6285226f186 148 for(int j=0; j<10;j++){
joon874 11:d6285226f186 149 city_name[j] = city[j+7];
joon874 11:d6285226f186 150 if(city_name[j] == 34){
joon874 11:d6285226f186 151 city_name[j] = 0;
joon874 11:d6285226f186 152 break;
joon874 11:d6285226f186 153 }
joon874 11:d6285226f186 154 }
joon874 0:5d0d5244d683 155
joon874 11:d6285226f186 156 //parsing current tempurature
joon874 11:d6285226f186 157 temper = strstr(buffer, "temp");
joon874 11:d6285226f186 158 for(int k=0; k<3;k++){
joon874 11:d6285226f186 159 temper_data[k] = temper[k+6];
joon874 11:d6285226f186 160 }
joon874 11:d6285226f186 161
joon874 11:d6285226f186 162 //kelvin to celius converter
joon874 11:d6285226f186 163 num100 = temper_data[0]- 48;
joon874 11:d6285226f186 164 num10 = temper_data[1] - 48;
joon874 11:d6285226f186 165 num1 = temper_data[2]- 48;
joon874 11:d6285226f186 166 temp = (num100*100 + num10*10 + num1) - 273;
joon874 11:d6285226f186 167
joon874 11:d6285226f186 168 // Debug message
joon874 11:d6285226f186 169 printf("city name : %s\r\n", city_name);
joon874 11:d6285226f186 170 printf("weather : %s\r\n", weather_con);
joon874 11:d6285226f186 171 printf("temperature : %d\r\n\r\n", temp);
joon874 11:d6285226f186 172
joon874 11:d6285226f186 173 // OLED Display
joon874 11:d6285226f186 174 gOled.begin();
joon874 11:d6285226f186 175 gOled.clearDisplay();
joon874 11:d6285226f186 176 gOled.printf("%s\n\n", cur_date);
joon874 11:d6285226f186 177 gOled.printf("City : %s\n", city_name);
joon874 11:d6285226f186 178 gOled.printf("Weather : %s\n", weather_con);
joon874 11:d6285226f186 179 gOled.printf("Temper : %d\n", temp);
joon874 11:d6285226f186 180 gOled.display();
joon874 11:d6285226f186 181 gOled.setTextCursor(0,0);
joon874 11:d6285226f186 182
jcm931213 17:bf1228469a6c 183 //LED display rely on weather condition
jcm931213 17:bf1228469a6c 184 if(strcmp(weather_con,"Clouds")==0) clouds();
jcm931213 17:bf1228469a6c 185 else if(strcmp(weather_con,"Rain")==0) rain();
jcm931213 17:bf1228469a6c 186 else if(strcmp(weather_con,"Thunderstorm")==0) thunderstorm();
jcm931213 17:bf1228469a6c 187 else if(strcmp(weather_con,"Clean")==0) clean();
jcm931213 17:bf1228469a6c 188 else if(strcmp(weather_con,"Mist")==0) mist();
jcm931213 17:bf1228469a6c 189 else if(strcmp(weather_con,"Haze")==0) haze();
jcm931213 17:bf1228469a6c 190 else if(strcmp(weather_con,"Fog")==0) fog();
jcm931213 17:bf1228469a6c 191 else error();
joon874 0:5d0d5244d683 192
jcm931213 17:bf1228469a6c 193
jcm931213 17:bf1228469a6c 194 //Disconnection
jcm931213 17:bf1228469a6c 195 sock.close();
jcm931213 17:bf1228469a6c 196 eth.disconnect();
joon874 0:5d0d5244d683 197
joon874 11:d6285226f186 198 /*
joon874 11:d6285226f186 199 * everytime in delay, request weather forecast
joon874 11:d6285226f186 200 */
joon874 11:d6285226f186 201 wait(20.0);
joon874 0:5d0d5244d683 202
joon874 0:5d0d5244d683 203 };
joon874 0:5d0d5244d683 204
joon874 0:5d0d5244d683 205 }