최종 소스입니다. 눈오는 날 만나요.
어제 호진님이 최적화한 부분이 네오픽셀 특성상
pixels.setBrightness(m);
for (int k = 0; k < NUMPIXELS; k++) {
pixels.setPixelColor(k, pixels.Color(wColor[weatherState][0], wColor[weatherState][1], wColor[weatherState][2]));
}
setBrightness 다음에 setPixelColor를 해 주어야 해서 for문 밖으로 꺼냈던 걸 다시 안으로 집어 넣어 문제를 해결했습니다.
그리고 추가된 소스가 있는데 주석으로 언급해 두겠습니다.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 202 203 204 205 206 207 208 209 210 211 212 213 214 215 216 217 218 219 220 221 222 223 224 225 226 227 228 229 230 231 232 233 234 |
#include <ESP8266WiFi.h> #include <Adafruit_NeoPixel.h> #ifdef __AVR__ #include <avr/power.h> // Required for 16 MHz Adafruit Trinket #endif #define PIN D3 #define NUMPIXELS 7 #define CHK_DATACNT 9 #define CHK_DATACNT_WANT 9 Adafruit_NeoPixel pixels(NUMPIXELS, PIN, NEO_GRB + NEO_KHZ800); int wData[CHK_DATACNT]; int wDataCnt; // 와이파이 ssid을 입력해주세요. //const char* ssid = "decoderGround"; const char* ssid = "harmono"; //const char* ssid = "Decoder4f"; //와이파이 비밀번호를 입력해주세요. const char* password = "decoder@@@"; //const char* password = "decoder4f!!"; const char* host = "www.kma.go.kr"; //const char* host = "www.jaker.zc.bz"; int bLight = 150; void setup() { pixels.begin(); for (int k = 0; k < NUMPIXELS; k++) { pixels.setPixelColor(k, pixels.Color(0,255,0)); } pixels.setBrightness(bLight); pixels.show(); delay(1000); Serial.begin(115200); delay(10); Serial.print("Connecting to "); Serial.println(ssid); WiFi.begin(ssid, password); while (WiFi.status() != WL_CONNECTED) { delay(500); Serial.print("."); } Serial.println(""); Serial.println("WiFi connected"); Serial.println("IP address: "); Serial.println(WiFi.localIP()); } unsigned long previousMillis = 0; const long delayTime = 3000000; //1초(1000) 대기시간 bool firstChk = false; String seq_str = ""; String data_seq = ""; int weatherState = 0;//0 sunny 1 rain 2 snow int prevWState=-1; int wColor[5][3] = { {0,180,255},{0,0,255},{0,0,255},{255,100,30},{0,0,255} }; int snowCode = 0; void loop() { unsigned long currentMillis = millis(); if(currentMillis - previousMillis >= delayTime || firstChk==false) { firstChk = true; previousMillis = currentMillis; Serial.print("connecting to "); Serial.println(host); // Use WiFiClient class to create TCP connections WiFiClient client; const int httpPort = 80; //http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1144066000 if (!client.connect(host, httpPort)) { Serial.println("connection failed"); return; } long randNumber = random(300000); String url = "/wid/queryDFSRSS.jsp?zone=1144066000&rNum="+String(randNumber); // String url = "/test/weather.xml"; Serial.print("Requesting URL: "); Serial.println(url); // This will send the request to the server client.print(String("GET ") + url + " HTTP/1.1\r\n" + "Host: " + host + "\r\n" + "Connection: close\r\n\r\n"); delay(3000); Serial.print("client.available(): "); Serial.println(client.available()); memset(wData, 0, sizeof wData); wDataCnt = 0; while(client.available()){ //라인을 기준으로 문자열을 저장한다. String line = client.readStringUntil('\n'); delay(100); int seq = line.indexOf("<data seq=\""); if (seq >= 0) { seq_str = "<data seq=\""; int seq_end = line.indexOf("\">"); data_seq = line.substring(seq + seq_str.length(), seq_end); if(data_seq.toInt()>CHK_DATACNT-1)break; } // if(data_seq.toInt()>0) //이부분의 주석을 없애면 3시간 뒤 날씨부터 표현됩니다. // { //이부분의 주석을 없애면 3시간 뒤 날씨부터 표현됩니다. int pty= line.indexOf("</pty>"); if(pty>0)//pty라는 줄만 체크하겠다. { String pty_str="<pty>"; String wt_pty = line.substring(line.indexOf(pty_str)+pty_str.length(),pty); Serial.print("data_seq: "); Serial.println(data_seq.toInt()); Serial.print("wt_pty: "); Serial.println(wt_pty); int num = wt_pty.toInt(); wData[wDataCnt] = num; //weatherState = num; wDataCnt++; } // } //이부분의 주석을 없애면 3시간 뒤 날씨부터 표현됩니다. /* * 아래 부분이 변형된 부분입니다. * 기존은 계속 pty코드를 체크하다가 하루이내(data_seq의 값이 8이하)에 눈이나 비가 오면 * 바로 색을 바꾸는 형태였는데 * 아래 코드는 CHK_DATACNT_WANT에 선언한 코드만큼만 체크할 수 있습니다. * 가령 나는 3시간 이내의 예보만 확인해서 보여주겠다 싶으면 CHK_DATACNT_WANT를 2라고 선언하시면 됩니다. * 그리고 그 아래 for문은 3시간 이내 예보지만 전체 하루(data_seq의 값이 8이하)이내에 눈 예보가 있으면 * 모든 걸 무시하고 눈이 올때 지정한 조명색으로 보여주는 코드입니다. */ } for (int j = 0; j < CHK_DATACNT_WANT; j++) { Serial.print("wData[j]: "); Serial.println(wData[j]); if(wData[j]>0){ weatherState = wData[j]; break; } } for(int k=0; k<CHK_DATACNT; k++){ Serial.print("wData[k]: "); Serial.println(wData[k]); if(wData[k]==3){ weatherState = wData[k]; break; } } Serial.print("weatherState: "); Serial.println(weatherState); client.stop(); Serial.println("closing connection"); if(prevWState!=weatherState){ Serial.println("lightSetting"); lightSetting(); prevWState = weatherState; } } } int FadeSpeed = 10; void lightSetting() { for (int j = bLight; j > 0; j=j-1) { pixels.setBrightness(j); pixels.show(); delay(FadeSpeed); } pixels.clear(); for (int m = 1; m < bLight; m=m+1) { pixels.setBrightness(m); for (int k = 0; k < NUMPIXELS; k++) { pixels.setPixelColor(k, pixels.Color(wColor[weatherState][0], wColor[weatherState][1], wColor[weatherState][2])); } pixels.show(); delay(FadeSpeed); } } |
아래는 모든 재료에 대한 정보 입니다.
케이스 모델링 파일 (커버) 111.80 KB
케이스 모델링(바닥) 93.64 KB
- 핀헤더 암 2.54mm규격
- 핀헤더 수 2.54mm 규격
- 원형 조명케이스 [일광전구 절전형 삼파장 220v 15w G90 전구색 모델명 : EFTR15EXN-L(Globe)]
- 둥근머리 십자볼트 탭핑스크류 (1종) M2*10
- AWG22 컬러 케이블
- 테프론 단선와이어 0.50mm(AWG24)
- V2 Nodemcu-ch340 CP2102버전이 좀 더 나은 버전 해외링크라서... 국내에서 구매하셔도 되는데 기회되시면 한번 사보시는 것도 좋습니다.
- 지크 마이크로5핀 USB 데이터 충전 롱케이블
- pcb 양면 기판
- Micro USB 5핀 PCB기판 모듈
- XL4015 DC-DC 강압형 변환 모듈
- 7bit ws2812 5v rgb led네오픽셀 모듈
- 니퍼 170 플라토
- 벡터-스트립퍼/10071
- 오공본드 201
- 실리콘
- 글루건
- 아사히 ASAHI-4201 국산 포켓 테스터기
- 엑소 핀셋 ESD-7
- 인두기(교육때 쓰던 나무 인두기는 너무 뜨거운 것 같아서 평소 제가 쓰는 모델 입니다.)
- 인두팁 클리너
- [OP932] 확대경 스탠드형 2.25인치 납땜 보조기
- 원목/목재재단(레드파인집성목-12mm)폭 110㎜ x 길이 290㎜
원목/목재재단(레드파인집성목-12mm)폭 50㎜ x 길이 110㎜
원목/목재재단(레드파인집성목-12mm)폭 30㎜ x 길이 50㎜