sdfghjjh

Dependencies:   Adafruit_GFX WIZnetInterface mbed

Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by IOP

Committer:
irinakim
Date:
Tue Feb 16 01:29:35 2016 +0000
Revision:
7:b0f039c96a1c
Parent:
4:3384f1c0b2be
Child:
8:b48b8d089f5b
Appid??;

Who changed what in which revision?

UserRevisionLine numberNew contents of line
joon874 0:5d0d5244d683 1
joon874 0:5d0d5244d683 2 #include "mbed.h"
joon874 0:5d0d5244d683 3 #include "EthernetInterface.h"
joon874 0:5d0d5244d683 4 #include "Adafruit_SSD1306.h"
joon874 0:5d0d5244d683 5
IOP 4:3384f1c0b2be 6
joon874 0:5d0d5244d683 7 /*
joon874 0:5d0d5244d683 8 * W7500 onboard LED
joon874 0:5d0d5244d683 9 */
joon874 0:5d0d5244d683 10 DigitalOut rled(LED1);
joon874 0:5d0d5244d683 11 DigitalOut gled(LED2);
joon874 0:5d0d5244d683 12 DigitalOut bled(LED3);
joon874 0:5d0d5244d683 13
joon874 0:5d0d5244d683 14
joon874 0:5d0d5244d683 15 class I2CPreInit : public I2C
joon874 0:5d0d5244d683 16 {
joon874 0:5d0d5244d683 17 public:
joon874 0:5d0d5244d683 18 I2CPreInit(PinName sda, PinName scl) : I2C(sda, scl)
joon874 0:5d0d5244d683 19 {
joon874 0:5d0d5244d683 20 frequency(100000);
joon874 0:5d0d5244d683 21 start();
joon874 0:5d0d5244d683 22 };
joon874 0:5d0d5244d683 23 };
joon874 0:5d0d5244d683 24
joon874 0:5d0d5244d683 25 I2CPreInit gI2C(PA_10,PA_9);
joon874 0:5d0d5244d683 26
joon874 0:5d0d5244d683 27 /*
joon874 0:5d0d5244d683 28 * set OLED
joon874 0:5d0d5244d683 29 */
joon874 0:5d0d5244d683 30 Adafruit_SSD1306_I2c gOled(gI2C,NC,0x78,64,128);
joon874 0:5d0d5244d683 31
joon874 0:5d0d5244d683 32
joon874 0:5d0d5244d683 33 /*
joon874 0:5d0d5244d683 34 * LED desplay functions
joon874 0:5d0d5244d683 35 */
joon874 0:5d0d5244d683 36 void clean(){
joon874 0:5d0d5244d683 37 rled = 0;
joon874 0:5d0d5244d683 38 gled = 0;
IOP 4:3384f1c0b2be 39 bled = 0;
joon874 0:5d0d5244d683 40 }
joon874 0:5d0d5244d683 41 void clouds(){
IOP 4:3384f1c0b2be 42 rled = 1;
IOP 4:3384f1c0b2be 43 gled = 1;
IOP 4:3384f1c0b2be 44 bled = 1;
joon874 0:5d0d5244d683 45 }
joon874 0:5d0d5244d683 46 void thunderstorm(){
joon874 0:5d0d5244d683 47 while(1){
joon874 0:5d0d5244d683 48 rled = 0;
joon874 0:5d0d5244d683 49 gled = 0;
joon874 0:5d0d5244d683 50 bled = 0;
joon874 0:5d0d5244d683 51 wait(0.5);
IOP 4:3384f1c0b2be 52 rled = 1;
IOP 4:3384f1c0b2be 53 gled = 1;
IOP 4:3384f1c0b2be 54 bled = 1;
joon874 0:5d0d5244d683 55 wait(0.5);
joon874 0:5d0d5244d683 56 };
joon874 0:5d0d5244d683 57 }
joon874 0:5d0d5244d683 58 void rain(){
joon874 0:5d0d5244d683 59 rled = 1;
joon874 0:5d0d5244d683 60 gled = 1;
joon874 0:5d0d5244d683 61 bled = 0;
joon874 0:5d0d5244d683 62 }
joon874 0:5d0d5244d683 63 void mist(){
joon874 0:5d0d5244d683 64 while(1){
joon874 0:5d0d5244d683 65 rled = 1;
joon874 0:5d0d5244d683 66 gled = 1;
joon874 0:5d0d5244d683 67 bled = 0;
joon874 0:5d0d5244d683 68 wait(0.5);
joon874 0:5d0d5244d683 69 rled = 1;
joon874 0:5d0d5244d683 70 gled = 1;
joon874 0:5d0d5244d683 71 bled = 1;
joon874 0:5d0d5244d683 72 wait(0.5);
joon874 0:5d0d5244d683 73 };
joon874 0:5d0d5244d683 74 }
joon874 0:5d0d5244d683 75 void haze(){
joon874 0:5d0d5244d683 76 rled = 0;
joon874 0:5d0d5244d683 77 gled = 1;
joon874 0:5d0d5244d683 78 bled = 0;
joon874 0:5d0d5244d683 79 }
joon874 0:5d0d5244d683 80 void fog(){
joon874 0:5d0d5244d683 81 while(1){
joon874 0:5d0d5244d683 82 rled = 1;
joon874 0:5d0d5244d683 83 gled = 0;
joon874 0:5d0d5244d683 84 bled = 0;
joon874 0:5d0d5244d683 85 wait(1.0);
joon874 0:5d0d5244d683 86 rled = 1;
joon874 0:5d0d5244d683 87 gled = 1;
joon874 0:5d0d5244d683 88 bled = 0;
joon874 0:5d0d5244d683 89 wait(1.0);
joon874 0:5d0d5244d683 90 };
joon874 0:5d0d5244d683 91 }
joon874 0:5d0d5244d683 92 void error(){
joon874 0:5d0d5244d683 93 rled = 1;
joon874 0:5d0d5244d683 94 gled = 1;
joon874 0:5d0d5244d683 95 bled = 1;
joon874 0:5d0d5244d683 96 }
joon874 0:5d0d5244d683 97
joon874 0:5d0d5244d683 98 /*
joon874 0:5d0d5244d683 99 * main
joon874 0:5d0d5244d683 100 */
joon874 0:5d0d5244d683 101 int main() {
joon874 0:5d0d5244d683 102
joon874 0:5d0d5244d683 103 int phy_link;
joon874 0:5d0d5244d683 104 printf("Wait a second...\r\n");
IOP 4:3384f1c0b2be 105 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0xa0};
joon874 0:5d0d5244d683 106
joon874 0:5d0d5244d683 107 EthernetInterface eth;
joon874 0:5d0d5244d683 108
joon874 0:5d0d5244d683 109 eth.init(mac_addr); //Use DHCP
joon874 0:5d0d5244d683 110
joon874 0:5d0d5244d683 111 while(1){
joon874 0:5d0d5244d683 112
joon874 0:5d0d5244d683 113 eth.connect();
joon874 0:5d0d5244d683 114
joon874 0:5d0d5244d683 115 /*
joon874 0:5d0d5244d683 116 * phy link
joon874 0:5d0d5244d683 117 */
joon874 0:5d0d5244d683 118 do{
joon874 0:5d0d5244d683 119 phy_link = eth.ethernet_link();
joon874 0:5d0d5244d683 120 printf("...");
joon874 0:5d0d5244d683 121 wait(2);
joon874 0:5d0d5244d683 122 }while(!phy_link);
joon874 0:5d0d5244d683 123 printf("\r\n");
joon874 0:5d0d5244d683 124
joon874 0:5d0d5244d683 125 printf("IP Address is %s\r\n\r\n", eth.getIPAddress());
joon874 0:5d0d5244d683 126
joon874 0:5d0d5244d683 127 /*
joon874 0:5d0d5244d683 128 * TCP socket connect to openweather server
joon874 0:5d0d5244d683 129 */
joon874 0:5d0d5244d683 130 TCPSocketConnection sock;
joon874 0:5d0d5244d683 131 sock.connect("api.openweathermap.org", 80);
joon874 0:5d0d5244d683 132
joon874 0:5d0d5244d683 133
joon874 0:5d0d5244d683 134 /*
joon874 0:5d0d5244d683 135 * GET method, to request weather forecast
IOP 4:3384f1c0b2be 136 */
irinakim 7:b0f039c96a1c 137 //char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=44db6a862fba0b067b1930da0d769e98 HTTP/1.0\n\n";
irinakim 7:b0f039c96a1c 138 char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr&appid=44db6a862fba0b067b1930da0d769e98 HTTP/1.0\n\n";
joon874 0:5d0d5244d683 139 //char http_cmd[] = "GET /data/2.5/weather?q=London,uk HTTP/1.0\n\n";
joon874 0:5d0d5244d683 140 //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de HTTP/1.0\n\n";
IOP 4:3384f1c0b2be 141
joon874 0:5d0d5244d683 142 sock.send_all(http_cmd, sizeof(http_cmd)-1);
joon874 0:5d0d5244d683 143
joon874 0:5d0d5244d683 144 /*
joon874 0:5d0d5244d683 145 * get data into buffer
joon874 0:5d0d5244d683 146 */
IOP 4:3384f1c0b2be 147 char buffer[2048];
joon874 0:5d0d5244d683 148 int ret;
joon874 0:5d0d5244d683 149 while (true) {
joon874 0:5d0d5244d683 150 ret = sock.receive(buffer, sizeof(buffer)-1);
joon874 0:5d0d5244d683 151 if (ret <= 0)
joon874 0:5d0d5244d683 152 break;
joon874 0:5d0d5244d683 153 buffer[ret] = '\0';
joon874 0:5d0d5244d683 154 printf("Received %d chars from server: %s\n", ret, buffer);
joon874 0:5d0d5244d683 155 }
joon874 0:5d0d5244d683 156 printf("\r\n\r\n");
joon874 0:5d0d5244d683 157
joon874 0:5d0d5244d683 158 /*
joon874 0:5d0d5244d683 159 * parsing current date, weather, city, tempurature
joon874 0:5d0d5244d683 160 */
joon874 0:5d0d5244d683 161 char *date;
joon874 0:5d0d5244d683 162 char *weather;
joon874 0:5d0d5244d683 163 char *city;
joon874 0:5d0d5244d683 164 char *temper;
joon874 0:5d0d5244d683 165
joon874 0:5d0d5244d683 166 char cur_date[17] = {0};
joon874 0:5d0d5244d683 167 char weather_con[15] = {0};
joon874 0:5d0d5244d683 168 char city_name[10] = {0};
joon874 0:5d0d5244d683 169 char temper_data[3] = {0};
IOP 4:3384f1c0b2be 170
joon874 0:5d0d5244d683 171 int temp;
joon874 0:5d0d5244d683 172 int num100, num10, num1;
joon874 0:5d0d5244d683 173
joon874 0:5d0d5244d683 174 /*
joon874 0:5d0d5244d683 175 * parding date
joon874 0:5d0d5244d683 176 */
joon874 0:5d0d5244d683 177 date = strstr(buffer, "Date");
joon874 0:5d0d5244d683 178 for(int x=0;x<17;x++){
joon874 0:5d0d5244d683 179 cur_date[x] = date[x+6];
joon874 0:5d0d5244d683 180 }
joon874 0:5d0d5244d683 181
joon874 0:5d0d5244d683 182 /*
joon874 0:5d0d5244d683 183 * parsing weather condition
joon874 0:5d0d5244d683 184 */
joon874 0:5d0d5244d683 185 weather = strstr(buffer, "main");
joon874 0:5d0d5244d683 186 for(int i=0; i<15;i++){
joon874 0:5d0d5244d683 187 weather_con[i] = weather[i+7];
joon874 0:5d0d5244d683 188 if(weather_con[i] == 34){
joon874 0:5d0d5244d683 189 weather_con[i] = 0;
joon874 0:5d0d5244d683 190 break;
joon874 0:5d0d5244d683 191 }
joon874 0:5d0d5244d683 192 }
joon874 0:5d0d5244d683 193
joon874 0:5d0d5244d683 194 /*
joon874 0:5d0d5244d683 195 * parsing city name
joon874 0:5d0d5244d683 196 */
joon874 0:5d0d5244d683 197 city = strstr(buffer, "name");
joon874 0:5d0d5244d683 198 for(int j=0; j<10;j++){
joon874 0:5d0d5244d683 199 city_name[j] = city[j+7];
joon874 0:5d0d5244d683 200 if(city_name[j] == 34){
joon874 0:5d0d5244d683 201 city_name[j] = 0;
joon874 0:5d0d5244d683 202 break;
joon874 0:5d0d5244d683 203 }
joon874 0:5d0d5244d683 204 }
joon874 0:5d0d5244d683 205
joon874 0:5d0d5244d683 206 /*
joon874 0:5d0d5244d683 207 * parsing current tempurature
joon874 0:5d0d5244d683 208 */
joon874 0:5d0d5244d683 209 temper = strstr(buffer, "temp");
joon874 0:5d0d5244d683 210 for(int k=0; k<3;k++){
joon874 0:5d0d5244d683 211 temper_data[k] = temper[k+6];
joon874 0:5d0d5244d683 212 }
joon874 0:5d0d5244d683 213
joon874 0:5d0d5244d683 214 /*
joon874 0:5d0d5244d683 215 * kelvin to celius converter
joon874 0:5d0d5244d683 216 */
joon874 3:246564796e88 217 num100 = temper_data[0] - 48;
joon874 3:246564796e88 218 num10 = temper_data[1] - 48;
joon874 3:246564796e88 219 num1 = temper_data[2] - 48;
joon874 0:5d0d5244d683 220
joon874 3:246564796e88 221 temp = (num100*100 + num10*10 + num1) - 273;
joon874 0:5d0d5244d683 222
joon874 0:5d0d5244d683 223 /*
joon874 0:5d0d5244d683 224 * printf
joon874 0:5d0d5244d683 225 */
joon874 0:5d0d5244d683 226 printf("city name : %s\r\n", city_name);
joon874 0:5d0d5244d683 227 printf("weather : %s\r\n", weather_con);
joon874 0:5d0d5244d683 228 printf("temperature : %d\r\n\r\n", temp);
joon874 0:5d0d5244d683 229
joon874 0:5d0d5244d683 230 /*
joon874 0:5d0d5244d683 231 * OLED Display
joon874 0:5d0d5244d683 232 */
joon874 0:5d0d5244d683 233 gOled.begin();
joon874 0:5d0d5244d683 234 gOled.clearDisplay();
joon874 0:5d0d5244d683 235
joon874 2:06e2b95bd224 236 gOled.printf("%s\n\n", cur_date);
joon874 0:5d0d5244d683 237 gOled.printf("City : %s\n", city_name);
joon874 0:5d0d5244d683 238 gOled.printf("Weather : %s\n", weather_con);
joon874 0:5d0d5244d683 239 gOled.printf("Temper : %d\n", temp);
joon874 0:5d0d5244d683 240 gOled.display();
joon874 0:5d0d5244d683 241 gOled.setTextCursor(0,0);
joon874 0:5d0d5244d683 242
joon874 0:5d0d5244d683 243 /*
joon874 0:5d0d5244d683 244 * LED display rely on weather condition
joon874 0:5d0d5244d683 245 */
joon874 0:5d0d5244d683 246 if(strcmp(weather_con,"Clouds")==0) clouds();
joon874 0:5d0d5244d683 247 else if(strcmp(weather_con,"Rain")==0) rain();
joon874 0:5d0d5244d683 248 else if(strcmp(weather_con,"Thunderstorm")==0) thunderstorm();
joon874 0:5d0d5244d683 249 else if(strcmp(weather_con,"Clean")==0) clean();
joon874 0:5d0d5244d683 250 else if(strcmp(weather_con,"Mist")==0) mist();
joon874 0:5d0d5244d683 251 else if(strcmp(weather_con,"Haze")==0) haze();
joon874 0:5d0d5244d683 252 else if(strcmp(weather_con,"Fog")==0) fog();
joon874 0:5d0d5244d683 253 else error();
joon874 0:5d0d5244d683 254
joon874 0:5d0d5244d683 255
joon874 0:5d0d5244d683 256 sock.close();
joon874 0:5d0d5244d683 257
joon874 0:5d0d5244d683 258 eth.disconnect();
joon874 0:5d0d5244d683 259
joon874 0:5d0d5244d683 260 /*
joon874 0:5d0d5244d683 261 * everytime in delay, request weather forecast
joon874 0:5d0d5244d683 262 */
joon874 0:5d0d5244d683 263 wait(60.0);
joon874 0:5d0d5244d683 264
joon874 0:5d0d5244d683 265 };
joon874 0:5d0d5244d683 266
joon874 0:5d0d5244d683 267 }