공공데이터포털에서 대기오염정보 조회 서비스를 신청한다.

그리고 실행을 하면 아래 그림과 같이 나온다.


최신 정보만 받아올 것이므로 numOfRows의 숫자를 1로 바꿔준다.

최신 1시간 정보만 가져오므로 파싱해야할 데이터가 줄기 때문에 좋다.

 


최신의 데이터 1개만 표시된다.

주소부분을 복사해서 소스 코드에 넣는다.


아두이노 소스는 https://github.com/LOVOTLAB/youtube/blob/master/ESP8266/airQuality_1getXMLfromAirKorea/airQuality_1getXMLfromAirKorea.ino 에서 가져왔다.

원래소스는 부분으로 나눠놓았지만

String url =""부분에 복사한 주소를 넣고 처리함.

#include <ESP8266WiFi.h> // ESP 8266 와이파이 라이브러리
#include <ESP8266HTTPClient.h> // HTTP 클라이언트


String url = "http://openapi.airkorea.or.kr/openapi/services/rest/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty?serviceKey=당신의 키값을 넣으세요&numOfRows=1&pageNo=1&stationName=%EC%84%9D%EB%B0%94%EC%9C%84&dataTerm=DAILY&ver=1.3";

void setup()
{
  // 시리얼 세팅
  Serial.begin(115200);
  Serial.println();

  // 와이파이 접속
  WiFi.begin("공유기이름넣으세요", "비밀번호수정하세요"); // 공유기 이름과 비밀번호

  Serial.print("Connecting");
  while (WiFi.status() != WL_CONNECTED) // 와이파이 접속하는 동안 "." 출력
  {
    delay(500);
    Serial.print(".");
  }
  Serial.println();

  Serial.print("Connected, IP address: ");
  Serial.println(WiFi.localIP()); // 접속된 와이파이 주소 출력
}

void loop() {
  if (WiFi.status() == WL_CONNECTED) // 와이파이가 접속되어 있는 경우
  {
    WiFiClient client; // 와이파이 클라이언트 객체
    HTTPClient http; // HTTP 클라이언트 객체

    if (http.begin(client, url)) {  // HTTP
      // 서버에 연결하고 HTTP 헤더 전송
      int httpCode = http.GET();

      // httpCode 가 음수라면 에러
      if (httpCode > 0) { // 에러가 없는 경우
        if (httpCode == HTTP_CODE_OK || httpCode == HTTP_CODE_MOVED_PERMANENTLY) {
          String payload = http.getString(); // 받은 XML 데이터를 String에 저장
          Serial.println(payload);
        }
      } else {
        Serial.printf("[HTTP] GET... 실패, 에러코드: %s\n", http.errorToString(httpCode).c_str());
      }
      http.end();
    } else {
      Serial.printf("[HTTP] 접속 불가\n");
    }
    delay(600000);
  }
}

 

그래서 얻은 결과는 다음과 같다.

 

<?xml version="1.0" encoding="UTF-8"?>




<response>
	<header>
		<resultCode>00</resultCode>
		<resultMsg>NORMAL SERVICE.</resultMsg>
	</header>
	<body>
		<items>
			
				<item>
					<dataTime>2020-03-23 01:00</dataTime>
					
                        <mangName>도로변대기</mangName>
                    
					<so2Value>0.007</so2Value>
					<coValue>0.5</coValue>
					<o3Value>0.039</o3Value>
					<no2Value>0.018</no2Value>
					<pm10Value>40</pm10Value>
					
                        <pm10Value24>35</pm10Value24>
                    
					
                        <pm25Value>21</pm25Value>
                    
                    
                        <pm25Value24>17</pm25Value24>
                    
					<khaiValue>58</khaiValue>
					<khaiGrade>2</khaiGrade>
					<so2Grade>1</so2Grade>
					<coGrade>1</coGrade>
					<o3Grade>2</o3Grade>
					<no2Grade>1</no2Grade>
					<pm10Grade>2</pm10Grade>
					
                        <pm25Grade>2</pm25Grade>
                    
                    
                        <pm10Grade1h>2</pm10Grade1h>
                        <pm25Grade1h>2</pm25Grade1h>
                    
				</item>
			
		</items>
			<numOfRows>1</numOfRows>
			<pageNo>1</pageNo>
			<totalCount>23</totalCount>
	</body>
</response>

나중에 PM10과 PM2.5부분의 파싱을 해보자

https://jpal.tistory.com/441

+ Recent posts