13주차 : 공공데이터 활용 미세먼지 정보 표시 - dhryu60/SmartDevice_2025-1 GitHub Wiki

ESP32를 이용한 공공데이터 미세먼지 정보 표시 강의 자료

1. 학습 목표

ESP32를 사용하여 공공데이터 포털에서 미세먼지 정보를 가져와 OLED에 표시하는 프로젝트를 학습한다.

  • 공공데이터 API 활용 방법을 이해한다.
  • ESP32를 통해 네트워크 통신 및 디스플레이 제어를 학습한다.
  • 아두이노 IDE를 사용하여 코드 작성 및 OLED 디스플레이 제어를 실습한다.

2. 준비물

  • ESP32 보드
  • ESP32 확장 실드
  • OLED 디스플레이 (128x32)

3. 프로젝트 개요

ESP32는 인터넷 접속이 가능하므로 공공데이터 포털의 Open API를 통해 대기오염 정보를 가져올 수 있다. 본 프로젝트에서는 한국환경공단의 "에어코리아 대기오염정보" API를 이용하여 미세먼지(PM10) 데이터를 가져오고 OLED에 등급별 아이콘과 수치를 표시한다.

4. 공공데이터 API 신청 및 인증키 발급

  1. 공공데이터 포털 접속: https://www.data.go.kr/ 접속한다.
  2. 회원가입 및 로그인: 계정을 만들어 로그인한다.
  3. API 검색: "한국환경공단_에어코리아_대기오염정보"를 검색한다.
  4. 활용 신청: 해당 API 상세 페이지에서 "활용신청" 버튼을 클릭한다.
  5. 활용 목적 입력 및 동의: 활용 목적을 기재하고 라이선스 동의 후 신청한다.
  6. 인증키 발급 확인: 일반 인증키를 발급받아 복사해 둔다.

5. API 요청 URL 구성

다음과 같이 변수들을 조합하여 API 요청 URL을 구성한다.

https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty
?serviceKey={인증키}&returnType=xml&numOfRows=1&pageNo=1&stationName=과천동&dataTerm=DAILY&ver=1.3

6. 이미지 준비 및 OLED 아이콘 표시

  1. 아이콘 준비: OLED 디스플레이 사이즈(128x32)에 맞춰 아이콘 이미지를 32x32 크기로 준비한다.
  2. 이미지 변환: https://javl.github.io/image2cpp 사이트를 이용해 이미지를 C 배열 코드로 변환한다.
  3. images.h 파일 생성: 아두이노 IDE에서 새 탭을 생성하고 images.h로 저장한다.
  4. 이미지 배열 작성: 변환한 C 배열을 VeryGood, Good, Bad, VeryBad 네 가지 이름으로 정의한다.
const unsigned char VeryGood [] PROGMEM = { ... };
const unsigned char Good [] PROGMEM = { ... };
const unsigned char Bad [] PROGMEM = { ... };
const unsigned char VeryBad [] PROGMEM = { ... };

image

image

image

7. OLED 디스플레이 코드

  1. OLED 초기화 및 주소 설정
#define OLED_RESET -1
#define SCREEN_ADDRESS 0x3C
Adafruit_SSD1306 display(SCREEN_WIDTH, SCREEN_HEIGHT, &Wire, OLED_RESET);
if (!display.begin(SSD1306_SWITCHCAPVCC, SCREEN_ADDRESS)) {
  Serial.println(F("SSD1306 allocation failed"));
  for(;;);
}
display.clearDisplay();
  1. 아이콘 표시
display.drawBitmap(0, 0, VeryGood, 32, 32, 1);
display.display();

8. 공공데이터 파싱 및 표시

  1. 데이터 추출: 응답 데이터에서 <dataTime>, <pm10Value>, <pm10Grade> 태그를 찾아 값을 추출한다.
i = line.indexOf("</dataTime>");
if (i > 0) {
  tmp_str = "<dataTime>";
  dateNtime = line.substring(line.indexOf(tmp_str) + tmp_str.length(), i);
  Serial.println(dateNtime);
}
  1. 등급별 아이콘 및 값 표시: 추출한 등급에 따라 VeryGood, Good, Bad, VeryBad 중 하나를 선택하여 OLED에 표시한다.

9. 실행 결과

  • OLED 디스플레이에 미세먼지 등급에 따른 아이콘과 측정값이 표시된다.
  • Wi-Fi 연결 후 공공데이터가 실시간으로 반영되는 모습을 확인할 수 있다.

image

10. PPT 와 소스코드

챕터10.공공 데이터 활용.pdf

챕터10.공공데이터활용.zip

⚠️ **GitHub.com Fallback** ⚠️