sdfghjjh

Dependencies:   Adafruit_GFX WIZnetInterface mbed

Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by IOP

Committer:
irinakim
Date:
Mon Apr 11 23:33:33 2016 +0000
Revision:
9:5ae28a194322
Parent:
6:780b86964a89
Child:
10:961467f6c8db
modify 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 9:5ae28a194322 137 char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr&appid=b1b15e88fa797225412429c1c50c122a HTTP/1.0\n\n";
irinakim 9:5ae28a194322 138 //char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=b1b15e88fa797225412429c1c50c122a HTTP/1.0\n\n";
irinakim 9:5ae28a194322 139 //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de&appid=b1b15e88fa797225412429c1c50c122a HTTP/1.0\n\n";
IOP 4:3384f1c0b2be 140
joon874 0:5d0d5244d683 141 sock.send_all(http_cmd, sizeof(http_cmd)-1);
joon874 0:5d0d5244d683 142
joon874 0:5d0d5244d683 143 /*
joon874 0:5d0d5244d683 144 * get data into buffer
joon874 0:5d0d5244d683 145 */
IOP 4:3384f1c0b2be 146 char buffer[2048];
joon874 0:5d0d5244d683 147 int ret;
joon874 0:5d0d5244d683 148 while (true) {
joon874 0:5d0d5244d683 149 ret = sock.receive(buffer, sizeof(buffer)-1);
joon874 0:5d0d5244d683 150 if (ret <= 0)
joon874 0:5d0d5244d683 151 break;
joon874 0:5d0d5244d683 152 buffer[ret] = '\0';
joon874 0:5d0d5244d683 153 printf("Received %d chars from server: %s\n", ret, buffer);
joon874 0:5d0d5244d683 154 }
joon874 0:5d0d5244d683 155 printf("\r\n\r\n");
joon874 0:5d0d5244d683 156
joon874 0:5d0d5244d683 157 /*
joon874 0:5d0d5244d683 158 * parsing current date, weather, city, tempurature
joon874 0:5d0d5244d683 159 */
joon874 0:5d0d5244d683 160 char *date;
joon874 0:5d0d5244d683 161 char *weather;
joon874 0:5d0d5244d683 162 char *city;
joon874 0:5d0d5244d683 163 char *temper;
joon874 0:5d0d5244d683 164
joon874 0:5d0d5244d683 165 char cur_date[17] = {0};
joon874 0:5d0d5244d683 166 char weather_con[15] = {0};
joon874 0:5d0d5244d683 167 char city_name[10] = {0};
joon874 0:5d0d5244d683 168 char temper_data[3] = {0};
IOP 4:3384f1c0b2be 169
joon874 0:5d0d5244d683 170 int temp;
joon874 0:5d0d5244d683 171 int num100, num10, num1;
joon874 0:5d0d5244d683 172
joon874 0:5d0d5244d683 173 /*
joon874 0:5d0d5244d683 174 * parding date
joon874 0:5d0d5244d683 175 */
joon874 0:5d0d5244d683 176 date = strstr(buffer, "Date");
joon874 0:5d0d5244d683 177 for(int x=0;x<17;x++){
joon874 0:5d0d5244d683 178 cur_date[x] = date[x+6];
joon874 0:5d0d5244d683 179 }
joon874 0:5d0d5244d683 180
joon874 0:5d0d5244d683 181 /*
joon874 0:5d0d5244d683 182 * parsing weather condition
joon874 0:5d0d5244d683 183 */
joon874 0:5d0d5244d683 184 weather = strstr(buffer, "main");
joon874 0:5d0d5244d683 185 for(int i=0; i<15;i++){
joon874 0:5d0d5244d683 186 weather_con[i] = weather[i+7];
joon874 0:5d0d5244d683 187 if(weather_con[i] == 34){
joon874 0:5d0d5244d683 188 weather_con[i] = 0;
joon874 0:5d0d5244d683 189 break;
joon874 0:5d0d5244d683 190 }
joon874 0:5d0d5244d683 191 }
joon874 0:5d0d5244d683 192
joon874 0:5d0d5244d683 193 /*
joon874 0:5d0d5244d683 194 * parsing city name
joon874 0:5d0d5244d683 195 */
joon874 0:5d0d5244d683 196 city = strstr(buffer, "name");
joon874 0:5d0d5244d683 197 for(int j=0; j<10;j++){
joon874 0:5d0d5244d683 198 city_name[j] = city[j+7];
joon874 0:5d0d5244d683 199 if(city_name[j] == 34){
joon874 0:5d0d5244d683 200 city_name[j] = 0;
joon874 0:5d0d5244d683 201 break;
joon874 0:5d0d5244d683 202 }
joon874 0:5d0d5244d683 203 }
joon874 0:5d0d5244d683 204
joon874 0:5d0d5244d683 205 /*
joon874 0:5d0d5244d683 206 * parsing current tempurature
joon874 0:5d0d5244d683 207 */
joon874 0:5d0d5244d683 208 temper = strstr(buffer, "temp");
joon874 0:5d0d5244d683 209 for(int k=0; k<3;k++){
joon874 0:5d0d5244d683 210 temper_data[k] = temper[k+6];
joon874 0:5d0d5244d683 211 }
joon874 0:5d0d5244d683 212
joon874 0:5d0d5244d683 213 /*
joon874 0:5d0d5244d683 214 * kelvin to celius converter
joon874 0:5d0d5244d683 215 */
joon874 3:246564796e88 216 num100 = temper_data[0] - 48;
joon874 3:246564796e88 217 num10 = temper_data[1] - 48;
joon874 3:246564796e88 218 num1 = temper_data[2] - 48;
joon874 0:5d0d5244d683 219
joon874 3:246564796e88 220 temp = (num100*100 + num10*10 + num1) - 273;
joon874 0:5d0d5244d683 221
joon874 0:5d0d5244d683 222 /*
joon874 0:5d0d5244d683 223 * printf
joon874 0:5d0d5244d683 224 */
joon874 0:5d0d5244d683 225 printf("city name : %s\r\n", city_name);
joon874 0:5d0d5244d683 226 printf("weather : %s\r\n", weather_con);
joon874 0:5d0d5244d683 227 printf("temperature : %d\r\n\r\n", temp);
joon874 0:5d0d5244d683 228
joon874 0:5d0d5244d683 229 /*
joon874 0:5d0d5244d683 230 * OLED Display
joon874 0:5d0d5244d683 231 */
joon874 0:5d0d5244d683 232 gOled.begin();
joon874 0:5d0d5244d683 233 gOled.clearDisplay();
joon874 0:5d0d5244d683 234
joon874 2:06e2b95bd224 235 gOled.printf("%s\n\n", cur_date);
joon874 0:5d0d5244d683 236 gOled.printf("City : %s\n", city_name);
joon874 0:5d0d5244d683 237 gOled.printf("Weather : %s\n", weather_con);
joon874 0:5d0d5244d683 238 gOled.printf("Temper : %d\n", temp);
joon874 0:5d0d5244d683 239 gOled.display();
joon874 0:5d0d5244d683 240 gOled.setTextCursor(0,0);
joon874 0:5d0d5244d683 241
joon874 0:5d0d5244d683 242 /*
joon874 0:5d0d5244d683 243 * LED display rely on weather condition
joon874 0:5d0d5244d683 244 */
joon874 0:5d0d5244d683 245 if(strcmp(weather_con,"Clouds")==0) clouds();
joon874 0:5d0d5244d683 246 else if(strcmp(weather_con,"Rain")==0) rain();
joon874 0:5d0d5244d683 247 else if(strcmp(weather_con,"Thunderstorm")==0) thunderstorm();
joon874 0:5d0d5244d683 248 else if(strcmp(weather_con,"Clean")==0) clean();
joon874 0:5d0d5244d683 249 else if(strcmp(weather_con,"Mist")==0) mist();
joon874 0:5d0d5244d683 250 else if(strcmp(weather_con,"Haze")==0) haze();
joon874 0:5d0d5244d683 251 else if(strcmp(weather_con,"Fog")==0) fog();
joon874 0:5d0d5244d683 252 else error();
joon874 0:5d0d5244d683 253
joon874 0:5d0d5244d683 254
joon874 0:5d0d5244d683 255 sock.close();
joon874 0:5d0d5244d683 256
joon874 0:5d0d5244d683 257 eth.disconnect();
joon874 0:5d0d5244d683 258
joon874 0:5d0d5244d683 259 /*
joon874 0:5d0d5244d683 260 * everytime in delay, request weather forecast
joon874 0:5d0d5244d683 261 */
joon874 0:5d0d5244d683 262 wait(60.0);
joon874 0:5d0d5244d683 263
joon874 0:5d0d5244d683 264 };
joon874 0:5d0d5244d683 265
joon874 0:5d0d5244d683 266 }