weather forecast WIZwiki-W7500 for academy
Dependencies: Adafruit_GFX WIZnetInterface mbed
Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by
main.cpp
- Committer:
- jcm931213
- Date:
- 2017-06-13
- Revision:
- 16:60040aaa87df
- Parent:
- 15:c4e32b8b8130
- Child:
- 17:bf1228469a6c
File content as of revision 16:60040aaa87df:
#include "mbed.h" #include "EthernetInterface.h" #include "Adafruit_SSD1306.h" // W7500 onboard LED & Init DigitalOut gled(LED2,0); // I2C Class I2C i2c(PA_10,PA_9); // OLED Class Adafruit_SSD1306_I2c gOled(i2c,NC,0x78,64,128); // Declare Ethernet Class EthernetInterface eth; // Declare TCP Connection Class TCPSocketConnection sock; int main() { int phy_link; printf("Wait a second...\r\n"); //--------- Have to modify the mac address------------- uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0x25}; eth.init(mac_addr); //Use DHCP // phy link do{ phy_link = eth.ethernet_link(); printf("..."); wait(2); }while(!phy_link); printf("\r\n"); eth.connect(); printf("IP Address is %s\r\n\r\n", eth.getIPAddress()); printf("MASK Address is %s\r\n\r\n", eth.getNetworkMask()); printf("GATEWAY Address is %s\r\n\r\n", eth.getGateway()); printf("MAC Address is %s\r\n\r\n", eth.getMACAddress()); while(1){ // TCP socket connect to openweather server //TCPSocketConnection sock; char http_addr[]="api.openweathermap.org"; int port=80; //connect /////////////////////////////////////////////////////////// //////////////////////////////////////////////////////////// // GET method, to request weather forecast char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n"; //send data /////////////////////////////////////////////////////// /////////////////////////////////////////////////////// // get data into buffer char buffer[2048]; int ret; while (true) { // break the while(), when don't received tha data // save the data to buffer // save the return value to ret //receive data ////////////////////////////////////////////////////// //////////////////////////////////////////////////// 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; num10 = temper_data[1] - 48; num1 = temper_data[2]- 48; temp = (num100*100 + num10*10 + num1) - 273; // Debug message 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\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); //close ////////////////////////////////////////////////// ////////////////////////////////////////////////// /* * everytime in delay, request weather forecast */ wait(20.0); }; }