• Skip to primary navigation
  • Skip to main content

IoTmaker

사물인터넷에 대한 모든 것 여기서 해결하셔요!

  • 홈
  • 책:마이크로파이썬을 활용한 사물인터넷
  • 책:따라 하면서 배우는 사물인터넷
  • 온라인 교육 코스
  • 새로운 소식
  • 의견보내기
  • 내 수강정보
  • 로그인
  • 회원가입

외부 웹서버에 접속하여 정보 교환하기

책에서 사용하는 부품 구입하기 인터넷상의 서버에 직접 접속하여 데이터를 가져올 수 있습니다. 여기서는 기상청의 날씨 예보 RSS에 접속하여 해당 지역의 데이터를 가져옵니다. 이 때 전달되는 데이터는 XML형식으로 표현됩니다..

다음은 HTTP의 GET 형식으로 접속하여 데이터를 가져온 후 시리얼 모니터에 표시하는 예제입니다.

프로그램: http-get-kma
// AP_SSID를 3개까지 지정할 수 있음
#define AP_SSID1  "ap_ssid1"
#define AP_PASS1  "ap_pass1"

#define AP_SSID2  "ap_ssid2"
#define AP_PASS2  "ap_pass2"

#define AP_SSID3  "ap_ssid3"
#define AP_PASS3  "ap_pass3"

// SSID 개수 임의로 지정 가능(AP_SSID1말고 직접 지정해도 됨)
const char* ssid[] = {AP_SSID1,AP_SSID2,AP_SSID3};
const char* pass[] = {AP_PASS1,AP_PASS2,AP_PASS3};

#include <AimWiFi.h>
AimWiFi wifi;

// http 방식으로 접속하기 위함 
#include <ESP8266HTTPClient.h>

// 지역별 날씨 예보 정보를 돌려주는 RSS임 
const char* URL    = "/wid/queryDFSRSS.jsp?zone=1171065000";
const char* SERVER = "www.kma.go.kr";
//www.kma.go.kr/wid/queryDFSRSS.jsp?zone=1171065000

#include <AimTimer.h>
AimTimer timerWeather(10);

// XML 형식의 데이터를 돌려줌 
#include <AimGetXml.h>

void setup(void) {
  Serial.begin(115200);
  Serial.println();
  wifi.begin(ssid,pass,sizeof(ssid));
  timerWeather.nowOn();
}

void loop() {
  if (timerWeather.isOn()) {
  	getWeather();
  }
}

void getWeather() {	
	
	// 인터넷 사이트에 접속하기 위하여 http 생성 
	HTTPClient http;

    // URL 만들기
	String url = String("http://") + SERVER +URL;	

	// 인터넷 사이트에 접속
	http.begin(url);

	// 인터넷 사이트에서 데이터 받아오기 위하여 접속 시도  
	int httpCode = http.GET();
    
	// 인터넷 사이트에 접속이 되면 
	if (httpCode > 0 ) {

	  // 인터넷 사이트에서 데이터를 받아옴 
	  String payload = http.getString();

	  // <tm>202007210200</TM> 사이의 값 가져옴
	  String tm    = AimGetXml(payload,"tm");

	  String temp  = AimGetXml(payload,"temp");
	  String wfEn  = AimGetXml(payload,"wfEn");
	  String wfKor = AimGetXml(payload,"wfKor");
	  String reh   = AimGetXml(payload,"reh");
	  Serial.println("Date time:"+tm);
	  Serial.println("Temperature:"+temp);
	  Serial.println("Humidity :"+reh);
	  Serial.println("Cloudy:"+wfEn);
	  Serial.println("구름:"+wfKor);
	  Serial.println();
	}
	else {
		Serial.printf("httpCode=%d\n",httpCode);
	}
	// 접속을 종료함 
	http.end();	
}

실행 결과입니다.

시리얼 모니터에 출력된 실행 결과
Connecting to [ap_ssid1],[ap_ssid2],[ap_ssid3]
.....
Connected to [ap_ssid1],IP=192.168.35.246
Date time:202007210200
Temperature:23.0
Humidity :85
Cloudy:Mostly Cloudy
구름:구름 많음
지역별 날씨 정보 RSS를 얻는 방법
01 기상청 날씨누리 바로가기를 누릅니다.

02 지역을 설정하고 RSS 버튼을 누릅니다.

03 URL을 복사하여 사용합니다.

다음은 기상청의 날씨 예보 RSS에 브라우저로 접속한 결과입니다. 데이터가 XML 형식으로 표시되어 있습니다. 프로그램에서 XML 데이터를 읽어서 파싱하여 원하는 값을 얻게 됩니다.

기상청 날씨 예보 RSS 브라우저 표시

Copyright © 2025 ·로그인