Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: Adafruit_GFX WIZnetInterface mbed
main.cpp
00001 #include "mbed.h" 00002 #include "EthernetInterface.h" 00003 #include "Adafruit_SSD1306.h" 00004 00005 // W7500 onboard LED & Init 00006 DigitalOut gled(LED2,0); 00007 00008 00009 // I2C Class 00010 I2C i2c(PA_10,PA_9); 00011 00012 // OLED Class 00013 Adafruit_SSD1306_I2c gOled(i2c,NC,0x78,64,128); 00014 00015 // Declare Ethernet Class 00016 EthernetInterface eth; 00017 00018 // Declare TCP Connection Class 00019 TCPSocketConnection sock; 00020 00021 00022 00023 int main() { 00024 00025 int phy_link; 00026 printf("Wait a second...\r\n"); 00027 00028 //--------- Have to modify the mac address------------- 00029 uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0x25}; 00030 00031 eth.init(mac_addr); //Use DHCP 00032 00033 // phy link 00034 do{ 00035 phy_link = eth.ethernet_link(); 00036 printf("..."); 00037 wait(2); 00038 }while(!phy_link); 00039 printf("\r\n"); 00040 00041 eth.connect(); 00042 00043 printf("IP Address is %s\r\n\r\n", eth.getIPAddress()); 00044 printf("MASK Address is %s\r\n\r\n", eth.getNetworkMask()); 00045 printf("GATEWAY Address is %s\r\n\r\n", eth.getGateway()); 00046 printf("MAC Address is %s\r\n\r\n", eth.getMACAddress()); 00047 00048 while(1){ 00049 // TCP socket connect to openweather server 00050 //TCPSocketConnection sock; 00051 char http_addr[]="api.openweathermap.org"; 00052 int port=80; 00053 00054 //connect 00055 /////////////////////////////////////////////////////////// 00056 sock.connect(http_addr, port); 00057 //////////////////////////////////////////////////////////// 00058 00059 // GET method, to request weather forecast 00060 char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n"; 00061 00062 00063 //send data 00064 /////////////////////////////////////////////////////// 00065 sock.send(http_cmd, sizeof(http_cmd)-1); 00066 /////////////////////////////////////////////////////// 00067 00068 // get data into buffer 00069 char buffer[2048]; 00070 int ret; 00071 while (true) { 00072 // break the while(), when don't received tha data 00073 // save the data to buffer 00074 // save the return value to ret 00075 //receive data 00076 ////////////////////////////////////////////////////// 00077 ret = sock.receive(buffer, sizeof(buffer)-1); 00078 if (ret <= 0) 00079 break; 00080 //////////////////////////////////////////////////// 00081 buffer[ret] = '\0'; 00082 printf("Received %d chars from server: %s\n", ret, buffer); 00083 } 00084 printf("\r\n\r\n"); 00085 00086 // parsing current date, weather, city, tempurature 00087 char *date; 00088 char *weather; 00089 char *city; 00090 char *temper; 00091 00092 char cur_date[17] = {0}; 00093 char weather_con[15] = {0}; 00094 char city_name[10] = {0}; 00095 char temper_data[3] = {0}; 00096 00097 int temp; 00098 int num100, num10, num1; 00099 00100 //parding date 00101 date = strstr(buffer, "Date"); 00102 for(int x=0;x<17;x++){ 00103 cur_date[x] = date[x+6]; 00104 } 00105 00106 // parsing weather condition 00107 weather = strstr(buffer, "main"); 00108 for(int i=0; i<15;i++){ 00109 weather_con[i] = weather[i+7]; 00110 if(weather_con[i] == 34){ 00111 weather_con[i] = 0; 00112 break; 00113 } 00114 } 00115 00116 // parsing city name 00117 city = strstr(buffer, "name"); 00118 for(int j=0; j<10;j++){ 00119 city_name[j] = city[j+7]; 00120 if(city_name[j] == 34){ 00121 city_name[j] = 0; 00122 break; 00123 } 00124 } 00125 00126 //parsing current tempurature 00127 temper = strstr(buffer, "temp"); 00128 for(int k=0; k<3;k++){ 00129 temper_data[k] = temper[k+6]; 00130 } 00131 00132 //kelvin to celius converter 00133 num100 = temper_data[0]- 48; 00134 num10 = temper_data[1] - 48; 00135 num1 = temper_data[2]- 48; 00136 temp = (num100*100 + num10*10 + num1) - 273; 00137 00138 // Debug message 00139 printf("city name : %s\r\n", city_name); 00140 printf("weather : %s\r\n", weather_con); 00141 printf("temperature : %d\r\n\r\n", temp); 00142 00143 // OLED Display 00144 gOled.begin(); 00145 gOled.clearDisplay(); 00146 gOled.printf("%s\n\n", cur_date); 00147 gOled.printf("City : %s\n", city_name); 00148 gOled.printf("Weather : %s\n", weather_con); 00149 gOled.printf("Temper : %d\n", temp); 00150 gOled.display(); 00151 gOled.setTextCursor(0,0); 00152 00153 00154 00155 //close 00156 ////////////////////////////////////////////////// 00157 sock.close(); 00158 eth.disconnect(); 00159 ////////////////////////////////////////////////// 00160 /* 00161 * everytime in delay, request weather forecast 00162 */ 00163 wait(20.0); 00164 00165 }; 00166 00167 }
Generated on Wed Jul 13 2022 23:18:50 by
1.7.2