Lan OLED
Dependencies: Adafruit_GFX WIZnetInterface mbed
Fork of Weather_Forecast_Helloworld_WIZwiki-W7500 by
main.cpp@14:4f2579fd3043, 2017-04-18 (annotated)
- Committer:
- IoTstudy
- Date:
- Tue Apr 18 08:58:58 2017 +0000
- Revision:
- 14:4f2579fd3043
- Parent:
- 13:6396875b2889
IoT LAN
Who changed what in which revision?
User | Revision | Line number | New 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 |
joon874 | 11:d6285226f186 | 6 | DigitalOut rled(LED1,1); |
joon874 | 11:d6285226f186 | 7 | DigitalOut gled(LED2,0); |
joon874 | 11:d6285226f186 | 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 | |
joon874 | 11:d6285226f186 | 23 | // LED desplay functions |
joon874 | 0:5d0d5244d683 | 24 | void clean(){ |
joon874 | 11:d6285226f186 | 25 | rled = 0; gled = 0; bled = 0; |
joon874 | 0:5d0d5244d683 | 26 | } |
joon874 | 0:5d0d5244d683 | 27 | void clouds(){ |
joon874 | 11:d6285226f186 | 28 | rled = 1; gled = 1; bled = 1; |
joon874 | 0:5d0d5244d683 | 29 | } |
joon874 | 0:5d0d5244d683 | 30 | void thunderstorm(){ |
joon874 | 0:5d0d5244d683 | 31 | while(1){ |
joon874 | 11:d6285226f186 | 32 | rled = 0; gled = 0; bled = 0; |
joon874 | 0:5d0d5244d683 | 33 | wait(0.5); |
joon874 | 11:d6285226f186 | 34 | rled = 1; gled = 1; bled = 1; |
joon874 | 0:5d0d5244d683 | 35 | wait(0.5); |
joon874 | 0:5d0d5244d683 | 36 | }; |
joon874 | 0:5d0d5244d683 | 37 | } |
joon874 | 0:5d0d5244d683 | 38 | void rain(){ |
joon874 | 11:d6285226f186 | 39 | rled = 1; gled = 1; bled = 0; |
joon874 | 0:5d0d5244d683 | 40 | } |
joon874 | 0:5d0d5244d683 | 41 | void mist(){ |
joon874 | 0:5d0d5244d683 | 42 | while(1){ |
joon874 | 11:d6285226f186 | 43 | rled = 1; gled = 1; bled = 0; |
joon874 | 0:5d0d5244d683 | 44 | wait(0.5); |
joon874 | 11:d6285226f186 | 45 | rled = 1; gled = 1; bled = 1; |
joon874 | 0:5d0d5244d683 | 46 | wait(0.5); |
joon874 | 0:5d0d5244d683 | 47 | }; |
joon874 | 0:5d0d5244d683 | 48 | } |
joon874 | 0:5d0d5244d683 | 49 | void haze(){ |
joon874 | 11:d6285226f186 | 50 | rled = 0; gled = 1; bled = 0; |
joon874 | 0:5d0d5244d683 | 51 | } |
joon874 | 0:5d0d5244d683 | 52 | void fog(){ |
joon874 | 0:5d0d5244d683 | 53 | while(1){ |
joon874 | 11:d6285226f186 | 54 | rled = 1; gled = 0; bled = 0; |
joon874 | 0:5d0d5244d683 | 55 | wait(1.0); |
joon874 | 11:d6285226f186 | 56 | rled = 1; gled = 1; bled = 0; |
joon874 | 0:5d0d5244d683 | 57 | wait(1.0); |
joon874 | 0:5d0d5244d683 | 58 | }; |
joon874 | 0:5d0d5244d683 | 59 | } |
joon874 | 0:5d0d5244d683 | 60 | void error(){ |
joon874 | 11:d6285226f186 | 61 | rled = 1; gled = 1; bled = 1; |
joon874 | 0:5d0d5244d683 | 62 | } |
joon874 | 0:5d0d5244d683 | 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------------- |
IoTstudy | 14:4f2579fd3043 | 71 | // 0 1 2 3 4 5 |
IoTstudy | 14:4f2579fd3043 | 72 | uint8_t mac_addr[6] = {0x00, 0x08, 0xDC, 0xff, 0xff, 0x15}; |
IoTstudy | 14:4f2579fd3043 | 73 | // 0~2 회사코드. |
IoTstudy | 14:4f2579fd3043 | 74 | |
joon874 | 11:d6285226f186 | 75 | |
joon874 | 11:d6285226f186 | 76 | eth.init(mac_addr); //Use DHCP |
joon874 | 0:5d0d5244d683 | 77 | |
joon874 | 0:5d0d5244d683 | 78 | while(1){ |
joon874 | 11:d6285226f186 | 79 | |
joon874 | 11:d6285226f186 | 80 | // phy link |
joon874 | 11:d6285226f186 | 81 | do{ |
joon874 | 11:d6285226f186 | 82 | phy_link = eth.ethernet_link(); |
joon874 | 11:d6285226f186 | 83 | printf("..."); |
joon874 | 11:d6285226f186 | 84 | wait(2); |
joon874 | 11:d6285226f186 | 85 | }while(!phy_link); |
joon874 | 11:d6285226f186 | 86 | printf("\r\n"); |
joon874 | 12:b390072ae7ea | 87 | |
joon874 | 12:b390072ae7ea | 88 | eth.connect(); |
joon874 | 11:d6285226f186 | 89 | |
joon874 | 13:6396875b2889 | 90 | printf("IP Address is %s\r\n\r\n", eth.getIPAddress()); |
joon874 | 13:6396875b2889 | 91 | printf("MASK Address is %s\r\n\r\n", eth.getNetworkMask()); |
joon874 | 13:6396875b2889 | 92 | printf("GATEWAY Address is %s\r\n\r\n", eth.getGateway()); |
joon874 | 13:6396875b2889 | 93 | printf("MAC Address is %s\r\n\r\n", eth.getMACAddress()); |
joon874 | 11:d6285226f186 | 94 | |
joon874 | 11:d6285226f186 | 95 | // TCP socket connect to openweather server |
joon874 | 11:d6285226f186 | 96 | //TCPSocketConnection sock; |
joon874 | 11:d6285226f186 | 97 | sock.connect("api.openweathermap.org", 80); |
joon874 | 11:d6285226f186 | 98 | |
joon874 | 11:d6285226f186 | 99 | |
joon874 | 11:d6285226f186 | 100 | // GET method, to request weather forecast |
joon874 | 11:d6285226f186 | 101 | //char http_cmd[] = "GET /data/2.5/weather?q=Seoul,kr&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n"; |
IoTstudy | 14:4f2579fd3043 | 102 | char http_cmd[] = "GET /data/2.5/weather?q=London,uk&appid=be22367918cefc57bf4b4735bcbaf052 HTTP/1.0\n\n"; |
IoTstudy | 14:4f2579fd3043 | 103 | |
IoTstudy | 14:4f2579fd3043 | 104 | // be22367918cefc57bf4b4735bcbaf052 |
joon874 | 11:d6285226f186 | 105 | //char http_cmd[] = "GET /data/2.5/weather?q=Berlin,de&appid=a0ca47dd7f6066404629b3e1ad728981 HTTP/1.0\n\n"; |
joon874 | 11:d6285226f186 | 106 | |
joon874 | 11:d6285226f186 | 107 | sock.send_all(http_cmd, sizeof(http_cmd)-1); |
joon874 | 11:d6285226f186 | 108 | |
joon874 | 11:d6285226f186 | 109 | // get data into buffer |
joon874 | 11:d6285226f186 | 110 | char buffer[2048]; |
joon874 | 11:d6285226f186 | 111 | int ret; |
joon874 | 11:d6285226f186 | 112 | while (true) { |
joon874 | 11:d6285226f186 | 113 | ret = sock.receive(buffer, sizeof(buffer)-1); |
joon874 | 11:d6285226f186 | 114 | if (ret <= 0) |
joon874 | 11:d6285226f186 | 115 | break; |
joon874 | 11:d6285226f186 | 116 | buffer[ret] = '\0'; |
joon874 | 11:d6285226f186 | 117 | printf("Received %d chars from server: %s\n", ret, buffer); |
joon874 | 11:d6285226f186 | 118 | } |
joon874 | 11:d6285226f186 | 119 | printf("\r\n\r\n"); |
joon874 | 11:d6285226f186 | 120 | |
joon874 | 11:d6285226f186 | 121 | // parsing current date, weather, city, tempurature |
joon874 | 11:d6285226f186 | 122 | char *date; |
joon874 | 11:d6285226f186 | 123 | char *weather; |
joon874 | 11:d6285226f186 | 124 | char *city; |
joon874 | 11:d6285226f186 | 125 | char *temper; |
joon874 | 11:d6285226f186 | 126 | |
joon874 | 11:d6285226f186 | 127 | char cur_date[17] = {0}; |
joon874 | 11:d6285226f186 | 128 | char weather_con[15] = {0}; |
joon874 | 11:d6285226f186 | 129 | char city_name[10] = {0}; |
joon874 | 11:d6285226f186 | 130 | char temper_data[3] = {0}; |
joon874 | 0:5d0d5244d683 | 131 | |
joon874 | 11:d6285226f186 | 132 | int temp; |
joon874 | 11:d6285226f186 | 133 | int num100, num10, num1; |
joon874 | 11:d6285226f186 | 134 | |
joon874 | 11:d6285226f186 | 135 | //parding date |
joon874 | 11:d6285226f186 | 136 | date = strstr(buffer, "Date"); |
joon874 | 11:d6285226f186 | 137 | for(int x=0;x<17;x++){ |
joon874 | 11:d6285226f186 | 138 | cur_date[x] = date[x+6]; |
joon874 | 11:d6285226f186 | 139 | } |
joon874 | 11:d6285226f186 | 140 | |
joon874 | 11:d6285226f186 | 141 | // parsing weather condition |
joon874 | 11:d6285226f186 | 142 | weather = strstr(buffer, "main"); |
joon874 | 11:d6285226f186 | 143 | for(int i=0; i<15;i++){ |
joon874 | 11:d6285226f186 | 144 | weather_con[i] = weather[i+7]; |
joon874 | 11:d6285226f186 | 145 | if(weather_con[i] == 34){ |
joon874 | 11:d6285226f186 | 146 | weather_con[i] = 0; |
joon874 | 11:d6285226f186 | 147 | break; |
joon874 | 11:d6285226f186 | 148 | } |
joon874 | 11:d6285226f186 | 149 | } |
joon874 | 11:d6285226f186 | 150 | |
joon874 | 11:d6285226f186 | 151 | // parsing city name |
joon874 | 11:d6285226f186 | 152 | city = strstr(buffer, "name"); |
joon874 | 11:d6285226f186 | 153 | for(int j=0; j<10;j++){ |
joon874 | 11:d6285226f186 | 154 | city_name[j] = city[j+7]; |
joon874 | 11:d6285226f186 | 155 | if(city_name[j] == 34){ |
joon874 | 11:d6285226f186 | 156 | city_name[j] = 0; |
joon874 | 11:d6285226f186 | 157 | break; |
joon874 | 11:d6285226f186 | 158 | } |
joon874 | 11:d6285226f186 | 159 | } |
joon874 | 0:5d0d5244d683 | 160 | |
joon874 | 11:d6285226f186 | 161 | //parsing current tempurature |
joon874 | 11:d6285226f186 | 162 | temper = strstr(buffer, "temp"); |
joon874 | 11:d6285226f186 | 163 | for(int k=0; k<3;k++){ |
joon874 | 11:d6285226f186 | 164 | temper_data[k] = temper[k+6]; |
joon874 | 11:d6285226f186 | 165 | } |
joon874 | 11:d6285226f186 | 166 | |
joon874 | 11:d6285226f186 | 167 | //kelvin to celius converter |
joon874 | 11:d6285226f186 | 168 | num100 = temper_data[0]- 48; |
joon874 | 11:d6285226f186 | 169 | num10 = temper_data[1] - 48; |
joon874 | 11:d6285226f186 | 170 | num1 = temper_data[2]- 48; |
joon874 | 11:d6285226f186 | 171 | temp = (num100*100 + num10*10 + num1) - 273; |
joon874 | 11:d6285226f186 | 172 | |
joon874 | 11:d6285226f186 | 173 | // Debug message |
joon874 | 11:d6285226f186 | 174 | printf("city name : %s\r\n", city_name); |
joon874 | 11:d6285226f186 | 175 | printf("weather : %s\r\n", weather_con); |
joon874 | 11:d6285226f186 | 176 | printf("temperature : %d\r\n\r\n", temp); |
joon874 | 11:d6285226f186 | 177 | |
joon874 | 11:d6285226f186 | 178 | // OLED Display |
joon874 | 11:d6285226f186 | 179 | gOled.begin(); |
joon874 | 11:d6285226f186 | 180 | gOled.clearDisplay(); |
joon874 | 11:d6285226f186 | 181 | gOled.printf("%s\n\n", cur_date); |
joon874 | 11:d6285226f186 | 182 | gOled.printf("City : %s\n", city_name); |
joon874 | 11:d6285226f186 | 183 | gOled.printf("Weather : %s\n", weather_con); |
joon874 | 11:d6285226f186 | 184 | gOled.printf("Temper : %d\n", temp); |
joon874 | 11:d6285226f186 | 185 | gOled.display(); |
joon874 | 11:d6285226f186 | 186 | gOled.setTextCursor(0,0); |
joon874 | 11:d6285226f186 | 187 | |
joon874 | 11:d6285226f186 | 188 | //LED display rely on weather condition |
joon874 | 11:d6285226f186 | 189 | if(strcmp(weather_con,"Clouds")==0) clouds(); |
joon874 | 11:d6285226f186 | 190 | else if(strcmp(weather_con,"Rain")==0) rain(); |
joon874 | 11:d6285226f186 | 191 | else if(strcmp(weather_con,"Thunderstorm")==0) thunderstorm(); |
joon874 | 11:d6285226f186 | 192 | else if(strcmp(weather_con,"Clean")==0) clean(); |
joon874 | 11:d6285226f186 | 193 | else if(strcmp(weather_con,"Mist")==0) mist(); |
joon874 | 11:d6285226f186 | 194 | else if(strcmp(weather_con,"Haze")==0) haze(); |
joon874 | 11:d6285226f186 | 195 | else if(strcmp(weather_con,"Fog")==0) fog(); |
joon874 | 11:d6285226f186 | 196 | else error(); |
joon874 | 0:5d0d5244d683 | 197 | |
joon874 | 0:5d0d5244d683 | 198 | |
joon874 | 11:d6285226f186 | 199 | //Disconnection |
joon874 | 11:d6285226f186 | 200 | sock.close(); |
joon874 | 11:d6285226f186 | 201 | eth.disconnect(); |
joon874 | 0:5d0d5244d683 | 202 | |
joon874 | 11:d6285226f186 | 203 | /* |
joon874 | 11:d6285226f186 | 204 | * everytime in delay, request weather forecast |
joon874 | 11:d6285226f186 | 205 | */ |
joon874 | 11:d6285226f186 | 206 | wait(20.0); |
joon874 | 0:5d0d5244d683 | 207 | |
joon874 | 0:5d0d5244d683 | 208 | }; |
joon874 | 0:5d0d5244d683 | 209 | |
joon874 | 0:5d0d5244d683 | 210 | } |