13주차 : 공공데이터 활용 미세먼지 정보 표시 - dhryu60/SmartDevice_2025-1 GitHub Wiki
ESP32를 사용하여 공공데이터 포털에서 미세먼지 정보를 가져와 OLED에 표시하는 프로젝트를 학습한다.
- 공공데이터 API 활용 방법을 이해한다.
- ESP32를 통해 네트워크 통신 및 디스플레이 제어를 학습한다.
- 아두이노 IDE를 사용하여 코드 작성 및 OLED 디스플레이 제어를 실습한다.
- ESP32 보드
- ESP32 확장 실드
- OLED 디스플레이 (128x32)
ESP32는 인터넷 접속이 가능하므로 공공데이터 포털의 Open API를 통해 대기오염 정보를 가져올 수 있다. 본 프로젝트에서는 한국환경공단의 "에어코리아 대기오염정보" API를 이용하여 미세먼지(PM10) 데이터를 가져오고 OLED에 등급별 아이콘과 수치를 표시한다.
- 공공데이터 포털 접속: https://www.data.go.kr/ 접속한다.
- 회원가입 및 로그인: 계정을 만들어 로그인한다.
- API 검색: "한국환경공단_에어코리아_대기오염정보"를 검색한다.
- 활용 신청: 해당 API 상세 페이지에서 "활용신청" 버튼을 클릭한다.
- 활용 목적 입력 및 동의: 활용 목적을 기재하고 라이선스 동의 후 신청한다.
- 인증키 발급 확인: 일반 인증키를 발급받아 복사해 둔다.
다음과 같이 변수들을 조합하여 API 요청 URL을 구성한다.
https://apis.data.go.kr/B552584/ArpltnInforInqireSvc/getMsrstnAcctoRltmMesureDnsty
?serviceKey={인증키}&returnType=xml&numOfRows=1&pageNo=1&stationName=과천동&dataTerm=DAILY&ver=1.3
- 아이콘 준비: OLED 디스플레이 사이즈(128x32)에 맞춰 아이콘 이미지를 32x32 크기로 준비한다.
- 이미지 변환: https://javl.github.io/image2cpp 사이트를 이용해 이미지를 C 배열 코드로 변환한다.
-
images.h 파일 생성: 아두이노 IDE에서 새 탭을 생성하고
images.h
로 저장한다. -
이미지 배열 작성: 변환한 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 = { ... };
- 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();
- 아이콘 표시
display.drawBitmap(0, 0, VeryGood, 32, 32, 1);
display.display();
-
데이터 추출: 응답 데이터에서
<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);
}
- 등급별 아이콘 및 값 표시: 추출한 등급에 따라 VeryGood, Good, Bad, VeryBad 중 하나를 선택하여 OLED에 표시한다.
- OLED 디스플레이에 미세먼지 등급에 따른 아이콘과 측정값이 표시된다.
- Wi-Fi 연결 후 공공데이터가 실시간으로 반영되는 모습을 확인할 수 있다.