아두이노 nodemcu 을 이용해서 기상청에서 날씨을 가져오는 프로그램 소스 공유합니다.
아래의 프로그램을 간단히 설명하면,
1. 와이파이로 인터넷에 접속한다.
2. 기상청에 접속해서 우리 동네 날짜를 xml로 가져온다.
3. 가져온 xml을 파싱해서 현재 온도, 날씨, 습도를 String에 저장하고 출력한다.
해외 날씨 api을 이용해 날씨 정보를 가져오는 공개된 아두이노 프로그램은 있으나,
국내 기상청 api을 이용해 날씨를 가져오는 프로그램은 찾지 못해서 만들어서 올려봅니다.
소스는 간단하나 oled, lcd, led 등을 이용해 현재 날씨 정보을 다양하고 재미있는 방법으로 표현해 보세요.
필요한 준비물은
5불짜리 nodemcu 하나와 usb 케이블
아래 주소는 구매처
소스의 xml 는 아래와 같습니다. 맨뒤에 zone은 동을 숫자로 나타내고 있습니다.
http://www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1162058500
xml 주소를 가져오는 방법은 아래의 url로 접속하셔서,
시구동을 선택하고 rss을 누르면, 해당 지역의 url 주소를 아실 수 있습니다.
--------------------------- 소스 시작--------------------------
#include <ESP8266WiFi.h>
// 와이파이 ssid을 입력해주세요.
const char* ssid = "XXXXXXX";
//와이파이 비밀번호를 입력해주세요.
const char* password = "XXXXXX";
const char* host = "www.kma.go.kr";
void setup() {
Serial.begin(115200);
delay(10);
// We start by connecting to a WiFi network
Serial.println();
Serial.println();
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());
}
int value = 0;
void loop() {
++value;
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=1162058500
if (!client.connect(host, httpPort)) {
Serial.println("connection failed");
return;
}
// We now create a URI for the request
//zone을 일종의 지역 정보입니다.
String url = "/wid/queryDFSRSS.jsp?zone=1162058500";
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(10);
// Read all the lines of the reply from server and print them to Serial
String weather_str="";
//온도
String wt_temp="";
//오늘의날씨
String wt_wfKor="";
String wt_wfEn="";
//습도
String wt_reh="";
int i=0;
while(client.available()){
i++;
//라인을 기준으로 문자열을 저장한다.
String line = client.readStringUntil('\n');
int temp33= line.indexOf("seq=\"1\"");
if(temp33>0)
{
break;
}
//온도 xml 에서 파싱
int temp= line.indexOf("</temp>");
if(temp>0)
{
String tmp_str="<temp>";
String wt_temp = line.substring(line.indexOf(tmp_str)+tmp_str.length(),temp);
Serial.println(wt_temp);
}
//날씨 정보 영문으로 가져오기
int wfEn= line.indexOf("</wfEn>");
if(wfEn>0)
{
String tmp_str="<wfEn>";
String wt_twfEn = line.substring(line.indexOf(tmp_str)+tmp_str.length(),wfEn);
Serial.println(wt_twfEn);
}
//날씨 정보 으로 가져오기
int wfKor= line.indexOf("</wfKor>");
if(wfKor>0)
{
String tmp_str="<wfKor>";
String wt_wfKor = line.substring(line.indexOf(tmp_str)+tmp_str.length(),wfKor);
Serial.println(wt_wfKor);
}
int reh= line.indexOf("</reh>");
if(reh>0)
{
String tmp_str="<reh>";
String wt_reh = line.substring(line.indexOf(tmp_str)+tmp_str.length(),reh);
Serial.println(wt_reh);
}
}
//int ln_num= weather_str.indexOf("\n");
Serial.println();
Serial.println("closing connection");
delay(20000);
}
'컴퓨터 프로그래밍 > NodeMCU' 카테고리의 다른 글
만원으로 미세먼지 측정기 자작하기. (0) | 2016.04.04 |
---|---|
Nodemcu 소개 특징 (0) | 2015.11.03 |
NodeMCU V1.0 Arduino IDE 환경 구축하기 (0) | 2015.11.03 |